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

ĐỒ ÁN CHUYÊN NGÀNH 2: XÂY DỰNG ỨNG DỤNG ĐIỂM DANH BẰNG NHẬN DIỆN KHUÔN MẶT. Giảng viên hướng dẫn : TS. NGUYỄN ĐỨC HIỂN

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 (1.02 MB, 40 trang )

TRƯỜNG ĐẠ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

ĐỒ ÁN CHUYÊN NGÀNH 2
ĐỀ TÀI: Xây dựng ứng dụng điểm danh bằng
nhận diện khuôn mặt

Sinh viên thực hiện :

LÊ NGỌC HUY
THÁI VĂN LÂM

Lớp :

17IT3

Đà nẵng, tháng 5 năm 2021


TRƯỜNG ĐẠ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

ĐỒ ÁN CHUYÊN NGÀNH 2
Xây dựng ứng dụng điểm danh bằng nhận diện
khuôn mặt

Sinh viên thực hiện :


Giảng viên hướng dẫn :

LÊ NGỌC HUY
THÁI VĂN LÂM
TS. NGUYỄN ĐỨC HIỂN

Lớp :

17IT3

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


MỞ ĐẦU

Việc quản lý thơng qua hình thức chấm vân tay tiềm ẩn nhiều bất cập và
rủi ro, nhất là trong thời điểm hiện nay. Tại sao lại có nhận định như vậy?
Hiện nay, dịch Covid – 19 đang ngày càng diễn biến phức tạp, Bộ Y tế đã đưa
ra khuyến cáo để người dân ý thức hơn trong việc bảo vệ sức khỏe của bản
thân và mọi người xung quanh. Trong đó, việc tiếp xúc nơi cơng cộng sẽ gia
tăng khả năng lây nhiễm cao hơn.
Do đó, việc nhân viên công sở đi làm chấm công bằng vân tay, cư dân
vào các tòa nhà, chung cư ấn thang máy bằng tay sẽ tiềm ẩn về nguy cơ lây
nhiễm virus chéo. Vì vậy, việc sử dụng hệ thống nhận diện khuôn mặt bằng hệ
thống AI trong các ứng dụng quản lý sẽ giúp cho việc quản lý được diễn ra
thuận lợi, nhanh chóng và đảm bảo an về sức khỏe.
Theo đó, mọi cư dân khi đến các tịa nhà chung cư, nhân viên đi làm tại
công ty, doanh nghiệp chỉ cần đưa khn mặt của mình trước thiết bị, và trong
vài giây, thiết bị sẽ thu nhận và xử lý thơng tin nhanh chóng. Đây thực sự là

“giải pháp vàng” không chỉ trong thời điểm dịch Covid – 19 đang bùng phát,
mà nó cịn là sự lựa chọn thơng minh trong thời đại cách mạng 4.0.
Công nghệ nhân diện khuôn mặt hiện là một công nghệ đang được sử
dụng khá phổ biến tại các quốc gia phát triển. Công nghệ này có khả năng xác
định hoặc xác nhận một người từ hình ảnh kỹ thuật số được lấy mẫu trước đó
hoặc từ một khung hình trong một nguồn video khác. Và hiện nay, tại thị
trường Việt Nam, công nghệ này đã dần dần được sử dụng tại một số hệ thống
cửa hàng, khách sạn-resort.

2


LỜI CẢM ƠN
Kính gửi đến thầy hướng dẫn đồ án chuyên ngành 2 là Tiến sĩ Nguyễn Đức Hiển.
Nhóm chúng em bao gồm Lê Ngọc Huy và Thái Văn Lâm, sinh viên 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. Sau 1 kì học được
sự hướng dẫn của thầy, chúng em đã biết và tìm hiểu nhiều hơn về các giao thức và
hồn thiện một sản phẩm. Chúng em đã có thể vận dụng được những kiến thức thầy đã
hướng dẫn để áp dụng vào demo sản phẩm cho môn học đồ án này.Nhóm chúng em
xin chân thành cảm ơn thầy.

3


NHẬN XÉT
(Của giảng viên hướng dẫn)

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

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

4


MỤC LỤC
Trang
Chương 1 Giới thiệu...................................................................................................9

