Tải bản đầy đủ (.doc) (42 trang)

BÁO CÁO ĐỒ ÁN ĐỀ TÀI: XÂY DỰNG HỆ THỐNG AI NHẬN DIỆN KHUÔN MẶT TRONG MUA SẮM Giáo viên hướng dẫn: ThS Phan Trọng Thanh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.46 MB, 42 trang )

ĐẠI HỌC CÔNG NGHỆ
THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
----------

BÁO CÁO ĐỜ ÁN 5
ĐỀ TÀI:
XÂY DỰNG HỆ THỐNG AI NHẬN DIỆN
KHUÔN MẶT TRONG MUA SẮM
Giáo viên hướng dẫn: ThS. Phan Trọng Thanh
Sinh viên thực hiện : Trần Thị Ngọc Anh
Nguyễn Trọng Nghĩa
Lớp
: 18IT5

Đà Nẵng, tháng 05 năm 2021


ĐẠI HỌC CÔNG NGHỆ
THÔNG TIN VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KHOA HỌC MÁY TÍNH
----------

BÁO CÁO ĐỜ ÁN 5
ĐỀ TÀI:
XÂY DỰNG HỆ THỐNG AI NHẬN DIỆN
KHUÔN MẶT TRONG MUA SẮM

Giáo viên hướng dẫn: ThS. Phan Trọng Thanh
Sinh viên thực hiện : Trần Thị Ngọc Anh
Nguyễn Trọng Nghĩa


Lớp
: 18IT5

Đà Nẵng, tháng 05 năm 2021


MỤC LỤC
MỤC LỤC...................................................................................................................... 3
......................................................................................................................................... 5
MỤC LỤC HÌNH ẢNH.................................................................................................5
LỜI CẢM ƠN................................................................................................................7
LỜI NÓI ĐẦU................................................................................................................8
CHƯƠNG 1. GIỚI THIỆU...........................................................................................9
1.1. Giới thiệu về đề tài....................................................................................................9
1.2. Vấn đề cần giải quyết..............................................................................................10
1.3. Đề xuất nội dung thực hiện.....................................................................................10
1.4. Chức năng dự kiến..................................................................................................10
CHƯƠNG 2. NGHIÊN CỨU TỔNG QUAN.............................................................11
2.1. Tổng quan về Python...............................................................................................11
2.1.1. Python là gì?.........................................................................................................11
2.1.2. Đặc điểm.............................................................................................................11
2.1.3. Tính năng chính...................................................................................................11
2.1.4. Python được sử dụng ở đâu?...............................................................................12
2.1.5. Lý do nên bắt đầu lập trình với Python...............................................................13
2.2. Tổng quan về quá trình xử lí ảnh............................................................................13
2.2.1. Quá trình xử lí ảnh...............................................................................................13
2.2.2. Các vấn đề cơ bản trong xử lí ảnh.......................................................................15
2.3. Tổng quan về các thư viện cài đặt...........................................................................17
2.3.1. Open CV..............................................................................................................17
2.3.2. Tensorflow...........................................................................................................19

2.3.3. Matplotlib............................................................................................................. 21
2.3.4. Pillow................................................................................................................... 23
2.3.5. Scipy....................................................................................................................23
2.3.6. Scikit-learn...........................................................................................................24
2.4. Hệ thống nhân diện khuôn mặt...............................................................................26
2.4.1. Các ứng dụng phổ biến........................................................................................26
2.4.2. Các loại hệ thống xác thực...................................................................................26
2.5.3. Các phương pháp xác thực gương mặt.................................................................26
2.5.4. Các pretrain model facenet...................................................................................28
2.5.1. Tổng quan về thư viện..........................................................................................28
2.5.2. Cấu trúc CNNs.....................................................................................................29
2.6.3. Cách thức hoạt dộng.............................................................................................30
2.5.4. Các bài toán khác nhau về Face...........................................................................32
2.5.5. Thuật toán nhận dạng Facenet..............................................................................34
CHƯƠNG 3. DEMO CHƯƠNG TRÌNH...................................................................36
3.1. Đăng kí tài khoản....................................................................................................36
3.2. Đăng nhập hệ thống................................................................................................36
3.3. Trang mua hàng.......................................................................................................37
3.4. Trang đặt hàng........................................................................................................38
3.5. Trang giỏ hàng........................................................................................................38


3.6. Trang thanh toán.....................................................................................................39
3.7. Trang thanh toán thành công...................................................................................39
4.1. Kết quả....................................................................................................................41
4.1.1. Kết quả đạt được..................................................................................................41
4.1.2. Hạn chế còn tồn đọng...........................................................................................41
4.2. Hướng phát triển.....................................................................................................41
TÀI LIỆU THAM KHẢO...........................................................................................42



MỤC LỤC HÌNH ẢNH


NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………

……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
…………………………………………………………

Chữ ký của giảng viên hướng dẫn

………………………………


LỜI CẢM ƠN
Trên thực tế khơng có sự thành cơng nào mà không gắn liền với những sự hỗ trợ,
giúp đỡ dù ít hay nhiều, dù trực tiếp hay gián tiếp của người khác. Trong suốt quãng
thời gian từ khi bắt đầu học tập tại giảng đường trường Đại học Công nghệ Thông tin và
Truyền thông Việt Hàn - Đại học Đà Nẵng, chúng tôi đã nhận được rất nhiều sự quan
tâm, giúp đỡ của thầy cô và các bạn.
Với lịng biết ơn sâu sắc nhất, nhóm chúng tơi xin gửi lời cảm ơn chân thành tới
toàn thể các thầy cô giáo trong khoa Công nghệ thông tin và truyền thông Đại học Việt
Hàn, những người đã dạy dỗ và truyền đạt vốn kiến thức vô cùng quý báu của mình cho
chúng tơi trong suốt qng thời gian học tại đây. Những tình cảm và kiến thức mà thầy
cơ đã gửi trao cho chúng tôi sẽ là hành trang cho chúng tơi để bước đi trên những đoạn
đường tương lai.
Nhóm chúng tôi cũng xin gửi lời cảm ơn sâu sắc tới Thầy Phan Trọng Thanh,
người đã tận tình hỗ trợ và dẫn dắt nhóm chúng tơi trong suốt quá trình thực hiện đồ án
để có được kết quả một cách tốt nhất.
Một lần nữa nhóm chúng tơi xin được chân thành cảm ơn!


LỜI NĨI ĐẦU
Hiện nay, ngành cơng nghệ thơng tin là một trong những ngành học được chú trọng

