ĐỒ ÁN TỐT NGHIỆP
NHẬN DIỆN TRẠNG THÁI MẮT SỬ
DỤNG NGÔN NGỮ PYTHON
1
MỤC LỤC
DANH MỤC CÁC HÌNH VẼ............................................................................................IV
DANH MỤC CÁC BẢNG BIỂU.......................................................................................VI
DANH MỤC CÁC TỪ VIẾT TẮT..................................................................................VII
MỞ ĐẦU
VIII
CHƯƠNG 1. CƠ SỞ DỮ LIỆU...........................................................................................1
1.1
KHÁI QUÁT VỀ NHẬN DIỆN KHUÔN MẶT VÀ MẮT NGƯỜI...........................................1
1.2
CÁC THUẬT TOÁN MÔ TẢ ĐIỂM ĐẶC BIỆT..................................................................1
1.2.1
Harris corner......................................................................................................1
1.2.2
Scale-Invariant Feature Transform....................................................................4
1.2.3
Histograms of Oriented Gradients.....................................................................4
1.2.4
Speeded Up Robust Features..............................................................................6
1.2.5
Thuật toán Haar-like feature..............................................................................7
CHƯƠNG 2. GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH PYTHON..............................11
2.1
GIỚI THIỆU PYTHON.................................................................................................11
2.2
LỊCH SỬ PHÁT TRIỂN CỦA PYTHON..........................................................................11
2.3
ĐẶC ĐIỂM CỦA NGÔN NGỮ PYTHON........................................................................12
2.3.1
Dễ học, dễ đọc..................................................................................................12
2.3.2
Khối lệnh...........................................................................................................12
2.3.3
Đa năng.............................................................................................................12
2.3.4
Multiple paradigms...........................................................................................12
2.3.5
Trình thông dịch................................................................................................13
2.4
XẾP HẠNG NGÔN NGỮ..............................................................................................13
2.5
ỨNG DỤNG CỦA NGÔN NGỮ PYTHON.......................................................................14
CHƯƠNG 3. DỮ LIỆU HUẤN LUYỆN..........................................................................15
3.1
BỘ PHÂN LOẠI ADABOOST.......................................................................................15
2
3.2
CASCADE OF CLASSIFIERS........................................................................................15
3.3
TIẾN HÀNH HUẤN LUYỆN.........................................................................................16
CHƯƠNG 4. HỆ THỐNG NHẬN DIỆN TRẠNG THÁI MẮT...................................23
4.1
XÂY DỰNG HỆ THỐNG..............................................................................................23
4.2
XÂY DỰNG CHƯƠNG TRÌNH......................................................................................23
4.2.1
Xử lý đầu video vào...........................................................................................25
4.2.2
Phát hiện khuôn mặt........................................................................................25
4.2.3
Nhận dạng đôi mắt............................................................................................26
4.2.4
Ghi nhận trạng thái của mắt.............................................................................26
CHƯƠNG 5. KẾT QUẢ MÔ PHỎNG.............................................................................27
5.1
MÔI TRƯỜNG TRIỂN KHAI.........................................................................................27
5.2
KẾT QUẢ MÔ PHỎNG.................................................................................................27
CHƯƠNG 6. NHẬN XÉT..................................................................................................29
6.1
NHẬN XÉT................................................................................................................29
6.2
HƯỚNG PHÁT TRIỂN.................................................................................................29
TÀI LIỆU THAM KHẢO..................................................................................................30
PHỤ LỤC
31
3
DANH MỤC CÁC HÌNH VẼ
HÌNH 1-1: ĐÁP ỨNG GÓC [12].........................................................................................3
HÌNH 1-2: CHIA KHỐI TRÍCH ĐẶC TRƯNG HOG [5]............................................5
HÌNH 1-3: ĐẶC TRƯNG HAAR-LIKE [6]......................................................................7
HÌNH 1-4: ĐẶC TRƯNG CẠNH [7]..................................................................................8
HÌNH 1-5: ĐẶC TRƯNG ĐƯỜNG [8]...............................................................................8
HÌNH 1-6: ĐẶC TRƯNG XUNG QUANH TÂM [9].......................................................8
HÌNH 1-7: ẢNH I(X, Y) [10]................................................................................................8
HÌNH 1-8 : VÍ DỤ TÍNH ĐẶC TRƯNG HAAR-LIKE [11]...........................................9
HÌNH 2-1 : BIỂU TƯỢNG CỦA NGÔN NGỮ LẬP TRÌNH PYTHON [1]...............11
HÌNH 2-2: BẢNG XẾP HẠNG NGÔN NGỮ LẬP TRÌNH PHỔ BIẾN [2]...............13
HÌNH 2-3: THỐNG KÊ NGÔN NGỮ GIẢNG DẠY [3]...............................................14
HÌNH 3-1: MỘT SỐ HÌNH ẢNH POSITIVE IMAGES...............................................16
HÌNH 3-2: MỘT SỐ HÌNH ẢNH NEGATIVE IMAGES.............................................17
HÌNH 3-3: QUÁ TRÌNH TẠO DỮ LIỆU HO NEGATIVE IMAGES........................17
HÌNH 3-4: DỮ LIỆU FILE BG.TXT................................................................................18
HÌNH 3-5: QUÁ TRÌNH TẠO DỮ LIỆU CHO POSITIVE IMAGES.......................18
HÌNH 3-6: DỮ LIỆU FILE INFO.DAT...........................................................................19
HÌNH 3-7: QUÁ TRÌNH THU THẬP MẪU SO SÁNH................................................19
HÌNH 3-8: CÁC MẪU ĐÃ ĐƯỢC TẠO XONG.............................................................20
HÌNH 3-9: QUÁ TRÌNH HUẤN LUYỆN........................................................................20
HÌNH 3-10: LỚP ĐẦU TIÊN ĐƯỢC HUẤN LUYỆN XONG.....................................21
HÌNH 3-11: PHÂN LỚP THỨ 9 ĐƯỢC HUẤN LUYỆN XONG................................22
HÌNH 3-12: FILE ĐANG ĐƯỢC CHUYỂN...................................................................22
HÌNH 4-1: MÔ HÌNH CỦA HỆ THỐNG NHẬN DIỆN TRẠNG THÁI MẮT.........23
4
HÌNH 4-2: SƠ ĐỒ GIẢI THUẬT.....................................................................................24
HÌNH 4-3: CHUYỂN HÌNH ẢNH ĐẦU VÀO THÀNH ẢNH XÁM...........................25
HÌNH 4-1: TRẠNG THÁI MỞ MẮT...............................................................................27
HÌNH 4-2: TRẠNG THÁI NHẮM MẮT.........................................................................28
HÌNH 4-3: TRẠNG THÁI CHỚP MẮT..........................................................................28
5
DANH MỤC CÁC BẢNG BIỂU
BẢNG 1 : SO SÁNH CÁC THUẬT TOÁN MÔ TẢ ĐIỂM ĐẶC BIỆT.....................10
6
DANH MỤC CÁC TỪ VIẾT TẮT
COM
Communication
Dog
Deffirence of Gaussisan
HOG
Histograms of Oriented Gradients
SURF
Speeded Up Robust Features
SIFT
Scale-Invariant Feature Transform
7
MỞ ĐẦU
Trong những năm gần đây các hệ thống nhận dạng ngày càng phát triển. Một trong
những ứng dụng rất thực tế đó là nhận dạng trạng thái của mắt có thể được áp dụng
để để kiểm tra tài xế ngủ gật và đưa ra cảnh báo. Theo dõi chuyển động của mắt để
điều khiển các thiết bị công nghệ, xe lăn cho người tàn tật.
Ngủ gật là một trong những nguyên nhân dẫn đến các vụ tai nạn giao thông. Báo
cáo về "Rối loạn giấc ngủ và tai nạn giao thông" tại hội nghị khoa học thường niên
Hội Hô hấp Việt Nam và Chương trình đào tạo y khoa liên tục 2015, giáo sư Telfilo
Lee Chiong (Trung tâm Nationnal Jewish Health, Mỹ) cho biết thiếu ngủ là một
trong những nguyên nhân chính gây tai nạn giao thông trên thế giới. Ước tính
khoảng 10-15% tai nạn xe có liên quan đến thiếu ngủ. Nghiên cứu về giấc ngủ ở các
tài xế 19 quốc gia châu Âu cho thấy tỷ lệ buồn ngủ khi lái xe cao, trung bình 17%.
Trong đó 10,8% người buồn ngủ khi lái xe ít nhất một lần trong tháng, 7% từng gây
tai nạn giao thông do buồn ngủ, 18% suýt xảy ra tai nạn do buồn ngủ [4]. Do đó,
cảnh báo tài xế khi có hiện tượng buồn ngủ là một vấn đề thiết thực góp phần làm
giảm tỷ lệ tai nạn giao thông đang ngày càng gia tăng hiện nay.
Từ những vấn đề nêu trên tôi chọn đề tài “nhận diện trạng thái mắt” dùng ngôn ngữ
Python mô phỏng, thực hiện nhận dạng trạng thái của mắt bằng bộ phân loại
AdaBoost rút trích đặc trưng Haar like nhận hình ảnh thu được từ camera.
Nội dung đề tài được chia thành 6 chương:
Chương 1: Cơ sở dữ liệu.
Chương 2: Giới thiệu ngôn ngữ Python.
Chương 3: Dữ liệu huấn luyện.
Chương 4: Hệ thống nhận diện trạng thái mắt.
Chương 5: Kết quả mô phỏng.
Chương 6: Nhận xét
8
Trang 1/34
CHƯƠNG 1.
CƠ SỞ DỮ LIỆU
1.1 Khái quát về nhận diện khuôn mặt và mắt người
Phát hiện khuôn mặt là một kỹ thuật máy tính để xác định vị trí của mặt người trong
ảnh. Việc phát hiện mắt thực hiện trên khuôn mặt đã được phát hiện đó. Có bốn
hướng tiếp cận để phát hiện khuôn mặt và mắt người:
- Hướng tiếp cận dựa trên tri thức: dựa vào các thuật toán, mã hoá các đặc trưng và
quan hệ giữa các đặc trưng của khuôn mặt và mắt thành các luật.
- Hướng tiếp cận dựa trên đặc trưng không thay đổi: xây dựng thuật toán để tìm ra
các đặc trưng của khuôn mặt và mắt, các đặc trưng này không thay đổi khi tư thế
khuôn mặt hay vị trí camera thay đổi.
- Hướng tiếp cận dựa trên so sánh khớp mẫu: dùng các mẫu chuẩn của khuôn mặt
và mắt để mô tả. Mẫu này được sử dụng để phát hiện khuôn mặt và mắt bằng cách
quét nó qua ảnh và tính toánh giá trị tương đồng cho mỗi vị trí. Việc xuất hiện một
khuôn mặt tại một vị trí nào đó trong ảnh phụ thuộc vào giá trị tương đồng của điểm
đó so với mẫu chuẩn.
- Hướng tiếp cận dựa trên diện mạo: trái với hướng tiếp cận dựa trên khớp mẫu, các
mô hình sẽ được học từ một tập ảnh huấn luyện mà thể hiện tính chất tiêu biểu của
sự xuất hiện mặt người và mắt trong ảnh. Sau đó hệ thống sẽ xác định mặt người và
mắt. Phương pháp này còn được gọi bằng phương pháp học máy.
Việc tiếp cận theo mỗi hướng cần những thuật toán riêng biệt để mô tả những điểm
đặc biệt.
1.2 Các thuật toán mô tả điểm đặc biệt
1.1.1 Harris corner
Harris corner được Chris Harris và Mike Stephens giới thiệu vào năm 1998. Harris
corner thường được sử dụng trong các thuật toán tầm nhìn máy tính để trích xuất
góc của một hình ảnh. Một góc có thể được giải thích là đường giao nhau của hai
cạnh, một cạnh là sự thay đổi đột ngột độ sáng của hình ảnh. Các góc là các tính
năng quan trọng trong hình ảnh, thường được gọi là điểm quan tâm không thay đổi
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 2/34
đối với dịch huyển và ánh sáng. Harris corner thường được sử dụng trong việc kết
hợp âm thanh và lấy cơ sở dữ liệu hình ảnh. Mặc dù vẫn còn tồn tại những hạn chế,
máy dò góc Harris vẫn là một kỹ thuật quan trọng và cơ bản cho nhiều ứng dụng
tầm nhìn máy tính. Thông thường, thuật toán phát hiện góc Harris có thể được chia
thành năm bước.
Xám hoá hình ảnh: bước đầu tiên là chuyển hình ảnh thành ảnh xám để
tăng tốc độ xử lý.
Tính toán không gian:
Giả sử ta có một ảnh xám I, với mỗi điểm (x, y) và độ dịch chuyển (u, v) ta
có thể tính toán sự thay đổi trung bình cường độ xám bằng một cửa sổ dịch
chuyền từ (x, y) đến (x + u, y + v) như sau:
[1.1]
Với E(u, v) là sự thay đổi cường độ xám tại (u, v).
W(x, y) là cửa sổ tại (x, y). I(x, y) và I(x + u, y +v) là giá trị cường độ xám
của pixel tại vị trí I(x,y) và I(x + u, y +v).
Giá trị I(x + u, y +v) có thể được triển khai theo công thức Taylor như sau :
I(x + u, y +v) I(x, y) + Ix(x, y)u + Iy(x, y)v
[1.2]
Với Ix, Iy là đạo hàm theo thành phần x, y. Vậy
Thiết lập cáu trúc tensor M:
Nếu độ dịch chuyển (u, v) nhỏ thì:
Với
Tính toán phản hồi Harris: Trong bước này, chúng ta sẽ tính giá trị tự trị
nhỏ nhất cho việc sử dụng cấu trúc với phương trình xấp xỉ sau.
[1.3]
Đo đáp ứng góc :
R = det(M) – k(traceM)2 = λ1 λ2 - k (λ1+λ2)2
Ở đây k là hằng số xác định thực nghiệm: k = 0.04 :0.06
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
[1.4]
Trang 3/34
Hình 1-1: Đáp ứng góc [12]
R chỉ phụ thuộc vào giá trị riêng của M.
R lớn cho một góc.
R<0 cho ra cạnh.
R nhỏ là vùng phẳng.
1.1.2 Scale-Invariant Feature Transform
Scale-Invariant Feature Transform (SIFT) là một thuật toán trong lĩnh vực thị giác
máy tính do David Lowe đưa ra từ năm 1999. Kỹ thuật SIFT được ứng dụng vào
các bài toán như: nhận dạng đối tượng, nhận dạng cử chỉ, theo dõi video. Đặc trưng
được trích chọn trong SIFT là các điểm đặc biệt gọi là keypoint, các điểm này kèm
theo các mô tả về nó và một véc tơ lấy keypoint làm điểm gốc.
Có bốn giai đoạn trong thuật toán để trích xuất các điểm đặc biệt và các đặc trưng:
Phát hiện cực trị không gian tỉ lệ (Scale-space Extrema Detection): áp
dụng hàm sai khác Gaussian (DoG) để tìm ra các điểm có khả năng làm điểm
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 4/34
đặc trưng tiềm năng, đó là những đểm ít phụ thuộc vào sự thu phóng ảnh và
xoay ảnh.
Định vị chính xác điểm khóa (Keypoint localization): từ những điểm tiềm
năng sẽ lọc và lấy ra tập các điểm đặc trưng tốt nhất (keypoints).
Gán hướng cho các điểm khóa (Oriented Assignment): Mỗi điểm khóa sẽ
được gán cho một hoặc nhiều hướng dựa trên hướng gradient của ảnh. Mọi
phép toán xử lý ở các bước sau này sẽ được thực hiện trên những dữ liệu ảnh
đã được biến đổi tương đối so với hướng đã gán, kích cỡ và vị trí của mỗi
điểm khóa. Nhờ đó, tạo ra một sự bất biến trong các phép xử lý này.
Bộ mô tả ảnh cục bộ (Keypoint Description): Các hướng gradient cục bộ
sẽ được biễu diễn thành một dạng cho phép mô tả các tầng quan trọng của
quá trình bóp méo hình dạng cục bộ và sự thay đổi về độ sáng.
1.1.3 Histograms of Oriented Gradients
Đặc trưng Histograms of Oriented Gradients (HOG) được đề xuất bởi N.Dalal năm
2005. Đặc trưng HOG dựa trên việc đếm số lần xuất hiện của các hướng đạo hàm
trong các vùng của ảnh. Các toán tử HOG được cài đặt bằng cách chia nhỏ một bức
ảnh thành các cell và trong mỗi cell sẽ tính histogram về các hướng của gradients.
Ghép các histogram lại sẽ được một biểu diễn cho bức ảnh ban đầu. Để tăng cường
hiệu năng nhận dạng, các histogram được chuẩn hóa về độ tương phản bằng cách
tính một ngưỡng cường độ trong một vùng lớn hơn của ảnh, gọi là các block và sử
dụng giá trị ngưỡng đó để chuẩn hóa tất cả các cell trong khối. Kết quả của bước
chuẩn hóa này là vector đặc trưng sẽ có tính bất biến cao hơn đối với các thay đổi
về điều kiện ánh sáng.
Các bước cơ bản của việc tính một vector HOG cho một ảnh:
Bước 1: tính cường độ và hướng biến thiên tại mỗi pixel bằng công thức sau.
Cường độ |G| = , hướng =arctan .
[1.5]
Với Gx = I*Dx, Gy = I*Dy , I là hình ảnh đầu vào, Dx là bộ lọc cho chiều x, và
Dy là bộ lọc cho chiều y.
Bước 2: chia ảnh đầu ra ở bước trên thành nhiều khối (block), mỗi khối có
số ô bằng nhau, mỗi ô có số pixels bằng nhau. Các khối được xếp chồng lên
nhau một ô như ở hình 1-2.
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 5/34
Hình 1-2: Chia khối trích đặc trưng HOG [5]
Số khối được tính bằng công thức:
Trong đó Wimage, Himage, Wblock, Hblock, Wcell, Hcell
[1.6]
lần lượt là chiều rộng, chiều
cao của ảnh, khối và ô.
Bước 3: tính vector đặc trưng cho từng khối.
Chia không gian hướng thành p bin (số chiều vectơ đặc trưng của ô).
Góc hướng nghiêng tại pixel (x,y) có độ lớn α(x,y) được rời rạc hóa vào một
trong p bin.
Rời rạc hóa unsigned-HOG (p=9):
[1.7]
Rời rạc hóa signed-HOG (p=18):
[1.8]
Giá trị bin được xác định bởi tổng cường độ biến thiên của các pixels thuộc
về bin đó. Nối các vectơ đặc trưng ô để được vectơ đặc trưng khối. Số chiều
vectơ đặc trưng của khối tính theo công thức size feature/block=ncell* sizefeature/cell.
Trong đó ncell là số ô trong khối và size feature/cell là số chiều vectơ đặc trưng của
ô bằng 9 (unsignedHOG) hoặc 18 (signed-HOG).
Bước 4: tính vector đặc trưng cho ảnh.
Chuẩn hóa vectơ đặc trưng các khối bằng một trong các công thức sau:
L2-norm :
[1.9]
L1-norm :
[1.10]
Trong các công thức trên, v là vectơ đặc trưng ban đầu của khối, v k là k-norm
của v ( k = 1, 2), e là hằng số nhỏ.
Ghép các vectơ đặc trưng khối tạo nên ảnh để được đặc trưng R-HOG cho
ảnh. Số chiều vectơ đặc trưng của ảnh tính theo công thức size feature/image =
nblocks/image * sizefeature/block, với nblocks/image là khối và size feature/block là số chiều vectơ
đặc trưng mỗi khối.
1.1.4 Speeded Up Robust Features
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 6/34
Speeded Up Robust Features (SURF) được giới thiệu vào năm 2006 bởi nhóm các
nhà nghiên cứu bao gồm Herbert Bay, Tinne Tuytelaars và Luc Van Gool. Cách tiếp
cận của phương pháp này tương đối giống với SIFT. SURF cũng sử dụng không
gian scale để tìm điểm đặc trưng, các đặc trưng được mô tả dưới dạng vector và có
kèm thêm hướng. Hai phần chính trong thuật toán này là phát hiện và mô tả.
Phát hiện : việc phát hiện đặc trưng dựa trên không gian scale và sử dụng ma trận
Hessian.
Mô tả : việc mô tả đặc trưng sử dụng đặc trưng Haar Wavelet. Sử dụng Integral
Images để tăng tốc độ tính toán. Mỗi điểm đặc trưng sẽ được thêm một hướng dùng
để nhận dạng khi ảnh bị xoay. Mô tả điểm đặc trưng được thể hiện dưới dạng vector
gồm 64 thành phần.
Thuật toán SURF được chia thành 3 bước chính như sau:
Bước 1: các điểm quan tâm được lựa chọn tại những vị trí đặc trưng trên
bức ảnh như tại các góc, những đốm màu, các các ngã ba.
Bước 2: vùng phụ cận của các điểm quan tâm được mÔ tả bằng các vector
đặc tính. Bộ mô tả phải có sự riêng biệt, cùng một thời điểm, có dữ liệu thừa,
sai số phát hiện, biến dạng hình học và trắc quang.
Bước 3: các vector mô tả được hòa hợp giữa các bức ảnh. Sự hòa hợp thông
thường dựa trên khoảng cách giữa các vector, chẳng hạn khoảng cách
Mahalanobis hoặc Euclidean. Kích thước của bộ mô tả có sự tác động trực
tiếp tới thời gian thực hiện quá trình, và do vậy kích thước của bộ mô tả nhỏ
là tốt nhất.
1.1.5 Thuật toán Haar-like feature
Một trong những phương pháp phát hiện đối tượng hiệu quả nhất hiện nay là phát
hiện đối tượng sử dụng đặc trưng Haar dựa trên bộ phân loại tầng được để xuất bởi
Paul Viola và Michael Jones. Đây là một phương pháp học máy dựa trên cách tiếp
cận sử dụng chức năng tầng được huấn luyện bởi cách ảnh tích cực và tiêu cực và
sau đó dùng để phát hiện các đối tượng ở các ảnh khác.
Mỗi đặc trưng Haar–like là sự kết hợp của hai hay ba hình chữ nhật trắng hay đen
như trong hình sau:
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 7/34
Hình 1-3: Đặc trưng Haar-like [6]
Để sử dụng các đặt trưng này vào việc xác định khuôn mặt người, 4 đặc trưng Haarlike cơ bản được mở rộng ra, và được chia làm 3 tập đặc trưng như sau:
-
Đặc trưng cạnh (edge features):
Hình 1-4: Đặc trưng cạnh [7]
-
Đặc trưng đường (line features):
Hình 1-5: Đặc trưng đường [8]
-
Đặc trưng xung quanh tâm (center-surround features):
Hình 1-6: Đặc trưng xung quanh tâm [9]
Cách tính đặc trưng Haar-Like
Dùng các đặc trưng trên, ta có thể tính được giá trị của đặc trưng Haar-like là sự
chênh lệch giữa tổng của các pixel của các vùng đen và các vùng trắng như trong
công thức sau:
f(x) = Tổngvùng đen(các mức xám của pixel) - Tổngvùng trắng(các mức xám của
pixel)
Cách tính nhanh đặc trưng Haar-Like dựa trên đạo hàm ảnh bậc nhất ii(x, y) của ảnh
i(x, y), là tổng giá trị các pixel tính từ gốc trái đến (x, y):
[1.11]
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 8/34
Hình 1-7: Ảnh i(x, y) [10]
Việc tính toán đạo hàm ảnh rất nhanh bằng việc cộng tích luỹ như sau:
s(x, y) = s(x, y - 1) + i(x, y)
ii(x, y) = ii(x - 1, y) + s(x, y)
Trong đó s(x, y) là tổng của cột x tính từ đầu dòng đến vị trí (x, y).
Hình 1-8 : Ví dụ tính đặc trưng Haar-Like [11]
Ví dụ tính đặc trưng Haar-Like của ô chữ nhật D:
D = (ii(x, y) + ii(x – W, y – L)) – (ii(x – W, y) + ii(x, y – L))
Trong luận văn này sử dụng đặc trưng Haar-like do đó nên dùng phương pháp tiếp
cận dựa trên diện mạo kết hợp với bộ phân loại Adaboost và mô hình Cascade of
Classifiers để tăng tốc độ phát hiện khuôn mặt và mắt. Hai phần này sẽ trình bày ở
chương 3.
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 9/34
Bảng 1 : So sánh các thuật toán mô tả điểm đặc biệt
Thuật toán
HOG
Ưu điểm
Nhược điểm
Mô tả đặc trưng trên một
vùng rộng
Bất biến đối với các thay
SURF
đổi về điều kiện ánh sáng
Nhận dạng ra những ảnh Thời gian tính toán khá
có góc quay và tỉ lệ khác lâu và khó áp dụng trong
nhau.
thực tế nếu tập dữ liệu cần
Nhận dạng nhanh hơn nhận dạng lớn.
SIFT
SIFT
Không phụ thuộc vào các Tính toán phức tạp.
phép biến đổi ảnh cơ bản Đòi hỏi thời gian nghiên
như xoay, thu phóng, thay cứu và am hiểu nhiều
đổi độ sáng.
thuật toán thành phần.
Nhận dạng sẽ có độ chính
xác rất cao và thậm chí có
thể khôi phục được đối
tượng bị che khuất trong
Harris Corner
ảnh.
Là gốc của các thuật toán
khác.
Bất biến khi độ sáng, góc
Haar-Like feature
nhìn thay đổi.
Tốc độ tính toán nhanh
Bị ảnh hưởng bởi góc
Độ chính xác cao - hơn nhìn, độ sáng.
80%.
CHƯƠNG 2.
GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH PYTHON
1.3 Giới thiệu Python
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 10/34
Python là ngôn ngữ lập trình mức cao, đa mục đích được sử dụng r ộng rãi.
Triết lý thiết kế của ngôn ngữ này là nhấn mạnh vào khả năng đọc mã và cú
pháp của nó cho phép các lập trình viên di ễn tả các ý tưởng ch ỉ trong vài dòng
code. Ngôn ngữ này cung cấp các cấu trúc nhằm giúp cho các ch ương trình ở
quy mô nhỏ lẫn quy mô lớn.
Hình 2-1 : Biểu tượng của ngôn ngữ lập trình Python [1]
Trình thông dịch của Python đã có mặt trên nhiều hệ đi ều hành Windows,
Linux, Mac, Amiga, và những hệ khác.
1.4 Lịch sử phát triển của Python
Python là một ngôn ngữ lập trình thông dịch do Guido van Rossum ấp ủ từ
những năm đầu thập niên 80 của thế kỷ trước, được hiện thực vào tháng 12
năm 1989, hoàn thành năm 1991 và đưa ra công chúng năm 1994. 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ý.
Python 2.0 đã được phát hành vào ngày 16 tháng 10 năm 2000 và có nhiều tính
năng mới, bao gồm bộ thu gom rác theo chu kỳ và h ỗ tr ợ Unicode. V ới vi ệc
phát hành này quá trình phát tri ển đã được thay đổi và tr ở nên minh b ạch h ơn
và cộng đồng hậu thuẫn
Python 3.0 được phát hành năm 2008, sau một thời gian dài thử nghiệm.
Cho tới năm 2017, Python đang có phiên bản 3.7
1.5 Đặc điểm của ngôn ngữ Python
1.1.6 Dễ học, dễ đọc
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 11/34
Python được thiết kế để trở thành một ngôn ngữ dễ học, mã nguồn dễ đọc, bố cục
trực quan, dễ hiểu.
Python tăng cường sử dụng từ khóa tiếng Anh, hạn chế các kí hiệu và cấu trúc cú
pháp so với các ngôn ngữ khác.
Python là một ngôn ngữ phân biệt kiểu chữ HOA, chữ thường. Như C/C++, các
từ khóa của Python đều ở dạng chữ thường.
1.1.7 Khối lệnh
Trong các ngôn ngữ khác, khối lệnh thường được đánh dấu bằng cặp kí hiệu
hoặc từ khóa. Ví dụ, trong C/C++, cặp ngoặc nhọn { } được dùng để bao bọc
một khối lệnh. Python có một cách rất đặc biệt để tạo khối l ệnh, đó là th ụt
các câu lệnh trong khối vào sâu hơn (về bên phải) so với các câu lệnh của kh ối
lệnh cha chứa nó.
1.1.8 Đa năng
Python là một ngôn ngữ lập trình đơn giản nhưng rất hiệu quả:
So với Unix shell, Python hỗ trợ các chương trình lớn hơn và cung cấp
nhiều cấu trúc hơn.
So với C, Python cung cấp nhiều cơ chế kiểm tra lỗi hơn. Nó cũng có sẵn
nhiều kiểu dữ liệu cấp cao, ví dụ như các mảng linh hoạt và từ đi ển mà
ta sẽ phải mất nhiều thời gian nếu viết bằng C.
1.1.9 Multiple paradigms
Python là một ngôn ngữ đa biến hóa. Có nghĩa là, thay vì ép bu ộc m ọi người
phải sử dụng duy nhất một phương pháp lập trình, Python lại cho phép s ử
dụng nhiều phương pháp lập trình khác nhau: hướng đối tượng, có cấu trúc,
chức năng, hoặc chỉ hướng đến một khía cạnh.
1.1.10 Trình thông dịch
Python là một ngôn ngữ lập trình dạng thông dịch, do đó có ưu đi ểm ti ết ki ệm
thời gian phát triển ứng dụng vì không cần phải thực hi ện biên d ịch và liên
kết. Trình thông dịch có thể được sử dụng để chạy file script, hoặc cũng có
thể được sử dụng theo cách tương tác. Ở chế độ tương tác, trình thông dịch
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 12/34
Python tương tự shell của các hệ điều hành họ Unix, tại đó, ta có th ể nh ập vào
từng biểu thức rồi gõ Enter, và kết quả thực thi sẽ được hi ển th ị ngay l ập tức.
Đặc điểm này rất hữu ích cho người mới học, giúp họ nghiên cứu tính năng
của ngôn ngữ; hoặc để các lập trình viên chạy thử mã lệnh trong su ốt quá
trình phát triển phần mềm. Ngoài ra, cũng có thể tận dụng đặc đi ểm này đ ể
thực hiện các phép tính như với máy tính bỏ túi.
1.6 Xếp hạng ngôn ngữ
Theo bảng xếp hạng năm 2016, ngôn ngữ python xếp hạng thứ 3 trong Top 10
các ngôn ngữ lập trình phổ biến nhất đang được sử dụng.
Hình 2-2: Bảng xếp hạng ngôn ngữ lập trình phổ biến [2]
Theo thống kê từ top 39 trường giảng dạy khoa học máy tính thì đa ph ần các
trường sử dụng ngôn ngữ Python để giảng dạy:
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 13/34
Hình 2-3: Thống kê ngôn ngữ giảng dạy [3]
1.7 Ứng dụng của ngôn ngữ Python
Lập trình web: YouTube, Google, Dropbox, Quora, Reddit, Instagram,
Nasa, Firefox, Yahoo Maps,…
Data Analysis: Machine Learning, Data Visualization, Google Cloud,
Image and Video Analysis
Lập trình robot
Lập trình game
Lập trình ứng dụng
Bảo mật mạng và máy tính
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 14/34
CHƯƠNG 3.
DỮ LIỆU HUẤN LUYỆN
1.8 Bộ phân loại AdaBoost
AdaBoost là một bộ phân loại mạnh phi tuyến phức dựa trên hướng tiếp cận diện
mạo được Freund và Schapire đưa ra vào năm 1995. AdaBoost hoạt động trên
nguyên tắc kết hợp tuyến tính các bộ phân loại yếu để tạo nên một bộ phân loại
mạnh. AdaBoost sử dụng trọng số để đánh dấu các mẫu khó nhận dạng. Trong quá
trình huấn luyện cứ mỗi bộ phân loại yếu được xây dựng thì thuật toán sẽ tiến hành
cập nhật lại trọng số để chuẩn bị cho việc xây dựng bộ phân loại tiếp theo. Cập nhật
bằng cách tăng trọng số của các mẫu nhận dạng sai và giảm trọng số của các mẫu
được nhận dạng đúng bởi bộ phân loại yếu vừa xây dựng. Bằng cách này thì bộ
phân loại sau có thể tập trung vào các mẫu mà bộ phân loại trước nó làm chưa tốt.
Cuối cùng các bộ phân loại yếu sẽ được kết hợp lại tùy theo mức độ tốt của chúng
để tạo nên một bộ phân loại mạnh. Bộ phân loại yếu hk được biểu diễn như sau:
[3.1]
Với x là cửa sổ con cần xét, θk là ngưỡng, fk là giá trị đặc trưng Haar Like và pk là
hệ số quyết định chiều của phương trình.
1.9 Cascade of Classifiers
Cascade of Boosted Classifiers là mô hình phân tầng với mỗi tầng là một mô hình
AdaBoost sử dụng bộ phân lớp yếu là cây quyết định với các đặc trưng Haar-like.
Trong quá trình huấn luyện bộ phân loại phải duyệt qua tất cả các mẫu trong tập
huấn luyện, việc này tốn rất nhiều thời gian. Tuy nhiên các mẫu đưa vào không phải
mẫu nào cũng thuộc loại khó nhận dạng, có những mẫu đơn giản rất dễ nhận ra. Đối
với những mẫu này ta chỉ cần xét một vài đặc trưng đơn giản là có thể nhận diện
được. Nhưng một bộ phân loại thông thường thì nó vẫn xét tất cả các đặc trưng mà
nó rút ra trong quá trình học. Do đó tốn thời gian xử lý không cần thiết.
Mô hình Cascade of Classifiers được xây dựng nhằm rút ngắn thời gian xử lý, giảm
thiểu nhận dạng sai cho bộ phân loại. Cascade trees gồm nhiều tầng, một mẫu để
được phân loại là đối tượng thì nó cần phải đi qua hết tất cả các tầng. Các tầng sau
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 15/34
được huấn luyện bằng những mẫu negative (không phải mắt người) mà tầng trước
nó nhận dạng sai, tức là nó sẽ tập trung học từ các mẫu background khó hơn, do đó
sự kết hợp các tầng AdaBoost này lại sẽ giúp bộ phân loại giảm thiểu nhận dạng sai.
Với cấu trúc này, những mẫu dễ nhận dạng sẽ bị loại ngay từ những tầng đầu tiên,
giúp đáp ứng tốt nhất thời gian xử lý và vẫn duy trì được hiệu quả phát hiện khuôn
mặt.
1.10 Tiến hành huấn luyện
Bước 1: thu thập hình ảnh mắt người và cắt chúng với một tỉ lệ cố định, những hình
ảnh này được gọi là positive images. Tiếp theo thu thập một lượng lớn hình ảnh
không phải là mắt gọi là negative images. Thực tế đã thu thập được hơn 3000
positive images và hơn 15000 negative images với tỉ lệ 20x20 pixel.
Hình 3-1: Một số hình ảnh positive images
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 16/34
Hình 3-2: Một số hình ảnh negative images
Bước 2: tạo dữ liệu cho negative images.
Hình 3-3: Quá trình tạo dữ liệu ho negative images
Dữ liệu thu được là file bg.txt.
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python
Trang 17/34
Hình 3-4: Dữ liệu file bg.txt
Bước 3: tạo dữ liệu cho positive_images.
Hình 3-5: Quá trình tạo dữ liệu cho positive images
Dữ liệu thu được là file info.dat
Nhận diện trạng thái mắt sử dụng ngôn ngữ Python