1.1 Tổng quan.................................................................................................9
1.2 Phương pháp.............................................................................................9
1.3 Mục tiêu và nhiệm vụ...............................................................................9
1.4 Đối tượng và phạm vi nghiên cứu..........................................................10
1.5 Ý nghĩa khoa học và thực tiễn của đề tài................................................10

1.6 Cấu trúc đồ án.........................................................................................11
Chương 2 Cơ sở lý thuyết.........................................................................................12

2.1 Khái niệm về xử lý ảnh..........................................................................12
2.2 Bài toán phát hiện khuôn mặt người......................................................12
2.3 Tổng quan các kết quả nghiên cứu.........................................................12
2.4 Giới thiệu về ảnh số và điểm ảnh...........................................................14
2.5 Thu nhận ảnh..........................................................................................17
2.6 Ngơn ngữ lập trình python.....................................................................18
2.7 Thư viện OpenCV..................................................................................19
2.8 Thư viện Pillow......................................................................................20
2.9 Tkinter....................................................................................................24
2.10 Date time..............................................................................................26
strftime() - định dạng thời gian thành một string..............................................26

2.11 Thuật toán Local Binary Patterns Histogram (LBPH) ........................27
Các bước......................................................................................................27
Chương 3 Phân tích thiết kế hệ thống.......................................................................32

3.1 Biểu đồ Use case :..................................................................................32
3.2 Đặc tả Use case.......................................................................................33
Chương 4 Triển khai xây dựng ứng dụng.................................................................36

4.1 Giới thiệu:...............................................................................................36
4.2 Môi trường và cơng cụ sử dụng..............................................................36
4.3 Cấu trúc chương trình:............................................................................36
4.4 Cài đặt và sử dụng chương trình:...........................................................37
Chương 5 Kết luận và hướng phát triển....................................................................38

5.1 Kết luận..................................................................................................38

5.2 Hướng phát triển.....................................................................................38
Tài liệu tham khảo...................................................................................................39

5


DANH MỤC CÁC BẢNG
Trang
Bảng 1 ID.................................................................................................................33
Bảng 2 Nhập tên người dùng....................................................................................33
Bảng 3 Status............................................................................................................33
Bảng 4 Take Images..................................................................................................34
Bảng 5 Train Images.................................................................................................34
Bảng 6 Track Images................................................................................................34
Bảng 7 Attendance....................................................................................................35
Bảng 8 Quit..............................................................................................................35

6


DANH MỤC HÌNH
Trang
Hình 1....................................................................................................................... 14
Hình 2....................................................................................................................... 15
Hình 3....................................................................................................................... 15
Hình 4....................................................................................................................... 16
Hình 5....................................................................................................................... 17
Hình 6....................................................................................................................... 17
Hình 7....................................................................................................................... 26
Hình 8....................................................................................................................... 27

Hình 9....................................................................................................................... 28
Hình 10..................................................................................................................... 28
Hình 11..................................................................................................................... 29
Hình 12..................................................................................................................... 29
Hình 13..................................................................................................................... 30
Hình 14..................................................................................................................... 30
Hình 15..................................................................................................................... 31
Hình 16 Biểu đồ Use case.........................................................................................32
Hình 17 Giao diện của ứng dụng..............................................................................37
Hình 18 Kết quả nhận được......................................................................................37
Hình 19 Thông tin điểm danh được lưu dưới dạng file excel...................................37

7


DANH MỤC CỤM TỪ VIẾT TẮT

STT Cụm từ
1
Công nghệ phần mềm

Viết tắt
CNPM

2

Công nghệ thông tin

CNTT


3

Face Recognition Grand Challenge

FRGC

4

Xử lý ảnh

XLA

5

Local Binary Patterns Histogram

LBPH

8


Chương 1

Giới thiệu

1.1 Tổng quan
Công nghệ nhân diện khuôn mặt hiện là một công nghệ đang được sử dụng
khá phổ biến tại các quốc gia phát triển. Công nghệ này có khả năng xác định
hoặc xác nhận một người từ hình ảnh kỹ thuật số được lấy mẫu trước đó hoặc từ
một khung hình trong một nguồn video khác. Và hiện nay, tại thị trường Việt

Nam, công nghệ này đã dần dần được sử dụng tại một số hệ thống cửa hàng,
khách sạn-resort và sẽ phát triển trong hệ thống giáo dục trong việc điểm danh
học sinh.