trong hệ thống đào tạo của trường Đại học Công nghệ thông tin cũng như các trường
Đại học khác có đào tạo ngành học này. Nó được xem là ngành đào tạo mũi nhọn hướng
đến sự phát triển của công nghệ và khoa học kỹ thuật trong thời đại số hóa ngày
nay.Cơng nghệ thông tin là một ngành học được đào tạo để sử dụng máy tính và các
phần mềm máy tính để phân phối và xử lý các dữ liệu thông tin, đồng thời dùng để trao
đổi, lưu trữ và chuyển đổi các dữ liệu thơng tin dưới nhiều hình thức khác nhau.
Trong bối cảnh phát triển và hội nhập quốc tế, cùng với sự phát triển mạnh mẽ của
cuộc cách mạng công nghiệp 4.0, Việt Nam xác định tập trung phát triển cơng nghệ trí
tuệ nhân tạo (AI) - một mũi nhọn, được dự báo trở thành ngành công nghệ đột phá nhất
trong 10 năm tới. Trí tuệ nhân tạo (AI) đang đi vào cuộc sống một cách mạnh mẽ, thay
thế nhiều công việc thủ công, tốn sức lao động. Tại Việt Nam, Chính phủ xác định cơng
nghệ AI là sự đột phá, mũi nhọn cần được triển khai nghiên cứu.
Tại Việt Nam, AI đã và đang được ứng dụng mạnh mẽ trong nhiều lĩnh vực như y tế,
giáo dục, nông nghiệp, giao thông, thương mại điện tử... Công nghệ AI cũng đã mang
lại cho Việt Nam sự phát triển vượt bậc thời gian qua. Việc ứng dụng AI trong vấn đề
mua sắm đang là đề tài đang rất nóng hiện nay. Các trung tâm mua sắm thường tấp nập
người qua lại, tạo cơ hội cho bạn mua sắm mọi thứ. Hãy hình dung, ngay khi bạn bước
vào một cửa tiệm nào đó, người bán hàng đã mỉm cười với chiếc máy tính bảng trên tay
và chào bạn bằng chính tên của bạn.
Đó là cách mà dịch vụ khách hàng trong vài cửa hàng cao cấp tại châu Âu đã bắt
đầu triển khai từ cuối năm 2015. Các công ty bán hàng hiện đang tiếp thị mạnh công
nghệ này đến nhiều nhà bán lẻ khác nhau trên thế giới. Theo quan điểm mỗi người, có
thể cách làm dựa trên cơng nghệ nhận diện khn mặt nghe có vẻ hấp dẫn nhưng với
một số người thì đó lại sự xâm phạm đến tính riêng tư.
Sau thời gian học tập tại trường, được sự chỉ bảo hướng dẫn nhiệt tình của thầy cơ
giáo trường Đại học Công nghệ Thông tin và Truyền thông Việt - Hàn, chúng tôi đã kết
thúc khoá học và đã tích luỹ được vốn kiến thức nhất định. Được sự đồng ý của nhà
trường và thầy Phan Trọng Thanh chúng tôi được giao đề tài : “Xây dựng hệ thống AI
nhận diện khuôn mặt trong mua sắm ”.
Đồ án môn học của chúng tôi gồm 4 chương:

Chương 1: Giới thiệu
Chương 2: Nghiên cứu tổng quan
Chương 3: Demo chương trình
Chương 4: Kết quả và hướng phát triển


CHƯƠNG 1. GIỚI THIỆU
1.1. Giới thiệu về đề tài
Đề tài : “Xây dựng hệ thống AI nhận diện khuôn mặt trong mua sắm”.
Bối cảnh thực hiện đề tài
Ngày nay, cùng với những tiến bộ vượt bậc của khoa học kỹ thuật nói chung, bộ
mơn khoa học xử lý ảnh đã và đang thu được những thành tựu lớn lao và chứng tỏ vai
trị khơng thể thiếu với những ứng dụng sâu rộng trong khoa học kỹ thuật cũng như đời
sống xã hội. Một bộ phận của khoa học xử lý ảnh là lĩnh vực thị giác máy tính hiện
đang thu hút rất nhiều sự quan tâm của các nhà nghiên cứu xử lý ảnh với mục tiêu xây
dựng nên một thế giới trong đó hệ thống thị giác kỳ diệu của con người có thể được mơ
phỏng bởi các hệ thống máy tính, đem lại khả năng cảm nhận bằng thị giác cho các hệ
thống về môi trường xung quanh.
Mơ ước về một hệ thống máy tính có thể hồ nhập vào thế giới con người với đầy
đủ các giác quan trong đó thị giác đóng vai trị quan trọng đang dần dần được hiện thực
hoá với những đóng góp nghiên cứu của các nhà khoa học trên phạm vi toàn thế giới.
Đồng thời việc phát triển của các thiết bị phần cứng cả về phương diện thu nhận, hiển
thị, tốc độ xử lý đã mở ra nhiều hướng mới cho cơng nghệ xử lý ảnh. Nó có thể giải
quyết các bài toán như giám sát tự động phục vụ trong cơ quan, ngân hàng, kho bạc, ...
hoặc trong việc giám sát giao thông tự động, phục vụ tại bãi đỗ xe, trạm thu phí tự động
hoặc việc phát hiện và nhận dạng mặt người phục vụ trong công tác quân sự, an ninh.
Một kịch bản trong tương lai có thể là khi khách hàng đã vào cửa hàng, bằng việc
đưa công nghệ nhận diện khuôn mặt để khai thác rất nhiều thông tin khác nhằm cung
cấp trải nghiệm cá nhân tuyệt vời cho họ. Đồng thời hệ thống dựa trên các tương tác
trong quá khứ để đọc và phân tích hành vi mua sắm và cảm xúc của khách hàng. Luồng

thông tin về trải nghiệm khách hàng theo thời gian thực có thể cung cấp dữ liệu cho tất
cả mọi hoạt động từ các ưu đãi dựa trên mua sắm so sánh cùng ngày của khách hàng,
đến hồ sơ khách hàng cá nhân để hỗ trợ các tương tác giữa khách hàng và giao dịch viên
hiệu quả hơn.
Hãy tưởng tượng một người quản lý cửa hàng nhận được thông báo rằng một
khách hàng VIP đã vào cửa hàng. Hồ sơ về lịch sử mua sắm gần đây của cô ấy trên cả
trang web của doanh nghiệp và của đối thủ cạnh tranh, cũng như các đánh giá xã hội và
phản hồi mà cô ấy đưa ra về thương hiệu sẽ được cung cấp cho đội ngũ nhân viên. Thay
vì đưa ra một lời chào chung chung, công nghệ sẽ nâng cao sự cá nhân hóa của khách
hàng giúp nhân viên tiếp cận họ thân thiện và đưa ra chất lượng dịch vụ tốt để tạo ra
những trải nghiệm khách hàng thực sự khác biệt.
Với bối cảnh thực trạng hiện nay, nhận diện khuôn mặt đang trở thành xu hướng
của thị trường thương mại, giúp các doanh nghiệp xây dựng hệ thống quản lý nhạy bén
và sáng tạo. Trước hết là đảm bảo an ninh; tiếp theo là mang đến những trải nghiệm
vượt trội trên cơ sở hiểu đúng, hiểu sâu về khách hàng.
Trên thế giới đã ứng dụng công nghệ này để quản lý và chăm sóc khách hàng của
mình tốt hơn chuyên nghiệp hơn. Một số nên tảng bán hàng lớn đã ứng dụng nhận diện
khuôn mặt vào việc thanh toán làm cho việc mua sắm trở nên dễ dàng và an toàn hơn rất
nhiều.


Hình 1. 1: Nhận diện khn mặt trong mua sắm

1.2. Vấn đề cần giải quyết
Hệ thống nhận diện khuôn mặt là một ứng dụng máy tính tự động xác định hoặc
nhận dạng một người nào đó từ một bức hình ảnh kỹ thuật số hoặc một khung hình
video từ một nguồn video. Một trong những cách để thực hiện điều này là so sánh
các đặc điểm khuôn mặt chọn trước từ hình ảnh và một cơ sở dữ liệu về khuôn mặt.
Hệ thống này thường được sử dụng trong các hệ thống an ninh và có thể được so
sánh với các dạng sinh trắc học khác như các hệ thống nhận dạng vân tay hay trịng mắt.

Từ đó thu thập, phân tích các tài liệu về nhận dạng khn mặt, tìm hiểu các phương
pháp nhận dạng khn mặt, nghiên cứu các công cụ xây dựng hệ thống.

1.3. Đề xuất nội dung thực hiện
Đối với đề tài “Xây dựng hệ thống AI nhận diện khuôn mặt trong mua sắm”.
Việc hệ thống có thể nhận dạng chính xác là một việc quan trọng. Đối với đề tài này,
chúng em thực hiện xây dựng hệ thống nhận diện gương mặt sử dụng Deep learning với
khả năng “Nhận dạng gương mặt nhanh chóng và chính xác”.
Với hệ thống này, chúng em sẽ sử dụng các thư viện được cung cấp bởi PIP trong
python và sử dụng Visual Studio Code để lập trình.