1.2 Phương pháp
• Hệ thống sẽ nhận diện khn mặt một cách kín đáo bằng cách chụp ảnh
khuôn mặt của những ai bước vào một khu vực được xác định từ camera
giám sát. Công nghệ này, không cần sự tương tác (của người muốn vào khu
vực) và khơng có sự chậm trễ. Trong nhiều trường hợp đối tượng hồn tồn
khơng hay biết gì về q trình này. Họ khơng cảm thấy “bị giám sát” hoặc
rằng sự riêng tư của họ bị xâm phạm.
• Phần mềm nhận dạng khuôn mặt sử dụng để phát hiện, nhận dạng khuôn mặt,
đối chiếu so sánh, đưa ra các cảnh báo khi phát hiện sự trùng khớp giữa
khuôn mặt phát hiện được với khn mặt mẫu có sẵn trong cơ sở dữ liệu đăng
ký trước. Tồn bộ q trình phát hiện, nhận dạng và đối chiếu được tiến hành
hoàn tồn tự động, khơng cần có sự can thiệp của con người.

1.3 Mục tiêu và nhiệm vụ
• Mục tiêu
Trong luận văn này chúng tơi sẽ đưa ra cái nhìn tổng quan các phương
pháp cho các hệ thống giải quyết các vấn đề về nhận diện khuôn mặt trong
điểm danh các em học sinh cũng như ứng dụng vào quản lí an ninh tại các
tòa nhà chung cư , bệnh viện , …
Một mục tiêu khác của đề tài sẽ là góp phần nghiên cứu và xây dựng
một ứng dụng có khả năng ứng dụng vào thực tế tại Việt Nam nhằm ứng
dụng công nghệ vào trong đời sống trong thời đại cuộc cách mạng cơng
nghiệp 4.0 hiện nay.

• Nhiệm vụ
Để thực hiện được mục tiêu trên, đề tài này sẽ nghiên cứu về phương pháp

nhận dạng khuôn mặt người; các phương pháp, thuật tốn nhận dạng được
phát triển bằng ngơn ngữ lập trình Python tích hợp trên nền tảng thư viện mã
nguồn mở OpenCV .
9


 Về lý thuyết
 Tìm hiểu các phương pháp tổng quát cho hệ thống giải
quyết các vấn đề về thời gian , mã ID, tên người tại thời
điểm người dùng điểm danh .
 Tìm hiểu về các phương pháp nhận diện khuôn mặt người
được hổ trợ trên nền tảng thư viện mã nguồn mở OpenCV.
 Tìm hiểu về các thuật tốn xử lý ảnh Pillow.
 Tìm hiểu những thuật tốn khác như LBPH,Tkinter GUI,
Date Time.

 Về thực tiễn
 Nghiên cứu và xây dựng một chương trình demo có thể
nhận dạng con người và hiển thị thơng tin của người đó từ
một đoạn video đầu vào hoặc từ camera trực tiếp.

1.4 Đối tượng và phạm vi nghiên cứu
• Đối tượng nghiên cứu
 Ngơn ngữ lập trình Python
 Thư viện mã nguồn mở OpenCV
 Giải thuật xử lý ảnh Pillow
 Các thuật toán LBPH, Tkinter GUI và Date time để xác định thời gian
nhận diện người dùng .

• Phạm vi nghiên cứu

 Nghiên cứu về các phương pháp và các ứng dụng nhận diện khuôn mặt
trên thế giới theo những bài báo và nghiên cứu khoa học và các ứng dụng
đang được sử dụng trong thực tế.
 Chương trình demo sử dụng ngôn ngữ lập Python, thư viện mã nguồn mở
OpenCV trên nền tảng hệ điều hành Windows, Ubuntu, MacOS...

1.5 Ý nghĩa khoa học và thực tiễn của đề tài
• Mục đích
Nghiên cứu cách xây dựng một chương trình mơ phỏng ứng dụng cho
các hệ thống giải quyết các vấn đề về điểm danh thông thường, tiết kiệm
được thời gian của học sinh và giáo viên trong một buổi học, thuận tiện hơn
10


và không ảnh hưởng lớn đến người dùng ( học sinh, giáo viên), giúp nhà
trường và giáo viên có thể tổng hợp lại số lượng học sinh có mặt trong 1 buổi
học một cách nhanh chóng và dễ dàng hơn. Bên cạnh đó góp phần nâng cao
chất lượng dạy học của nhà trường, hạn chế những sai sót và các vấn đề tiêu
cực như điểm danh hộ.