1.4. Chức năng dự kiến
Hệ thống có khả năng lấy dữ liệu gương mặt (Data collection), training dữ liệu
gương mặt vừa lấy được và cuối cùng là chức năng chính nhận diện gương mặt (Face
recognition).


CHƯƠNG 2. NGHIÊN CỨU TỔNG QUAN
2.1. Tổng quan về Python
2.1.1. Python là gì?
Python là một ngơn ngữ lập trình bậc cao cho các mục đích lập trình đa năng,
do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Python được thiết kế với
ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ. Python là ngôn ngữ có hình thức rất sáng
sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình.
Python hồn tồn tạo kiểu động và dùng cơ chế cấp phát bộ nhớ tự động. Python
được phát triển trong một dự án mã mở, do tổ chức phi lợi nhuận Python Software
Foundation quản lý. Ban đầu, Python được phát triển để chạy trên nền Unix. Nhưng rồi
theo thời gian, Python dần mở rộng sang mọi hệ điều hành từ MS-DOS đến Mac OS,
OS/2, Windows, Linux và các hệ điều hành khác thuộc họ Unix.
Ban đầu, Python được phát triển để chạy trên nền Unix. Nhưng rồi theo thời gian,

Python dần mở rộng sang mọi hệ điều hành từ MS-DOS đến Mac OS,
OS/2, Windows, Linux và các hệ điều hành khác thuộc họ Unix. Mặc dù sự phát triển
của Python có sự đóng góp của rất nhiều cá nhân, nhưng Guido van Rossum hiện nay
vẫn là tác giả chủ yếu của Python. Ông giữ vai trò chủ chốt trong việc quyết định hướng
phát triển của Python.

2.1.2. Đặc điểm
Với đặc điểm là một ngôn ngữ dễ học, dễ đọc với bộ mã nguồn và bố cục trực
quan dễ hiểu, về cơ bản ngôn ngữ Python có các điểm sau:
Từ khóa: Ngơn ngữ Python sử dụng chủ yếu các từ khóa bằng tiếng Anh, và hạn
chế sử dụng các từ khóa thuộc ngơn ngữ khác. Python cũng phân biệt các kiểu chữ hoa
hay chữ thường.
Khối lệnh: Python sử dụng lùi đầu dòng (indentation) như dấu cách hay tab để tạo
các khối lệnh. Các khối lệnh con sẽ ở vị trí thụt lùi đầu dịng vào sâu hơn so với khối
lệnh cha mà nó trực thuộc.
Python có khả năng mở rộng linh hoạt: Nếu bạn biết ngơn ngữ lập trình C, bạn
có thể dễ dàng tích hợp ngôn ngữ Python vào việc viết các đoạn hàm khác nhau đáp ứng
nhu cầu của bạn. Bạn có thể mở rộng chức năng của trình thơng dịch, hoặc liên kết trình
thơng dịch Python với các ứng dụng viết từ ngôn ngữ C để mở rộng hoặc tạo lệnh phụ
trợ cho ứng dụng đó.

2.1.3. Tính năng chính
Ngơn ngữ lập trình đơn giản, dễ học: Python có cú pháp rất đơn giản, rõ ràng.
Nó dễ đọc và viết hơn rất nhiều khi so sánh với những ngơn ngữ lập trình khác như C+
+, Java, C#. Python làm cho việc lập trình trở nên thú vị, cho phép bạn tập trung vào
những giải pháp chứ khơng phải cú pháp.
Miễn phí, mã nguồn mở: Bạn có thể tự do sử dụng và phân phối Python, thậm
chí là dùng nó cho mục đích thương mại. Vì là mã nguồn mở, bạn khơng những có thể
sử dụng các phần mềm, chương trình được viết trong Python mà cịn có thể thay đổi mã
nguồn của nó. Python có một cộng đồng rộng lớn, khơng ngừng cải thiện nó mỗi lần cập

nhật.


Khả năng di chuyển: Các chương trình Python có thể di chuyển từ nền tảng này
sang nền tảng khác và chạy nó mà khơng có bất kỳ thay đổi nào. Nó chạy liền mạch trên
hầu hết tất cả các nền tảng như Windows, macOS, Linux.
Khả năng mở rộng và có thể nhúng: Giả sử một ứng dụng đòi hỏi sự phức tạp
rất lớn, bạn có thể dễ dàng kết hợp các phần code bằng C, C++ và những ngôn ngữ khác
(có thể gọi được từ C) vào code Python. Điều này sẽ cung cấp cho ứng dụng của bạn
những tính năng tốt hơn cũng như khả năng scripting mà những ngơn ngữ lập trình khác
khó có thể làm được.
Ngơn ngữ thông dịch cấp cao: Không giống như C/C++, với Python, bạn khơng
phải lo lắng những nhiệm vụ khó khăn như quản lý bộ nhớ, dọn dẹp những dữ liệu vô
nghĩa,... Khi chạy code Python, nó sẽ tự động chuyển đổi code sang ngơn ngữ máy tính
có thể hiểu. Bạn khơng cần lo lắng về bất kỳ hoạt động ở cấp thấp nào.
Thư viện tiêu chuẩn lớn để giải quyết những tác vụ phổ biến: Python có một
số lượng lớn thư viện tiêu chuẩn giúp cho cơng việc lập trình của bạn trở nên dễ thở hơn
rất nhiều, đơn giản vì khơng phải tự viết tất cả code. Ví dụ: Bạn cần kết nối cơ sở dữ
liệu MySQL trên Web server? Bạn có thể nhập thư viện MySQLdb và sử dụng nó.
Những thư viện này được kiểm tra kỹ lưỡng và được sử dụng bởi hàng trăm người. Vì
vậy, bạn có thể chắc chắn rằng nó sẽ khơng làm hỏng code hay ứng dụng của mình.
Hướng đối tượng: Mọi thứ trong Python đều là hướng đối tượng. Lập trình
hướng đối tượng (OOP) giúp giải quyết những vấn đề phức tạp một cách trực quan. Với
OOP, bạn có thể phân chia những vấn đề phức tạp thành những tập nhỏ hơn bằng cách
tạo ra các đối tượng.

2.1.4. Python được sử dụng ở đâu?
Lập trình ứng dụng web: Bạn có thể tạo web app có khả năng mở rộng (scalable)
được bằng cách sử dụng framework và CMS (Hệ thống quản trị nội dung) được tích hợp
trong Python. Vài nền tảng phổ biến để tạo web app là: Django, Flask, Pyramid, Plone,

Django CMS. Các trang như Mozilla, Reddit, Instagram và PBS đều được viết bằng
Python.
Khoa học và tính tốn: Có nhiều thư viện trong Python cho khoa học và tính toán
số liệu, như SciPy và NumPy, được sử dụng cho những mục đích chung chung trong
tính toán. Và, có những thư viện cụ thể như: EarthPy cho khoa học trái đất, AstroPy cho
Thiên văn học,... Ngồi ra, Python cịn được sử dụng nhiều trong machine learning, khai
thác dữ liệu và deep learning.
Tạo nguyên mẫu phần mềm: Python chậm hơn khi so sánh với các ngơn ngữ
được biên dịch như C++ và Java. Nó có thể không phải là lựa chọn tốt nếu nguồn lực bị
giới hạn và yêu cầu về hiệu quả là bắt buộc. Tuy nhiên, Python là ngôn ngữ tuyệt vời để
tạo những nguyên mẫu (bản chạy thử - prototype). Ví dụ, bạn có thể sử dụng Pygame
(thư viện viết game) để tạo ngun mẫu game trước. Nếu thích ngun mẫu đó có thể
dùng C++ để viết game thực sự.
Ngơn ngữ tốt để dạy lập trình: Python được nhiều cơng ty, trường học sử dụng
để dạy lập trình cho trẻ em và những người mới lần đầu học lập trình. Bên cạnh những
tính năng và khả năng tuyệt vời thì cú pháp đơn giản và dễ sử dụng của nó là lý do
chính cho việc này.


Hình 2. 1: Sự phổ biến của Python

2.1.5. Lý do nên bắt đầu lập trình với Python
Cú pháp đơn giản: Lập trình bằng Python rất thú vị. Nó dễ dàng để hiểu và code
bằng Python. Cú pháp của Python khá giống với ngơn ngữ tự nhiên, ví dụ như đoạn
code dưới đây:
a=2
b=3
sum = a + b
print(sum)
Ngay cả khi chưa lập trình bao giờ, bạn có thể dễ dàng đoán được đoạn code này

thêm vào hai số a, b, tính tổng và in tổng của chúng.
Không quá khắt khe: Không quá khắt khe là lý do giải thích tại sao
những người mới học lập trình nên sử dụng ngơn ngữ Python. Khác với
những ngôn ngữ khác, Python không cần xác định kiểu của một biến,
không cần thêm dấu chấm hay dấu phẩy vào cuối mỗi câu. Mặc dù
những điều này rất nhỏ nhặt nhưng lại giúp việc học lập trình cho
người mới bắt đầu trở nên dễ dàng hơn.
Viết code ít hơn: Python cho phép viết những chương trình có nhiều chức năng
tốt hơn với ít dịng code hơn.
Cộng đồng lớn, hỗ trợ tốt: Cộng đồng người sử dụng ngôn ngữ lập trình Python
vơ cùng lớn, hoạt động trên nhiều diễn đàn. Cho nên khi gặp phải bất kỳ vấn đề nào cần
giải đáp thì bạn sẽ được hỗ trợ một cách nhanh chóng và nhận được lời giải đáp phù hợp
nhất.

2.2. Tổng quan về q trình xử lí ảnh
2.2.1. Q trình xử lí ảnh
Con người thu nhận thơng tin qua các giác quan, trong đó thị giác đóng vai trị
quan trọng nhất. Những năm trở lại đây với sự phát triển của phần cứng máy tính, xử lý
ảnh và đồ hoạ đó phát triển một cách mạnh mẽ và có nhiều ứng dụng trong cuộc sống.
Xử lý ảnh và đồ hoạ đóng một vai trị quan trọng trong tương tác người máy.


Quá trình xử lý ảnh được xem như là quá trình thao tác ảnh đầu vào nhằm cho ra
kết quả mong muốn. Kết quả đầu ra của một quá trình xử lý ảnh có thể là một ảnh “tốt
hơn” hoặc một kết luận.

Hình 2. 2: Quá trình xử lý ảnh
Ảnh có thể xem là tập hợp các điểm ảnh và mỗi điểm ảnh được xem như là đặc
trưng cường độ sáng hay một dấu hiệu nào đó tại một vị trí nào đó của đối tượng trong
khơng gian và nó có thể xem như một hàm n biến P(c1, c2,..., cn). Do đó, ảnh trong xử

lý ảnh có thể xem như ảnh n chiều. Sơ đồ tổng quát của một hệ thống xử lý ảnh:

Hình 2. 3: Các bước cơ bản trong một hệ thống xử lí ảnh
Phần thu nhận ảnh (Image Acquisition): Ảnh có thể nhận qua camera màu hoặc
đen trắng. Thường ảnh nhận qua camera là ảnh tương tự (loại camera ống chuẩn CCIR
với tần số 1/25, mỗi ảnh 25 dịng), cũng có loại camera đã số hoá (như loại CCD –
Charge Coupled Device) là loại photodiode tạo cường độ sáng tại mỗi điểm ảnh.
Camera thường dùng là loại qt dịng ; ảnh tạo ra có dạng hai chiều. Chất lượng một
ảnh thu nhận được phụ thuộc vào thiết bị thu, vào môi trường (ánh sáng, phong cảnh).
Tiền xử lý (Image Processing): Sau bộ thu nhận, ảnh có thể nhiễu độ tương phản
thấp nên cần đưa vào bộ tiền xử lý để nâng cao chất lượng. Chức năng chính của bộ tiền
xử lý là lọc nhiễu, tăng độ tương phản để làm ảnh rõ hơn, nét hơn. Nhận dạng ảnh là
quá trình xác định ảnh. Quá trình này thường thu được bằng cách so sánh với mẫu
chuẩn đã được học (hoặc lưu) từ trước. Nội suy là phán đoán theo ý nghĩa trên cơ sở
nhận dạng.
Ví dụ: một loạt chữ số và nét gạch ngang trên phong bì thư có thể được nội suy thành
mã điện thoại. Có nhiều cách phân loai ảnh khác nhau về ảnh. Theo lý thuyết về nhận
dạng, các mơ hình toán học về ảnh được phân theo hai loại nhận dạng ảnh cơ bản:
- Nhận dạng theo tham số.
- Nhận dạng theo cấu trúc.
Một số đối tượng nhận dạng khá phổ biến hiện nay đang được áp dụng trong khoa học
và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử), nhận dạng văn
bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặt người…


Phân đoạn (Segmentation) hay phân vùng ảnh: Phân vùng ảnh là tách một ảnh
đầu vào thành các vùng thành phần để biểu diễn phân tích, nhận dạng ảnh. Ví dụ: để
nhận dạng chữ (hoặc mã vạch) trên phong bì thư cho mục đích phân loại bưu phẩm, cần
chia các câu, chữ về địa chỉ hoặc tên người thành các từ, các chữ, các số (hoặc các vạch)
riêng biệt để nhận dạng. Đây là phần phức tạp khó khăn nhất trong xử lý ảnh và cũng dễ

gây lỗi, làm mất độ chính xác của ảnh. Kết quả nhận dạng ảnh phụ thuộc rất nhiều vào
công đoạn này.
Biễu diễn ảnh (Image Representation): Đầu ra ảnh sau phân đoạn chứa các điểm
ảnh của vùng ảnh (ảnh đã phân đoạn) cộng với mã liên kết với các vùng lân cận. Việc
biến đổi các số liệu này thành dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy
tính. Việc chọn các tính chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature
Selection) gắn với việc tách các đặc tính của ảnh dưới dạng các thông tin định lượng
hoặc làm cơ sở để phân biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh
nhận được.
Nhận dạng và nội suy ảnh (Image Recognition and Interpretation): Nhận dạng
ảnh là quá trình xác định ảnh. Quá trình này thường thu được bằng cách so sánh với
mẫu chuẩn đã được học (hoặc lưu) từ trước. Nội suy là phán đoán theo ý nghĩa trên cơ
sở nhận dạng. Có nhiều cách phân loại ảnh khác nhau về ảnh. Theo lý thuyết về nhận
dạng, các mơ hình toán học về ảnh được phân theo hai loại nhận dạng ảnh cơ bản:
- Nhận dạng theo tham số.
- Nhận dạng theo cấu trúc. Một số đối tượng nhận dạng khá phổ biến hiện nay đang
được áp dụng trong khoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết
tay, chữ ký điện tử), nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã
vạch, nhận dạng mặt người…
Cơ sở trí thức (Knowledge Base): Như đã nói ở trên, ảnh là một đối tượng khá
phức tạp về đường nét, độ sáng tối, dung lượng điểm ảnh, môi trường để thu ảnh phong
phú kéo theo nhiễu. Trong nhiều khâu xử lý và phân tích ảnh ngồi việc đơn giản hóa
các phương pháp toán học đảm bảo tiện lợi cho xử lý, người ta mong muốn bắt chước
quy trình tiếp nhận và xử lý ảnh theo cách của con người. Trong các bước xử lý đó,
nhiều khâu hiện nay đã xử lý theo các phương pháp trí tuệ con người. Vì vậy, ở đây các
cơ sở tri thức được phát huy.