• Ý nghĩa khoa học và thực tiễn
 Về khoa học
Tìm hiểu những bài báo và những nghiên cứu khoa học liên
quan đã được công bố trên thế giới, đề xuất một giải pháp cho việc
giải quyết các vấn đề về trong việc điểm danh và mang tính chính xác,
nhanh, hiệu quả cao.

 Về thực tiễn
 Giúp người lập trình có cái nhìn tổng quát các phương pháp có
thể ứng dụng cho hệ thống giải quyết các vấn đề về bất cập của

những ứng dụng điểm danh trước đó.

 Góp phần nâng cao nền giáo dục , phát triển và ứng dụng công
nghệ nhằm tạo ra những ứng dụng đáp ứng được nhu cầu cấp
thiết của chúng ta ngày nay.

1.6 Cấu trúc đồ án
• Chương 1: Giới thiệu
 Tổng quan
 Phương pháp
 Mục tiêu và nhiệm vụ
 Đối tượng và phạm vi nghiên cứu
 Ý nghĩa khoa học và thực tiễn
• Chương 2 : Cơ sở lý thuyết
• Chương 3: Phân tích thiết kế hệ thống
 Biểu đồ Use case
 Đặc tả Use case
• Chương 4: Triển khai xây dựng ứng dụng
 Giới thiệu
 Cấu trúc chương trình
 Cài đặt và xây dựng chương trình
 Đánh giá
11


• Chương 5: Kết luận và hướng phát triển
 Kết luận
 Hướng phát triển

Chương 2


Cơ sở lý thuyết

2.1 Khái niệm về xử lý ảnh
Xử lý ảnh là một phân ngành trong xử lý số tín hiệu với tín hiệu xử lý là ảnh.
Đây là một phân ngành khoa học mới rất phát triển trong những năm gần đây. Xử lý
ảnh gồm 4 lĩnh vực chính: xử lý nâng cao chất lượng ảnh, nhận dạng ảnh, nén ảnh
và truy vấn ảnh. Đó là một dạng phân bố tín hiệu mà đầu vào là một hình ảnh như
các bức ảnh hoặc các khung hình từ video và đầu ra là một hình ảnh khác hoặc các
đặc tính gắn liền nó. Thơng thường, các hệ thống xử lý ảnh sẽ xem các hình ảnh như
các tín hiệu hai chiều để từ đó áp dụng các phương pháp xử lý tín hiệu lên các tín
hiệu đó. Sự phát triển của xử lý ảnh đem lại rất nhiều lợi ích cho cuộc sống của con
người.
Ngày nay xử lý ảnh đã được áp dụng rất rộng rãi trong đời sống như:
photoshop, nén ảnh, nén video, nhận dạng biển số xe, nhận dạng khuôn mặt, nhận
dạng chữ viết, xử lý ảnh thiên văn, ảnh y tế,....

2.2 Bài tốn phát hiện khn mặt người
Các phương pháp chính phát hiện mặt người
Dựa vào tính chất của các phương pháp xác định mặt người trên ảnh, các
phương pháp này được chia thành bốn loại chính, tương ứng với bốn hướng tiếp cận
khác nhau. Ngồi ra cũng có rất nhiều nghiên cứu mà phương pháp xác định mặt
người không chỉ dựa vào một hướng mà có liên quan đến nhiều hướng.
-

Hướng tiếp cận dựa trên tri thức.

-

Hướng tiếp cận dựa trên đặc trưng không thay đổi.


-

Hướng tiếp cận dựa trên so sánh khớp mẫu.

-

Hướng tiếp cận dựa trên diện mạo.

2.3 Tổng quan các kết quả nghiên cứu
Những người tiên phong trong tự động nhận dạng khuôn mặt bao gồm Woody
Bledsoe, Helen Chan Wolf, và Charles Bisson.
12