2.2.2. Các vấn đề cơ bản trong xử lí ảnh
Các khái niệm:
Ảnh và điểm ảnh: Điểm ảnh được xem như là dấu hiệu hay cường độ sáng tại 1 toạ độ

trong không gian của đối tượng và ảnh được xem như là 1 tập hợp các điểm ảnh.
Mức xám, màu:
- Là số các giá trị có thể có của các điểm ảnh của ảnh.
- Nắn chỉnh biến dạng.
- Ảnh thu nhận thường bị biến dạng do các thiết bị quang học và điện tử.
Nắn ảnh biến dạng:


Hình 2. 4: Ảnh thu nhận và ảnh mong muốn
Để khắc phục người ta sử dụng các phép chiếu, các phép chiếu thường được xây dựng
trên tập các điểm điều khiển.
Khử nhiễu: Có 2 loại nhiễu cơ bản trong quá trình thu nhận ảnh
- Nhiều hệ thống: Là nhiễu có quy luật có thể khử bằng các phép biến đổi.
- Nhiễu ngẫu nhiên: Vết bẩn không rõ nguyên nhân → khắc phục bằng các phép
lọc.
Chỉnh mức xám: Nhằm khắc phục tính khơng đồng đều của hệ thống gây ra. Thơng
thường có 2 hướng tiếp cận:
- Giảm số mức xám: Thực hiện bằng cách nhóm các mức xám gần nhau thành một
bó. Trường hợp chỉ có 2 mức xám thì chính là chuyển về ảnh đen trắng. Ứng dụng:
In ảnh màu ra máy in đen trắng.
- Tăng số mức xám: Thực hiện nội suy ra các mức xám trung gian bằng kỹ thuật nội
suy. Kỹ thuật này nhằm tăng cường độ mịn cho ảnh
Trích chọn đặc điểm: Các đặc điểm của đối tượng được trích chọn tuỳ theo mục đích
nhận dạng trong quá trình xử lý ảnh. Có thể nêu ra một số đặc điểm của ảnh sau đây:
- Đặc điểm không gian: Phân bố mức xám, phân bố xác suất, biên độ, điểm uốn v.v..
- Đặc điểm biến đổi: Các đặc điểm loại này được trích chọn bằng việc thực hiện lọc
vùng (zonal filtering). Các bộ vùng được gọi là “mặt nạ đặc 10 điểm” (feature
mask) thường là các khe hẹp với hình dạng khác nhau (chữ nhật, tam giác, cung
tròn v.v..)
- Đặc điểm biên và đường biên: Đặc trưng cho đường biên của đối tượng và do vậy

rất hữu ích trong việc trích trọn các thuộc tính bất biến được dùng khi nhận dạng
đối tượng. Các đặc điểm này có thể được trích chọn nhờ toán tử gradient, toán tử
la bàn, toán tử Laplace, toán tử “chéo không” (zero crossing) v.v.. Việc trích chọn
hiệu quả các đặc điểm giúp cho việc nhận dạng các đối tượng ảnh chính xác, với
tốc độ tính toán cao và dung lượng nhớ lưu trữ giảm xuống.
Nhận dạng: Nhận dạng tự động (automatic recognition), mơ tả đối tượng, phân loại và
phân nhóm các mẫu là những vấn đề quan trọng trong thị giác máy, được ứng dụng
trong nhiều ngành khoa học khác nhau.
Tuy nhiên, một câu hỏi đặt ra là: mẫu (pattern) là gì? Watanabe, một trong những
người đi đầu trong lĩnh vực này đã định nghĩa: “Ngược lại với hỗn loạn (chaos), mẫu là
một thực thể (entity), được xác định một cách ang áng (vaguely defined) và có thể gán
cho nó một tên gọi nào đó”.
Ví dụ mẫu có thể là ảnh của vân tay, ảnh của một vật nào đó được chụp, một chữ
viết, khn mặt người hoặc một ký đồ tín hiệu tiếng nói. Khi biết một mẫu nào đó, để
nhận dạng hoặc phân loại mẫu đó có thể:


Hoặc phân loại có mẫu (supervised classification), chẳng hạn phân tích phân biệt
(discriminant analyis), trong đó mẫu đầu vào được định danh như một thành phần của
một lớp đã xác định.
Hoặc phân loại khơng có mẫu (unsupervised classification hay clustering) trong đó
các mẫu được gán vào các lớp khác nhau dựa trên một tiêu chuẩn đồng dạng nào đó.
Các lớp này cho đến thời điểm phân loại vẫn chưa biết hay chưa được định danh.
Hệ thống nhận dạng tự động bao gồm ba khâu tương ứng với ba giai đoạn chủ yếu sau
đây:
- Thu nhận dữ liệu và tiền xử lý.
- Biểu diễn dữ liệu.
- Nhận dạng, ra quyết định.
Bốn cách tiếp cận khác nhau trong lý thuyết nhận dạng là:
- Đối sánh mẫu dựa trên các đặc trưng được trích chọn.

- Phân loại thống kê.
- Đối sánh cấu trúc.
- Phân loại dựa trên mạng nơ-ron nhân tạo.
Trong các ứng dụng rõ ràng là khơng thể chỉ dùng có một cách tiếp cận đơn lẻ để
phân loại “tối ưu” do vậy cần sử dụng cùng một lúc nhiều phương pháp và cách tiếp cận
khác nhau. Do vậy, các phương thức phân loại tổ hợp hay được sử dụng khi nhận dạng
và nay đã có những kết quả có triển vọng dựa trên thiết kế các hệ thống lai (hybrid
system) bao gồm nhiều mơ hình kết hợp.
Việc giải quyết bài toán nhận dạng trong những ứng dụng mới, nảy sinh trong
cuộc sống không chỉ tạo ra những thách thức về thuật giải, mà còn đặt ra những yêu cầu
về tốc độ tính toán. Đặc điểm chung của tất cả những ứng dụng đó là những đặc điểm
đặc trưng cần thiết thường là nhiều, không thể do chuyên gia đề xuất, mà phải được
trích chọn dựa trên các thủ tục phân tích dữ liệu.
Nén ảnh: Nhằm giảm thiểu không gian lưu trữ. Thường được tiến hành theo cả hai cách
khuynh hướng là nén có bảo tồn và khơng bảo tồn thơng tin. Nén khơng bảo tồn thì
thường có khả năng nén cao hơn nhưng khả năng phục hồi thì kém hơn. Trên cơ sở hai
khuynh hướng, có 4 cách tiếp cận cơ bản trong nén ảnh:
- Nén ảnh thống kê: Kỹ thuật nén này dựa vào việc thống kê tần xuất xuất hiện của
giá trị các điểm ảnh, trên cơ sở đó mà có chiến lược mã hóa thích hợp. Một ví dụ
điển hình cho kỹ thuật mã hóa này là *.TIF.
- Nén ảnh không gian: Kỹ thuật này dựa vào vị trí khơng gian của các điểm ảnh để
tiến hành mã hóa. Kỹ thuật lợi dụng sự giống nhau của các điểm ảnh trong các
vùng gần nhau. Ví dụ cho kỹ thuật này là mã nén *.PCX.
- Nén ảnh sử dụng phép biến đổi: Đây là kỹ thuật tiếp cận theo hướng nén khơng
bảo tồn và do vậy, kỹ thuật thướng nến hiệu quả hơn. *.JPG chính là tiếp cận theo
kỹ thuật nén này.
- Nén ảnh Fractal: Sử dụng tính chất Fractal của các đối tượng ảnh, thể hiện sự lặp
lại của các chi tiết. Kỹ thuật nén sẽ tính toán để chỉ cần lưu trữ phần gốc ảnh và
quy luật sinh ra ảnh theo nguyên lý Fractal.