Trong năm 1964 và 1965, Bledsoe, cùng với Helen Chan và Charles Bisson, bắt đầu
ý tưởng sử dụng máy tính để nhận ra khuôn mặt của con người .Với một cơ sở dữ
liệu lớn các hình ảnh (thực tế là một cuốn sách ảnh thẻ) và một bức ảnh, vấn đề là
phải lựa chọn từ cơ sở dữ liệu là một tập hợp nhỏ các hồ sơ hình ảnh như vậy có
chứa các hình ảnh ăn khớp với bức ảnh đưa ra. Sự thành cơng của phương pháp này
có thể được đo bằng tỷ lệ danh sách câu trả lời trên số lượng các hồ sơ trong cơ sở
dữ liệu. Sau đó Bledsoe rời PRI vào năm 1966. Trong các thí nghiệm thực hiện trên
một cơ sở dữ liệu hơn 2.000 bức ảnh, máy tính ln vượt trội so với con người khi
thể hiện cùng một nhiệm vụ nhận dạng
Đến khoảng năm 1997, hệ thống được phát triển bởi Christoph von der Malsburg và
các sinh viên sau đại học của trường Đại học Bochum ở Đức và Đại học Nam
California tại Mỹ đã thể hiện vượt trội so với hầu hết các hệ thống của Viện Công
nghệ Massachusetts và Đại học Maryland xếp hạng theo sau.. Phần mềm này được
bán với cái tên ZN-Face và sử dụng bởi các khách hàng như Deutsche Bank và các
nhà điều hành sân bay và các địa điểm đông đúc khác. Phần mềm này "đủ mạnh mẽ

để nhận dạng được gương mặt từ các góc nhìn ít lý tưởng hơn. Nó cũng thường
xun có thể nhận dạng được gương mặt mặc dù có những trở ngại như ria mép, râu,
thay đổi kiểu tóc và thậm chí đeo kính râm"
Trong khoảng tháng 1 năm 2007, tìm kiếm hình ảnh đã là "dựa trên ký tự xung
quanh bức ảnh", ví dụ, đoạn văn kế bên đề cập đến các nội dung hình ảnh. Cơng
nghệ Polar Rose có thể đốn từ một bức ảnh, trong khoảng 1,5 giây, bất kỳ người
nào sẽ trông như thế nào trong không gian ba chiều, và khẳng định rằng họ "sẽ yêu
cầu người dùng nhập tên của những người mà họ nhận ra trong ảnh online" để giúp
xây dựng một cơ sở dữ liệu Identix, một công ty từ Minnesota, đã phát triển một
phần mềm là FaceIt. FaceIt có thể nhận ra khn mặt của một ai đó trong đám đơng
và so sánh nó với cơ sở dữ liệu trên tồn thế giới để nhận dạng và đặt tên cho một
khuôn mặt. Phần mềm được viết để phát hiện nhiều đặc điểm trên khn mặt người.
Nó có thể phát hiện khoảng cách giữa hai mắt, chiều rộng của mũi, hình dạng của
xương gò má, độ dài của đường viền của hàm dưới và nhiều đặc điểm khác trên
khn mặt. Nó thực hiện điều này bằng cách đưa hình ảnh của khn mặt vào một
faceprint, một mã số đại diện cho gương mặt của con người. Phần mềm nhận dạng
khuôn mặt trước kia thường phải dựa trên một hình ảnh 2D với người cần nhận dạng
13


gần như phải trực tiếp đối mặt với máy ảnh. Bây giờ, với FaceIt, một hình ảnh 3D có
thể được so sánh với một hình ảnh 2D bằng cách chọn 3 điểm cụ thể trên tấm hình
3D và chuyển đổi nó thành một hình ảnh 2D sử dụng một thuật tốn đặc biệt có thể
được qt qua hầu như tất cả các cơ sở dữ liệu.  
Năm 2006, các thuật tốn nhận dạng khn mặt mới nhất đã được đánh giá
trong Face Recognition Grand Challenge (FRGC). Hình ảnh gương mặt, hình ảnh
scan gương mặt 3D và ảnh iris độ phân giải cao, được sử dụng trong các bài kiểm
tra. Kết quả cho thấy rằng các thuật tốn mới là chính xác hơn 10 lần so với các
thuật toán nhận dạng khn mặt của năm 2002 và chính xác hơn 100 lần so với các
thuật toán của năm 1995. Một số thuật tốn đã có thể nhận dạng tốt hơn người tham

gia trong việc nhận diện khuôn mặt và duy nhất có thể xác định từng người trong các
cặp song sinh giống hệt nhau.
Hình ảnh độ phân giải thấp của khn mặt có thể được tăng cường bằng cách sử
dụng khn mặt ảo giác. Các cải tiến cao hơn trong hình có độ phân giải cao, máy
ảnh megapixel trong vài năm gần đây đã giúp giải quyết vấn đề thiếu độ phân giải.