2.3. Tổng quan về các thư viện cài đặt
2.3.1. Open CV


OpenCV (Open Computer Vision) là một thư viện mã nguồn mở hàng đầu cho xử
lý về thị giác máy tính, machine learning, xử lý ảnh. OpenCV đươc viết bằng C/C++, vì
vậy có tốc độ tính toán rất nhanh, có thể sử dụng với các ứng dụng liên quan đến thời
gian thực. Opencv có các interface cho C/C++, Python Java vì vậy hỗ trợ được cho
Window, Linux, MacOs lẫn Android, iOS OpenCV có cộng đồng hơn 47 nghìn người
dùng và số lượng download vượt quá 6 triệu lần.
OpenCV có rất nhiều ứng dụng như nhận dạng ảnh, xử lý ảnh, phục hồi ảnh/video,
thực tế ảo, các ứng dụng khác,…
Về cơ bản, OpenCV là viết tắt của Open Source Computer Vision, tạm dịch là Thị
giác máy tính mã nguồn mở. Đúng như tên gọi mục đích chính là nhằm tạo ra các chức
năng thị giác máy tính, giám sát các chức năng tổng thể tập trung vào thị giác máy tính
tức thì. Vì OpenCV khơng có tài liệu thích hợp, cho nên theo nhiều nhà phát triển, nó là
một trong những thư viện khó học nhất. Tuy nhiên, nó vẫn cung cấp đầy đủ khả năng để
giúp bạn học thị giác máy tính dễ hơn.
Những khả năng của OpenCV:
- OpenCV là một gói module hình ảnh lý tưởng cho phép bạn đọc và ghi, thay đổi
dữ liệu nhiều hình ảnh cùng một lúc.
- Tạo ra thị giác máy tính cho phép bạn xây dựng lại, gián đoạn và thông hiểu môi
trường 3D từ mơi trường 2D tương ứng của nó.
- OpenCV được xử dùng nhiều trong nhận diện vật thể và hình ảnh được thiết lập
trước, chẳng hạn như khuôn mặt, động vật, cây cối, các vật thể di chuyển,…
- Có thể lưu và chụp bất kỳ khoảnh khắc nào của video và cũng có thể phân tích các
thuộc tính khác nhau của nó như chuyển động, nền,…
- OpenCV tương thích với nhiều hệ điều hành như Windows, OS-X, Open BSD và
nhiều hệ điều hành khác.


Hình 2. 5: Nhận diện khn mặt bằng OpenCV
Tính năng và các module phổ biến của OpenCV
Theo tính năng và ứng dụng của OpenCV, có thể chia thư viện này thánh các
nhóm tính năng và module tương ứng như sau:
- Xử lý và hiển thị Hình ảnh/ Video/ I/O (core, imgproc, highgui).
- Phát hiện các vật thể (objdetect, features2d, nonfree).


-

Geometry-based monocular hoặc stereo computer vision (calib3d, stitching,
videostab).
- Computational photography (photo, video, superres).
- Machine learning & clustering (ml, flann).
- CUDA acceleration (gpu).
OpenCV có cấu trúc module, nghĩa là gói bao gồm một số thư viện liên kết tĩnh
(static libraries) hoặc thư viện liên kết động (shared libraries).
Một số định nghĩa chi tiết các module phổ biến có sẵn:
- Core functionality (core) – module nhỏ gọn để xác định cấu trúc dữ liệu cơ bản,
bao gồm mảng đa chiều dày đặc và nhiều chức năng cơ bản được sử dụng bởi tất
cả các module khác.
- Image Processing (imgproc) – module xử lý hình ảnh gồm cả lọc hình ảnh tuyến
tính và phi tuyến (linear and non-linear image filtering), phép biến đổi hình học
(chỉnh size, afin và warp phối cảnh, ánh xạ lại dựa trên bảng chung), chuyển đổi
không gian màu, biểu đồ, và nhiều cái khác.
- Video Analysis (video) – module phân tích video bao gồm các tính năng ước tính
chuyển động, tách nền, và các thuật toán theo dõi vật thể.
- Camera Calibration and 3D Reconstruction (calib3d) – thuật toán hình học đa
chiều cơ bản, hiệu chuẩn máy ảnh single và stereo (single and stereo camera
calibration), dự đoán kiểu dáng của đối tượng (object pose estimation), thuật toán

thư tín âm thanh nổi (stereo correspondence algorithms) và các yếu tố tái tạo 3D.
- 2D Features Framework (features2d) – phát hiện các đặc tính nổi bật của bộ
nhận diện, bộ truy xuất thông số, thông số đối chọi.
- Object Detection (objdetect) – phát hiện các đối tượng và mô phỏng của các hàm
được định nghĩa sẵn – predefined classes (vd: khuôn mặt, mắt, cốc, con người, xe
hơi,…).
- High-level GUI (highgui) – giao diện dễ dùng để thực hiện việc giao tiếp UI đơn
giản.
- Video I/O (videoio) – giao diện dễ dùng để thu và mã hóa video.
- GPU – Các thuật toán tăng tốc GPU từ các modun OpenCV khác.
- … và một số module hỗ trợ khác, ví dụ như FLANN và Google test wrapper,
Python binding, v.v.

2.3.2. Tensorflow
TensorFlow chính là thư viện mã nguồn mở cho machine learning nổi tiếng nhất
thế giới, được phát triển bởi các nhà nghiên cứu từ Google. Việc hỗ trợ mạnh mẽ các
phép toán học để tính toán trong machine learning và deep learning đã giúp việc tiếp
cận các bài toán trở nên đơn giản, nhanh chóng và tiện lợi hơn nhiều.
Các hàm được dựng sẵn trong thư viện cho từng bài toán cho phép TensorFlow
xây dựng được nhiều neural network. Nó cịn cho phép bạn tính toán song song trên
nhiều máy tính khác nhau, thậm chí trên nhiều CPU, GPU trong cùng 1 máy hay tạo ra
các dataflow graph – đồ thị luồng dữ liệu để dựng nên các model. Nếu bạn muốn chọn
con đường sự nghiệp trong lĩnh vực A.I. này, nắm rõ những điều cơ bản của TensorFlow
thực sự rất quan trọng.


Được viết bằng C++ và thao tác interface bằng Python nên phần performance của
TensorFlow cực kỳ tốt. Đối tượng sử dụng nó cũng đa dạng khơng kém: từ các nhà
nghiên cứu, nhà khoa học dữ liệu và dĩ nhiên không thể thiếu các lập trình viên.
Kiến trúc của TensorFlow