2.4 Giới thiệu về ảnh số và điểm ảnh
Điểm ảnh ( pixel) có vị trí (x,y) và có độ xám I (x,y)


Ví dụ với ảnh trắng đen

Hình 1

14




Với ảnh màu ảnh ta hay nhìn thì mỗi điểm ảnh sẽ có 3 giá trị tương
ứng với độ sáng của các màu đỏ, xanh lục, xanh dương (RGB)

Hình 2

• Các khái niệm:
 Ảnh số: " một hình ảnh có thể được định nghĩa là hàm hai chiều, f (x, y),
trong đó x và y là tọa độ khơng gian (mặt phẳng) và biên độ của f tại bất
kỳ cặp tọa độ (x, y) nào được gọi là cường độ hoặc mức độ màu xám của
hình ảnh tại điểm đó. Khi x, y và các giá trị cường độ của f đều là các đại
lượng hữu hạn, rời rạc, chúng ta gọi hình ảnh là hình ảnh kỹ thuật số".

 Hay có thể hiếu 1 cách đơn giản rằng "Ảnh số là số hóa làm cho một hình
ảnh kỹ thuật số trở thành một xấp xỉ của một cảnh thực".

Hình 3

15


 Điểm ảnh: "hình ảnh kỹ thuật số chứa một số lượng hữu hạn các hàng và
cột của các phần tử. Mỗi phần tử được gọi là pixel "
 Độ phân giải: "độ phân giải là thước đo của chi tiết rõ ràng nhỏ nhất trong
ảnh, được tính là số điểm (pixel) trên một đơn vị khoảng cách (DPI).
o

Hình 4

 Như ảnh trên chúng ta thấy rằng tuy cùng kích thước nhưng độ phân giải
khác nhau, và độ phân giải càng thấp thì càng mờ. Như ảnh 1 sẽ được hiểu
là chiểu rộng có 175 điểm ảnh và chiều cao có 256 điểm ảnh.
 Các định dạng phổ biển của ảnh số bao gồm:
 1 giá trị trên điểm/pixel ( B&W hay Grayscale)
 3 giá trị trên điểm/pixel (Red, Green, Blue)

16


 4 giá trị trị trên điểm/pixel ( Red, Green, Blue, + “Alpha” or Opacity)

Hình 5


2.5 Thu nhận ảnh
Các bước thu nhận ảnh được tổng quát như hình sau:

Hình 6

17


Ngồi ra, ảnh có thẻ được tạo ra từ việc thu nhận và biểu diễn lại các sóng khác
(ngồi ánh sáng). Ví dụ:


Siêu âm (ultrasound)



Tia X
Tia gamma
Sonar
Sóng radio





2.6 Ngơn ngữ lập trình python
• Khái niệm về python: Python là ngơn ngữ lập trình hướng đối tượng, cấp cao,
mạnh mẽ, được tạo ra bởi Guido van Rossum. Nó dễ dàng để tìm hiểu và
đang nổi lên như một trong những ngơn ngữ lập trình nhập mơn tốt nhất cho
người lần đầu tiếp xúc với ngơn ngữ lập trình. Python hồn tồn tạo kiểu

động và sử dụng cơ chế cấp phát bộ nhớ tự động. Python có cấu trúc dữ
liệu cấp cao mạnh mẽ và cách tiếp cận đơn giản nhưng hiệu quả đối với lập
trình hướng đối tượng. Cú pháp lệnh của Python là điểm cộng vơ cùng lớn vì
sự rõ ràng, dễ hiểu và cách gõ linh động làm cho nó nhanh chóng trở thành
một ngơn ngữ lý tưởng để viết script và phát triển ứng dụng trong nhiều lĩnh
vực, ở hầu hết các nền tảng.
• Các 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.

18


 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.7 Thư viện OpenCV