Hình 2. 6: TensorFlow
Kiến trúc TensorFlow hoạt động được chia thành 3 phần:
- Tiền xử lý dữ liệu.
- Dựng model.
- Train và ước tính model.
Cách TensorFlow hoạt động:
TensorFlow cho phép các lập trình viên tạo ra dataflow graph, cấu trúc mơ tả làm
thế nào dữ liệu có thể di chuyển qua 1 biểu đồ, hay 1 sê-ri các node đang xử lý. Mỗi
node trong đồ thị đại diện 1 operation toán học, và mỗi kết nối hay edge giữa các node
là 1 mảng dữ liệu đa chiều, hay còn được gọi là ‘tensor’.
TensorFlow cung cấp tất cả những điều này cho lập trình viên theo phương thức
của ngơn ngữ Python. Vì Python khá dễ học và làm việc, ngồi ra cịn cung cấp nhiều
cách tiện lợi để ta hiểu được làm thế nào các high-level abstractions có thể kết hợp cùng
nhau. Node và tensor trong TensorFlow là các đối tượng Python, và các ứng dụng
TensorFlow bản thân chúng cũng là các ứng dụng Python.
Các operation toán học thực sự thì khơng được thi hành bằng Python. Các thư viện
biến đổi có sẵn thông qua TensorFlow được viết bằng các binary C++ hiệu suất cao.
Python chỉ điều hướng lưu lượng giữa các phần và cung cấp các high-level abstraction
lập trình để nối chúng lại với nhau.
TensorFlow 2.0, được ra mắt vào tháng 10 năm 2019, cải tiến framework theo
nhiều cách dựa trên phản hồi của người dùng, để dễ dàng và hiệu quả hơn khi làm việc
cùng nó (ví dụ: bằng cách sử dụng các Keras API liên quan đơn giản cho việc train
model).
Train phân tán dễ chạy hơn nhờ vào API mới và sự hỗ trợ cho TensorFlow Lite
cho phép triển khai các mơ hình trên khá nhiều nền tảng khác nhau. Tuy nhiên, nếu đã
viết code trên các phiên bản trước đó của TensorFlow thì bạn phải viết lại, đơi lúc 1 ít,
đơi lúc cũng khá đáng kể, để tận dụng tối đa các tính năng mới của TensorFlow 2.0.
Thư viện Tensorfow là thư viện mã nguồn mở dùng cho tính toán số học sử dụng
đồ thị luồng dữ liệu. Biểu đồ dưới đây cho thấy mức độ phổ biến của thư viện này:



Hình 2. 7: Biểu đồ lượt star và repos trên github sử dụng TF

-

Hình 2. 8: Thống kê nhu cầu tensorflow của các nhà tuyển dụng
Tại sao lại là thư viện Tensorflow?
Vì nó tích hợp sẵn rất nhiều các thư viện machine learning.
Có khả năng tương thích và mở rộng tốt. Được Google phát triển cho machine
learning phục vụ cả nghiên cứu lẫn xây dựng các ứng dụng thực tế.
Phổ biến.

2.3.3. Matplotlib
Để thực hiện các suy luận thống kê cần thiết, cần phải trực quan hóa dữ liệu của
bạn và Matplotlib là một trong những giải pháp như vậy cho người dùng Python.
Nó là một thư viện vẽ đồ thị rất mạnh mẽ hữu ích cho những người làm việc với
Python và NumPy. Module được sử dụng nhiều nhất của Matplotib là Pyplot cung cấp
giao diện như MATLAB nhưng thay vào đó, nó sử dụng Python và nó là nguồn mở.
Một Matplotlib figure có thể được phân loại thành nhiều phần như dưới đây:


-

Figure: Như một cái cửa sổ chứa tất cả những gì bạn sẽ vẽ trên đó.
Axes: Thành phần chính của một figure là các axes (những khung nhỏ hơn để vẽ
hình lên đó). Một figure có thể chứa một hoặc nhiều axes. Nói cách khác, figure
chỉ là khung chứa, chính các axes mới thật sự là nơi các hình vẽ được vẽ lên.
- Axis: Chúng là dòng số giống như các đối tượng và đảm nhiệm việc tạo các giới
hạn biểu đồ.

- Artist: Mọi thứ mà bạn có thể nhìn thấy trên figure là một artist
như Text objects, Line2D objects, collection objects. Hầu hết các Artists được gắn
với Axes.
Matplotlib là một thư viện Python sử dụng Python Script để giúp chúng ta tạo ra
các đồ thị 2D thường được ứng dụng trong toán học và khoa học dữ liệu. Thư viện này
có hỗ trợ tạo nhiều giao điểm giữa hai trục số trong cùng một lúc. Bên cạnh đó, chúng ta
cũng có thể dùng Matplotlib để thao tác trực tiếp đến các đặc điểm khác nhau của đồ
thị.
Có một số bộ cơng cụ có sẵn để mở rộng chức năng của python matplotlib. Một số
trong số chúng là các bản tải xuống riêng biệt, một số khác có thể được vận chuyển
bằng mã nguồn matplotlib nhưng có phụ thuộc bên ngồi.
- Basemap: Nó là một bộ cơng cụ vẽ bản đồ với nhiều phép chiếu bản đồ, đường bờ
biển và ranh giới chính trị.
- Cartopy: Nó là một thư viện ánh xạ bao gồm các định nghĩa phép chiếu bản đồ
hướng đối tượng, và các khả năng biến đổi điểm, đường thẳng, đa giác và hình ảnh
tùy ý.
- Cơng cụ Excel: Matplotlib cung cấp các tiện ích để trao đổi dữ liệu với Microsoft
Excel.
- Mplot3d: Nó được sử dụng cho các ơ 3-D.
- Natgrid: Nó là một giao diện của thư viện natgrid để tạo lưới không đều cho các
dữ liệu cách nhau.
Những khả năng của Matplotlib:
- Matplotlib tạo ra những đồ thị chất lượng và xuất ra dễ dàng, thuận tiện, hoàn toàn
đáp ứng nhu cầu của mọi ngành học. Các đồ thị được tạo ra bằng Matplotlib có
sẵn bản sao cứng trên các nền tảng tương tác khác nhau.
- Có thể dùng Matplotlib với nhiều bộ cơng cụ như Python Scripts, IPython Shells,
Jupyter Notebook, và nhiều công cụ khác.
- Một số thư viện của bên thứ ba có thể được tích hợp với các ứng dụng Matplotlib.
Chẳng hạn như seaborn, ggplot, và các bộ công cụ chiếu xạ, mapping khác
như basemap.

- Theo dõi bất kỳ lỗi nào phát sinh trong quá trình coding, các bản vá mới, đồng thời
cịn có thể đóng góp các tính năng mới tại GitHub.


2.3.4. Pillow
Pillow là một fork từ thư viện PIL của Python được sử dụng để xử lý hình ảnh. So
với PIL thì Pillow được cập nhật thường xuyên và đánh giá cao hơn. (PIL đã không
được cập nhật từ năm 2009).
Nhìn chung, Pillow là một phần của PIL- Python Image Libary. Đầu tiên, Pillow
được xây dựng trên kiến trúc của PIL, nhưng sau đó, nó chuyển đổi thành một thứ thân
thiện và tốt hơn. Pillow là bản nâng cấp của PIL và là một lựa chọn đáng tin cậy nếu
bạn đang có một dự án cần phải làm việc với nhiều hình ảnh hay kể cả những cơng ty
lớn cũng nên dùng đến nó.
Những khả năng của Pilow:
- Khi sử dụng Pillow, bạn khơng chỉ có thể mở và lưu hình ảnh, mà cịn có thể xử lý
đặc điểm của hình ảnh, chẳng hạn như màu sắc, độ mờ, độ sáng, tối, …
- Pillow hỗ trợ xử lý nhiều tệp hình ảnh khác nhau như PDF, WebP, PCX, PNG,
JPEG, GIF, PSD, WebP, PCX, GIF, IM, EPS, ICO, BMP, và còn nhiều hơn thế.
- Có thể dễ dàng tạo ra thumbnails cho hình ảnh, những ảnh thu nhỏ này mang hầu
hết đặc điểm của hình ảnh và gần như khơng khác gì ảnh gốc ngoại trừ chúng
được thu nhỏ lại.
- Hỗ trợ một bộ sưu tập các bộ lọc hình ảnh như – FIND_EDGES, DETAIL,
SMOOTH, BLUR, CONTOUR, SHARPEN, SMOOTH_MORE,…