• Trong lĩnh vực Trí tuệ nhân tạo, Thị giác máy tính là một trong những nhiệm
vụ thú vị và đầy thử thách. Thị giác Máy tính đóng vai trị như một cầu nối
giữa Phần mềm Máy tính và các hình ảnh trực quan xung quanh chúng ta. Nó
cho phép phần mềm máy tính hiểu và học về những hình dung trong mơi
trường xung quanh. Ví dụ: Dựa vào màu sắc, hình dạng và kích thước xác
định quả. Nhiệm vụ này có thể rất dễ dàng đối với bộ não con người tuy
nhiên trong hệ thống Computer Vision, đầu tiên chúng tôi thu thập dữ liệu,
sau đó chúng tơi thực hiện các hoạt động xử lý dữ liệu và sau đó chúng tơi
đào tạo và dạy người mẫu hiểu cách phân biệt giữa các loại trái cây dựa trên
kích thước, hình dạng và màu sắc của quả.
• Hiện tại, có nhiều gói khác nhau để thực hiện các tác vụ học máy, học sâu và
thị giác máy tính. Cho đến nay, thị giác máy tính là mô-đun tốt nhất cho các

19


hoạt động phức tạp như vậy. OpenCV là một thư viện mã nguồn mở. Nó được
hỗ trợ bởi nhiều ngơn ngữ lập trình khác nhau như R, Python. Nó chạy trên
hầu hết các nền tảng như Windows, Linux và MacOS.
• Ưu điểm của OpenCV:





2.8

OpenCV là một thư viện mã nguồn mở và miễn phí.
So với các thư viện khác, nó rất nhanh vì nó được viết bằng C / C ++.
Nó hoạt động tốt hơn trên Hệ thống có RAM ít hơn
Hỗ trợ hầu hết các Hệ điều hành như Windows, Linux và MacOS.

Thư viện Pillow
• Định nghĩa: 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).

• Sử dụng class image
 Import thư viện PIL
>>> from PIL import Image
 Mở và load ảnh trong thư mục hiện tại của bạn vào.
>>> img = Image.open("the_catch.jpg")
 Bạn đã có 1 Instance của class Image. Bạn có thể xem các thơng tin về