2.3.5. Scipy
Là phần mềm nguồn mở cho toán học, khoa học và kỹ thuật. Thư viện Scipy được
xây dựng dựa trên thư viện Numpy, cung cấp thao tác mảng N chiều thuận tiện và
nhanh chóng. Scipy gồm các gói con (submodule) cho đại số tuyến tính, tối ưu hóa, tích
hợp và thống kê.
SciPy bao gồm nhiều gói khác nhau để thực hiện một loạt các chức năng. SciPy có

các gói cho các yêu cầu cụ thể. Nó bao gồm hơn 15 gói để thực hiện các hoạt động.
Nó có một gói dành riêng cho các hàm thống kê, đại số tuyến tính, phân cụm dữ
liệu, xử lý hình ảnh và tín hiệu, cho ma trận, để tích hợp và phân biệt.
SciPy trong Python bao gồm một gói scipy.special để làm việc với các phép tính
toán học và vật lý phức tạp. Nó bao gồm một loạt các chức năng cho các tính toán này.
nó có thể giải quyết các bài toán về logarit, hàm mũ, hoán vị và kết hợp, các bài toán về
parabol và hàm mũ. Nó có các chức năng cho gốc khối lập phương, lambert, beta,
gamma, Bessel và hypergeometry.
Tất cả các chức năng này tuân theo các quy định về vịng lặp mảng và phát sóng.
Chúng ta có thể gọi các hàm như sau:
#log sum function
scipy.special.logsumexp(x)
#bessel function
scipy.special.jn()
#cube root function
scipy.special.cbrt(x)
Những khả năng của Scipy:
- Scipy chứa nhiều loại gói phụ giúp giải quyết vấn đề phổ biến nhất liên quan đến
tính toán khoa học.


Scipy là thư viện Khoa học được sử dụng nhiều nhất chỉ sau GNU cho C/C ++
hoặc Matlab.
- Dễ sử dụng và hiểu cũng như sức mạnh tính toán nhanh.
- Nó có thể hoạt động trên mảng (array) của thư viện Numpy.
Tổng quan về các gói con của Scipy:
Việc sử dụng thư viện SciPy yêu cầu (hoặc tùy chọn phụ thuộc vào) một số thư
viện khác để hoạt động, phụ thuộc chính là Python và NumPy. Nó địi hỏi một bộ sưu
tập lớn hơn các thư viện và công cụ để xây dựng thư viện hoặc xây dựng tài liệu. Các
công cụ và thư viện luôn thay đổi. SciPy nhằm mục đích tương thích với một số bản

phát hành của các thư viện và công cụ phụ thuộc. Việc buộc cơ sở người dùng đến các
thành phần khác để nâng cấp cho mỗi bản phát hành sẽ làm giảm đáng kể giá trị của
SciPy.
Tuy nhiên, việc duy trì khả năng tương thích ngược với các cơng cụ / thư viện cũ
đặt ra những hạn chế trong đó các chức năng và khả năng mới hơn có thể được kết hợp.
SciPy có một cách tiếp cận có phần bảo thủ là duy trì khả năng tương thích với một số
bản phát hành chính của Python và NumPy trên các nền tảng chính. Do đó người dùng
cần chú ý sự tương thích giữa phiên bản của các thư viện khác có liên quan với phiên
bản của Scipy. Những thông tin được tổng hợp ở mục Toolchain Roadmap của tài liệu
hướng dẫn Scipy.
-

2.3.6. Scikit-learn
Scikit-learn (Sklearn) là thư viện mạnh mẽ nhất dành cho các thuật toán học máy
được viết trên ngôn ngữ Python. Thư viện cung cấp một tập các công cụ xử lý các bài
toán machine learning và statistical modeling gồm: classification, regression, clustering
và dimensionality reduction.
Thư viện được cấp phép bản quyền chuẩn FreeBSD và chạy được trên nhiều nền
tảng Linux. Scikit-learn được sử dụng như một tài liệu để học tập.
Để cài đặt scikit-learn trước tiên phải cài thư viện SciPy (Scientific Python).
Những thành phần gồm:
- Numpy: Gói thư viện xử lý dãy số và ma trận nhiều chiều
- SciPy: Gói các hàm tính toán logic khoa học
- Matplotlib: Biểu diễn dữ liệu dưới dạng đồ thị 2 chiều, 3 chiều
- IPython: Notebook dùng để tương tác trực quan với Python
- SymPy: Gói thư viện các kí tự toán học
- Pandas: Xử lý, phân tích dữ liệu dưới dạng bảng
Thư viện tập trung vào việc mơ hình hóa dữ liệu. Nó không tập trung vào việc
truyền tải dữ liệu, biến đổi hay tổng hợp dữ liệu. Những công việc này dành cho thư
viện Numpy và Pandas. Những thư viện mở rộng của SciPy thường được đặt tên

dạng SciKits. Như thư viện này là gói các lớp, hàm sử dụng trong thuật toán học máy
thì được đặt tên là scikit-learn.
Scikit-learn hỗ trợ mạnh mẽ trong việc xây dựng các sản phẩm. Nghĩa là thư viện
này tập trung sâu trong việc xây dựng các yếu tố: dễ sử dụng, dễ code, dễ tham khảo, dễ
làm việc, hiệu quả cao.
Scikit-learn hỗ trợ mạnh mẽ trong việc xây dựng các sản phẩm. Nghĩa là thư viện
này tập trung sâu trong việc xây dựng các yếu tố: dễ sử dụng, dễ code, dễ tham khảo, dễ


làm việc, hiệu quả cao. Mặc dù được viết cho Python nhưng thực ra các thư viện nền
tảng của scikit-learn lại được viết dưới các thư viện của C để tăng hiệu suất làm việc. Ví
dụ như: Numpy(Tính toán ma trận), LAPACK, LibSVM và Cython.
Nhóm thuật tốn:
Thư viện tập trung vào việc mơ hình hóa dữ liệu. Nó khơng tập trung vào việc truyền tải
dữ liệu, biến đổi hay tổng hợp dữ liệu. Những công việc này dành cho thư
viện Numpy và Pandas.

Hình 2. 9: Thuật tốn phân cụm Scikit-learn
Hình trên lấy từ một bản demo của thuật toán phân cụm
Sau đâu là một số nhóm thuật toán được xây dựng bởi thư viện scikit-learn:
- Clustering: Nhóm thuật toán Phân cụm dữ liệu khơng gán nhãn. Ví dụ thuật toán
KMeans
- Cross Validation: Kiểm thử chéo, đánh giá độ hiệu quả của thuật toán học giám
sát sử dụng dữ liệu kiểm thử (validation data) trong quá trình huấn luyện mơ hình.
- Datasets: Gồm nhóm các Bộ dữ liệu được tích hợp sẵn trong thư viện. Hầu như
các bộ dữ liệu đều đã được chuẩn hóa và mang lại hiêu suất cao trong quá trình
huấn luyện như iris, digit, ...
- Dimensionality Reduction: Mục đích của thuật toán này là để Giảm số lượng
thuộc tính quan trọng của dữ liệu bằng các phương pháp như tổng hợp, biểu diễn
dữ liệu và lựa chọn đặc trưng. Ví dụ thuật toán PCA (Principal component

analysis).
- Ensemble methods: Các Phương pháp tập hợp sử dụng nhiều thuật toán học tập
để có được hiệu suất dự đoán tốt hơn so với bất kỳ thuật toán học cấu thành nào.
- Feature extraction: Trích xuất đặc trưng. Mục đích là để định nghĩa các thuộc
tình với dữ liệu hình ảnh và dữ liệu ngơn ngữ.
- Feature selection: Trích chọn đặc trưng. Lựa chọn các đặc trưng có ý nghĩa trong
việc huấn luyện mơ hình học giám sát.
- Parameter Tuning: Tinh chỉnh tham số. Các thuật toán phục vụ việc lựa chọn
tham số phù hợp để tối ưu hóa mơ hình.


×