ảnh bằng cách truy cập thuộc tính của nó.
>>> print(f"format: {img.format}, size: {img.size}, mode: {img.mode},
name: {img.filename}")
format: JPEG, size: (1000, 800), mode: RGB, name: the_catch.jpg
 Để truy cập toàn bộ các thuộc tính của img, bạn có thể gõ.

20


>>> dir(img)
['_Image__transformer', '__array_interface__', '__class__', '__copy__',
'__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__',
'__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__',
'__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',
'__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__',
'__setattr__',
'__setstate__',
'__sizeof__',
'__str__',
'__subclasshook__', '__weakref__', '_close_exclusive_fp_after_loading',
'_copy', '_crop', '_dump', '_ensure_mutable', '_exclusive_fp', '_exif',
'_expand', '_get_safe_box', '_getexif', '_getmp', '_min_frame', '_new',
'_open', '_repr_png_', '_seek_check', '_size', 'alpha_composite', 'app',
'applist',
'bits',
'category',
'close',
'convert',
'copy',

'crop',
'custom_mimetype',
'decoderconfig',
'decodermaxblock',
'draft',
'effect_spread', 'entropy', 'filename', 'filter', 'format', 'format_description',
'fp', 'frombytes', 'fromstring', 'get_format_mimetype', 'getbands', 'getbbox',
'getchannel', 'getcolors', 'getdata', 'getexif', 'getextrema', 'getim',
'getpalette', 'getpixel', 'getprojection', 'height', 'histogram', 'huffman_ac',
'huffman_dc', 'icclist', 'im', 'info', 'layer', 'layers', 'load', 'load_djpeg',
'load_end', 'load_prepare', 'load_read', 'mode', 'offset', 'palette', 'paste',
'point', 'putalpha', 'putdata', 'putpalette', 'putpixel', 'pyaccess',
'quantization', 'quantize', 'readonly', 'reduce', 'remap_palette', 'resize',
'rotate', 'save', 'seek', 'show', 'size', 'split', 'tell', 'thumbnail', 'tile', 'tobitmap',
'tobytes', 'toqimage', 'toqpixmap', 'tostring', 'transform', 'transpose', 'verify',
'width']
 Nếu bạn muốn hiển thị ảnh của mình, có thể sử dụng show
>>> img.show()
 Pillow sẽ lưu ảnh của bạn sang một file tạm thời và dùng một phần mềm
khác để hiển thị ảnh của bạn.

• Đọc và ghi ảnh






Như đã thấy ở phần trên, bạn không cần phải truyền vào dạng ảnh vì
Pillow tự biết phân biệt các loại ảnh khác nhau. Muốn đọc ảnh bạn chỉ cần

gọi hàm open của class Image.
Nếu đuôi (extension) của file ảnh của bạn là một trong những đi thơng
dụng, thì khơng cần phải cụ thể hóa đi file, Pillow sẽ lưu file ảnh mới
theo đuôi của ảnh cũ.
Nếu bạn muốn đổi đuôi file ảnh, có thể dùng hàm save và truyền vào nó
tên file kèm theo đuôi mà bạn muốn.
21


>>> try:
...

new_img_name = "the_catch.png"

...

img.save(new_img_name)

... except IOerror:
...

print("Cannot convert file")

...
>>> new_img = Image.open("the_catch.png")
>>> new_img
0x7F667EA69080>



image

mode=RGB

size=1000x800

Bạn có thể tạo thumbnail bằng cách gọi hàm thumbnail

>>> size = (256, 256)
>>> try:
...

new_thumbnail = "the_catch_thumbnail.png"

...

with Image.open("the_catch.png") as im:

...

im.thumbnail(size)

...

im.save(new_thumbnail, "PNG")

... except IOError:
...

print("Cannot create thumbnail")


...
>>>

 Vậy là bạn đã tạo được 1 file thumbnail kích cỡ 256x256

• Cắt dán và nhập ảnh
 Bạn có thể cắt một khu trong ảnh với hàm crop.
22

at


 Cách làm là bạn truyền vào 1 tuple gồm 4 tọa độ. Vị trí các toạ độ lần lượt
là (trái, trên, phải, dưới ).
 Lưu ý là Pillow dùng hệ tọa độ (0, 0) từ góc trên bên trái, và các tọa độ
này chỉ đến vị trí giữa các pixel.
>>> box = (120, 120, 360, 360)
>>> region = im.crop(box)
>>> region
<PIL.Image.Image image mode=RGB size=240x240 at 0x7F667ED108D0>
 Phần được cắt ra đã được lưu trong biến region, bạn có thể xử lý và dán nó
lại.
>>> region = region.transpose(Image.ROTATE_180)
>>> region.show()
>>> img.paste(region, box)
>>> img.show()

• Biến đổi hình học
 Bạn có thể resize lại ảnh với hàm resize

>>> resized_img = img.resize((128, 128))
>>> resized_img.show()
 Hoặc xoay ảnh với hàm rotate. *Lưu ý là Pillow xẽ xoay ảnh theo chiều
ngược kim đồng hồ.
>>> rotated_img = img.rotate(90)
>>> rotated_img.show()

• Biến đổi màu
 Bạn có thể biến đổi màu với hàm convert

23


 Pillow có thể chuyển giữa 2 chế độ màu thơng dụng là đen trắng (L) và có
màu (RGB). Nếu muốn chuyển sang chế độ màu khác bạn sẽ phải dùng 1
hình ảnh trung gian (thường là ảnh RGB).
>>> converted_img = img.convert("L")
>>> converted_img.show()

 Với các ảnh RGB, ảnh được phân thành các tầng màu (band). Bạn có thể
tách các tầng màu này ra, chỉnh sửa và sắp xếp lại chúng rồi nhập lại vào
hình ảnh.

>>> r, g, b = img.split()
>>> changed_img = Image.merge("RGB", (r, b, g))
>>> changed_img.show()

2.9 Tkinter
• Tkinter là một gói trong Python có chứa module Tk hỗ trợ cho việc lập trình
GUI. Tk ban đầu được viết cho ngơn ngữ Tcl. Sau đó Tkinter được viết ra để

sử dụng Tk bằng trình thơng dịch Tcl trên nền Python. Ngồi Tkinter ra cịn
có một số cơng cụ khác giúp tạo một ứng dụng GUI viết bằng Python như
wxPython, PyQt, và PyGTK.
• Ví dụ:

 Đoạn code dưới đây ví dụ về cách tạo một cửa sổ bằng Tkinter.

simple.py
1
from tkinter import Tk, Frame, BOTH
2
3
class Example(Frame):
4
def __init__(self, parent):
5
Frame.__init__(self, parent, background="white")
6
self.parent = parent
7
self.initUI()
8
9
def initUI(self):
10
self.parent.title("Simple")
24



×