TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CNTT & TT
BỘ MÔN TIN HỌC ỨNG DỤNG
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
NGHIÊN CỨU THƯ VIỆN OPENCV
ỨNG DỤNG NHẬN DẠNG
KHUÔN MẶT NGƯỜI
Sinh viên thực hiện
Cán bộ hướng dẫn
Nguyễn Hoàng Phúc
Ths.Nguyễn Đức Khoa
MSSV : 1111540
Cần Thơ, 2015
TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CNTT & TT
BỘ MÔN TIN HỌC ỨNG DỤNG
LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC
NGHIÊN CỨU THƯ VIỆN OPENCV
ỨNG DỤNG NHẬN DẠNG
Đặc biệt, em xin gửi lời cảm ơn sâu sắc đến Thầy Ths. Nguyễn Đức Khoa người
đã tận tình hướng dẫn, truyền đạt kinh nghiệm, kiến thức và chỉ bảo em trong suốt quá
trình thực hiện đề tài.
Con xin gửi lời biết ơn sâu sắc và kính trọng đến cha mẹ - gia đình đã giúp con
có được những thành quả ngày hôm nay.
Sau cùng, xin chân thành gửi lời cảm ơn đến các bạn bè đã đóng góp ý kiến, giúp
đỡ và động viên tôi trong những lúc khó khăn và tiếp thêm cho tôi động lực để hoàn
thành đề tài.
Cần thơ, ngày 4 tháng 5 năm 2015.
1111540 - Nguyễn Hoàng Phúc
Trang i
Nguyễn Hoàng Phúc – 1111540
Nghiên cứu thư viện OpenCv - Ứng dụng nhận dạng khuôn mặt người
MỤC LỤC
CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI ..........................................................................1
1.1
Đặt vấn đề ..........................................................................................................1
1.2
Một số nghiên cứu trước đây .............................................................................1
1.3
2.2.1
Đặc trưng Haar-Like ...................................................................................7
2.2.2
Trích đặc trưng Harr-Like từ ảnh ................................................................ 8
2.2.3
Mô hình Cascades of Boosted Classifiers .................................................11
2.2.4
Adaboost....................................................................................................12
2.2.4.1
Tổng quan về Adaboost .....................................................................12
2.2.4.2
Sơ lược Boosting................................................................................12
2.2.4.3
Kỹ thuật Adaboost – nhận dạng đối tượng ........................................14
2.3
Nguyễn Hoàng Phúc – 1111540
Nghiên cứu thư viện OpenCv - Ứng dụng nhận dạng khuôn mặt người
3.1
Quy trình cơ bản của hệ thống .........................................................................29
3.2
Phát hiện và nhận dạng đối tượng với đặc trưng Haar-Like ............................ 29
3.2.1
Huấn luyện dữ liệu ....................................................................................29
3.2.2
Hệ thống nhận dạng đối tượng ..................................................................35
3.3
Thực nghiệm hệ thống ..................................................................................... 36
3.3.1
Huấn luyện dữ liệu ....................................................................................36
3.3.2
Hình 2.15: Ưu tiên trọng số lớn để phân hoạch ............................................................ 19
Hình 2.16: Adaboost và Cascades of Boosted Classifier ..............................................20
Hình 2.17: Dò tìm đối tượng với Haar Like Features - Cascade of Boosted Classifiers
.......................................................................................................................................21
Hình 2.18: Thư viện OpenCV ....................................................................................... 22
Hình 2.19: Lịch sử các phiên bản OpenCV ...................................................................23
Hình 2.20: Cấu trúc cơ bản của OpenCV ......................................................................23
Hình 2.21: Các khía cạnh và ứng dụng của OpenCV ...................................................25
Hình 2.22 Thư viện Emgu CV....................................................................................... 26
Hình 2.23: Cấu trúc của Emgu CV ................................................................................27
Hình 2.24: Sơ đồ cơ bản hệ thống GSM .......................................................................28
Hình 3.1: Quy trình hệ thống ......................................................................................... 29
Hình 3.2: Thư mục chứa ảnh và các tập tin liên quan ...................................................30
Trang iv
Nguyễn Hoàng Phúc – 1111540
Nghiên cứu thư viện OpenCv - Ứng dụng nhận dạng khuôn mặt người
Hình 3.3: Thu ảnh thông qua Webcam ..........................................................................30
Hình 3.4: Ảnh chứa đối tượng – Positives ....................................................................31
Hình 3.5: Ảnh không có đối tượng – Negatives ............................................................ 31
Hình 3.6: Đánh dấu vị trí đối tượng và lưu vào tập tin Positive.txt .............................. 31
Hình 3.7: Ghi nhận ảnh không có đối tượng vào tập tin Negatives.txt ......................... 32
Hình 3.8: Gói thư viện tạo vectơ với Positives ............................................................. 33
Hình 3.9: Cấu trúc phân tầng tập tin Xml .....................................................................34
Hình 3.10: Đánh dấu vị trí đối tượng ............................................................................36
Hình 3.11: Lưu ảnh không đối tượng ............................................................................36
Hình 3.12: Tạo file vectơ ............................................................................................... 37
GUI
Graphic User Interface
GSMComm
Global System for Mobile Communications
OpenCV
Open Source Computer Vision Library
RSAT
Rotated Summed Area Table
IPP
Intergrated Performance Primitives
XML
eXtensible Markup Language
-w
Width of Image
-h
applications (the specific objects are human faces). Haar-like Features - a machine
learning algorithm is applied in the study for extracting features of the object to be
detected, combined with Boosted Cascade of Classifiers to identify, detect objects on
the image plane via algorithms AdaBoost for classification. A total of 6,000 photos
(1,500 contained object images and 4,500 did not contain object images) were collected
for study. The application will discover, zone, and save images or clips whenever the
objects are identified. The use of GSM system is to send an SMS to a cellphone to report
the time that the objects are detected, and to give an alarm.
Từ khoá (Keyword): Haar-Like feature, Adaboost, Cascade of Booted Classsifier,
nhận dạng đối tượng, Emgu, OpenCV
Trang vii
Nguyễn Hoàng Phúc – 1111540
Nghiên cứu thư viện OpenCv - Ứng dụng nhận dạng khuôn mặt người
CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI
1.1 Đặt vấn đề
Trong thời kỳ phát triển mạnh mẽ của công nghệ thông tin, con người đang dần
áp dụng các ứng dụng khoa học máy tính để phục vụ các công việc hằng ngày. Trong
đó, những ứng dụng bảo mật an ninh dựa vào hệ thống thị giác máy tính để thực hiện
việc phát hiện, nhận dạng xuất hiện ngày càng nhiều với những đối tượng ngày càng
phong phú, đa dạng. Hiện nay, các ứng dụng nhận dạng khuôn mặt được xây dựng và
phát triển trên rất nhiều thiết bị cũng như hệ thống nhằm giúp con người thuận tiện hơn
trong việc quản lý, bảo mật, giám sát hoặc tìm kiếm. Các ứng dụng nhận diện khuôn
mặt, nụ cười trong máy ảnh hoặc smartphone dần trở nên quen thuộc với mọi người.
Nhận thấy sự cần thiết trong nghiên cứu nhằm giúp con người dễ dàng quản lý
và an tâm hơn trong việc bảo vệ tài sản, kèm theo đó là tiền đề cho việc phát triển và
Nghiên cứu thư viện OpenCv - Ứng dụng nhận dạng khuôn mặt người
khuôn mặt. Đây được coi là cột mốc quan trọng vì nó cho thấy ít hơn một trăm
giá trị cần thiết để nhận dạng một khuôn mặt được chuẩn hoá.
Năm 1991, Turk và Pentland sử dụng thuật toán eigenfaces để nhận dạng khuôn
mặt tự động trên thời gian thực. Dù phương pháp này một phần nào bi hạn chế
bởi yếu tố môi trường nhưng nó cũng góp phần đáng kể cho sự phát triển của
công nghệ nhận dạng khuôn mặt.
Năm 2001, Paul Viola và Michael J.Jones đã cho ra đời đặc trưng Haar-Like, đó
là những đặc trưng ảnh số cũng với phương pháp tích phân ảnh (integral images)
để nâng cao khả năng rút trích đặc trưng trên thời gian thực.
Tháng 7-2003, Trần Phước Long và Nguyễn Văn Lượng dùng mạng Neural để
dò tìm khuôn mặt trên ảnh, kết hợp phương pháp phân tích thành phần chính và
biến đổi Cosine rời rạc để rút ra Vector đặc trưng làm đầu vào cho hai bộ nhận
dạng SVM và HMM. Hệ thống tiếp cận từ các phương pháp học mạnh, nhưng
nhiều trường hợp tối ưu cần thử nghiệm nhiều lần với nhiều bộ tham số khác
nhau.
Năm 2005, Trần Lê Hồng Dũ sử dụng các đặc trưng lòi lõm để phát hiện khuôn
mặt trên ảnh nhưng còn hạn chế về độ sáng, quan hệ hình học và các đặc trưng
thực hiện dò tìm đối tượng trên mặt phẳng ảnh theo thời gian thực để triển khai
giải quyết bài toán đặt ra.
1.5 Bố cục và nội dung
Luận văn sẽ thực hiện nghiên cứu về việc phát hiện nhận dạng mặt người với
OpenCV (cụ thể là phiên bản C# – EmguCV) với những nội dung sau:
CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI
Giới thiệu tổng quan về đề tài, xác định vấn đề, bối cảnh và nội dung bài toán cần
giải quyết. Trình bày về lịch sử giải quyết vấn đề, các nghiên cứu và thành quả của
những người đi trước trong cùng lĩnh vực, phạm vi và phương pháp nghiên cứu đề tài.
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
Giới thiệu về bài toán dò tìm khuôn mặt, đặc trưng Haar-Like Features, thuật toán
AdaBoost và bộ phân tầng Cascade of Boosted Classifier. Tổng quan về gói thư viện
OpenCV để nghiên cứu về nhận dạng mặt người, thư viện Emgu nền tảng của OpenCV
trên nền ngôn ngữ C# và hệ thống gửi tin nhắn GSMComm.
CHƯƠNG 3: NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU
Thể hiện cách giải quyết bài toán thông qua hệ thống thực nghiệm. Xây dựng một
bộ huấn luyện nhằm nhận dạng khuôn mặt người trên mặt phẳng ảnh. Nêu lên các thiết
kế về chương trình và trình bày về thực nghiệm chương trình kèm theo hướng dẫn.
Trang 3
Nguyễn Hoàng Phúc – 1111540
Nghiên cứu thư viện OpenCv - Ứng dụng nhận dạng khuôn mặt người
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1 Bài toán dò tìm khuôn mặt
2.1.1 Định nghĩa bài toán
Dò tìm, xác định mặt người là một kỹ thuật máy tính dùng để xác định kích thước
Trang 4
Nguyễn Hoàng Phúc – 1111540
Nghiên cứu thư viện OpenCv - Ứng dụng nhận dạng khuôn 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ã hóa các đặc trưng và
quan hệ giữa các đặc trưng của khuôn mặt thành các luật. Những luật này thường là
các mối quan hệ giữa các thành phần trên khuôn mặt. Trong hướng tiếp cận này, các
luật sẽ phụ thuộc rất lớn vào tri thức của những tác giả nghiên cứu. Một vấn đề phức
tạp khác khi dùng hướng tiếp cận này là làm sao chuyển từ tri thức con người sang
các luật một cách hiệu quả. Nếu các luật quá chi tiết thì khi dò tìm khuôn mặt sẽ có
thể sót các đối tượng, vì những đối tượng này không thỏa tất cả các luật được đưa ra.
Nhưng các luật quá tổng quát thì có thể gây ra nhận dạng lầm một vùng nào đó không
phải khuôn mặt mà lại dò tìm là khuôn mặt;
Hướng tiếp cận dựa trên đặc trưng bất biến: Xây dựng các thuật toán để tìm các
đặc trưng của khuôn mặt mà các đặc trưng này không phụ thuộc tư thế khuôn mặt
hay vị trí đặt máy ảnh, camera (webcam) thay đổi, điều kiện chiếu sáng, và các khó
khăn khác. Vấn đề của các thuật toán theo hướng tiếp cận này là cần phải điều chỉnh
cho phù hợp điều kiện ánh sáng, nhiễu, và bị che khuất… đôi khi bóng của đối tượng
sẽ tạo thêm cạnh mới, mà cạnh này lại rõ hơn cạnh thật sự của nó, vì thế nếu dùng
cạnh để xác định đối tượng sẽ gặp khó khăn;
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
(các mẫu này đã được chọn và lưu trữ) để mô tả các khuôn mặt hay các đặc trưng của
khuôn mặt (các mẫu này được chọn tách biệt theo tiêu chuẩn đã được các tác giả đề
ra để so sánh). Các mẫu này được dùng để phát hiện khuôn mặt bằng cách quét nó
qua ảnh và tính toán giá trị tương đồng cho mỗi vị trí. Việc xuất hiện khuôn mặt tại
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 này có lợi thế là rất dễ cài đặt, nhưng không đạt hiệu quả khi
ngưỡng học được phân biệt là không phải đối tượng từ đối tượng đó trên ảnh. Ưu điểm
chính của việc trích đặc trưng Haar-Like so với hầu hết cách trích đặc trưng khác là tốc
độ tính toán. Do sử dụng cách tính tích phân ảnh (integral images) nên đặc trưng HaarLike có thể trích bất kì kích thước nào trong thời gian liên tục.
Đặc trưng Haar-Like sẽ phản ánh sự tương phản giữa các mối liên hệ của đối
tượng mà Haar-Like trích đặc trưng. Những đối tượng cần dò và phát hiện có thể được
xác định bởi một bộ những đặc trưng này thông qua những liên hệ không gian giữa
chúng.
Hình 2.2: Đặc trưng Haar-Like
Để có thể huấn luyện bộ phân lớp (Classifier), Viola-Jones đã sử dụng việc phân
tầng với các bộ phân lớp được nâng cao dần, được huấn luyện với vài trăm các mẫu đối
tượng cần dò và phát hiện. Chúng sử dụng những mẫu có đối tượng trong ảnh (những
mẫu này có thể co giãn với kích thước 20x20) – được gọi là mẫu khẳng định (Positive)
và những mẫu không có đối tượng cần phát hiện – gọi là mẫu phủ định (Negative). Song
đó, bộ phân lớp sẽ làm nhiệm vụ là xuất ra giá trị một nếu vùng đó giống như đối tượng
mà chúng ta quan tâm và ngược với đối tượng không phải đối tượng cần tìm thì bộ phân
lớp sẽ trả về giá trị không. Chúng ta sẽ di chuyển cửa sổ tìm kiếm dọc theo ảnh nhằm
mục đích và xác định trên từng vị trí bởi việc sử dụng bộ phân lớp để tìm kiếm đối tượng
trong toàn bộ bức ảnh thu được từ Camera. Bên cạnh đó, đối với trường hợp tìm kiếm
Trang 6
Nguyễn Hoàng Phúc – 1111540
Nghiên cứu thư viện OpenCv - Ứng dụng nhận dạng khuôn mặt người
những đối tượng chưa biết cụ thể kích thước, chúng ta cần phải có một thuật toán quét
qua ảnh trong nhiều lần với tỷ lệ co giãn khác nhau để tìm được đối tượng mà chúng ta
quan tâm.
-
2. Đặc trưng đường (line features):
3. Đặc trưng xung quanh tâm (center-surround features):
Hình 2.5: Các đặc trưng mở rộng từ đặc trưng Haar-like cơ sở
2.2.2 Trích đặc trưng Harr-Like từ ảnh
Đặc trưng Haar-like sẽ diễn đạt được tri thức về các đối tượng trong ảnh (bởi vì
nó biểu diễn mối liên hệ giữa các bộ phận của đối tượng), điều mà bản thân từng điểm
ảnh không diễn đạt được – dựa trên việc co giãn của khung cửa sổ tìm kiếm. Để tính giá
trị các đặc trưng Haar-Like, ta tính 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:
f(x) = ∑𝑣ù𝑛𝑔 đ𝑒𝑛(𝑝𝑖𝑥𝑒𝑙) − ∑𝑣ù𝑛𝑔 𝑡𝑟ắ𝑛𝑔(𝑝𝑖𝑥𝑒𝑙)
(2.1)
Vì vậy chúng ta sẽ thấy rằng, với tổng các pixel trên ảnh (pixel vùng trắng và
pixel vùng đen) sẽ cho ta các giá trị của đặc trưng Haar – Like. Nhưng để tính toán những
giá trị của các đặc trưng Haar-like cho tất cả các vị trí trên ảnh đòi hỏi chi phí tính toán
khá lớn, dẫn đến không thể đáp ứng được cho các ứng dụng đòi hỏi tính thời gian
thực(run-time) trực tiếp từ Camera (hay Webcam trên Laptop). Do đó Viola và Jones đề
xuất một khái niệm gọi là “tích phân ảnh” (Integral Image) để tính toán nhanh cho các
đặc trưng cơ bản của Haar-like.
Tuy rằng “tích phân ảnh” đã chinh phục nhiều nhà nghiên cứu trên cộng đồng
thị giác máy tính, nhưng để tính toán cho các đặc trưng có góc xoay 45o thì việc tính
toán từ các đặc trưng trên sẽ rất khó. Do vậy, Lienhart đã kế thừa Viola-Jones trong khái
niệm tích phân ảnh và phát triển nhằm đưa ra thêm khái niệm RSAT – Rotated Summed
Trang 8
D
C
P4 (x4,y4)
P3
(x3,y3)
Hình 2.7: Cách tính nhanh vùng D với tổng các điểm ảnh trên ảnh
-
Tính điểm D:
Tổng = A + B + C + D
D =Tổng – (A+B) – (A+C) + A
(2.2)
Với A + B + C + D chính là giá trị tại điểm P4 trên đảo hàm ảnh , tương tự như
vậy A+B là giá trị tại điểm P2, A+C là giá trị tại điểm P3, và A là giá trị tại điểm P1.
Vậy ta có thể viết lại biểu thức tính D ở trên như sau:
𝐷 = 𝑃4 − 𝑃2 − 𝑃3 + 𝑃1
𝐷 = (𝑥4 , 𝑦4 ) − (𝑥2 , 𝑦2 ) − (𝑥3 , 𝑦3 ) + (𝑥1 , 𝑦1 )
Trang 9
(2.3)
Nguyễn Hoàng Phúc – 1111540
𝐼(𝑥 ′ , 𝑦 ′ )
(2.4)
𝑥≤𝑥,𝑥≤𝑥−|𝑦−𝑦|
Tổng pixel của một vùng bất kỳ (cụ thể vùng D) trên ảnh vẫn được tính theo cách
sau:
D = A + B + C + D – (A+B) – (A+C) + A
(2.5)
Như vậy tổng các điểm ảnh trong một hình chữ nhật (kể cả trường hợp xoay 45º)
bất kì đều có thể được tính nhanh dựa trên tích phân ảnh tại 4 đỉnh của nó:
(2.6)
Sum (D ) = P4 - P2 – P3 + P1
Do cách tính là sự kết hợp giữa các phép toán cộng (+), trừ (-) nên độ phức tạp
cho mỗi phép toán là O(1) Tốc độ tính toán với các điểm trên ảnh nhanh hơn Áp
dụng tốt cho các bài toán tính theo thời gian thực.
Hình 2.9: Cách trích đặc trưng Haar-like
Trang 10
Nguyễn Hoàng Phúc – 1111540
Nghiên cứu thư viện OpenCv - Ứng dụng nhận dạng khuôn mặt người
h
1-f
N
N-1
h
1-f
1-f
h (tỷ lệ nhận dạng
chính xác đối tượng)
N
1-f falsealarms = f
Không phải đối tượng
Hình 2.10: Cấu trúc phân tầng với N giai đoạn
Hình trên minh họa huấn luyện của một tầng (cascade) gồm N giai đoạn (stages).
Ở mỗi giai đoạn, bộ phân lớp yếu tương ứng sẽ được huấn luyện sao cho độ chính xác
của nó là h và false alarm bằng f (tỷ lệ nhận dạng lầm).
Trang 11
Nguyễn Hoàng Phúc – 1111540
-
ảnh xám.
Adaboost, thuật toán máy học được phát triển dựa trên nền tảng thuật toán máy
học Boosting.
2.2.4.2 Sơ lược Boosting
Kearns người đã khơi nguồn cho giải thuật Boosting với câu hỏi nổi tiếng: “Liệu
có thể tạo ra một bộ phân lớp mạnh hơn từ một tập các bộ phân lớp yếu”. Năm 1990,
Robert Schapire đưa ra thuật toán boosting đầu tiên. Sau đó, được phát triển, áp dụng,
kiểm nghiệm vào những năm 1993 trong các chương trình nhận dạng do Drucker,
Schapire và Simard thực hiện. Yoav Freund đã cùng Robert Schaprire tiếp tục nghiên
Trang 12
Nguyễn Hoàng Phúc – 1111540
Nghiên cứu thư viện OpenCv - Ứng dụng nhận dạng khuôn mặt người
cứu và phát triển, và đến năm 1995 thì ông cùng với Schapire phát triển boosting thành
AdaBoost.
Dựa vào câu nói của Kearns đã cho ta có thể biết được nguyên lý hoạt động cơ
bản của Boosting là sự kết hợp bộ phân lớp yếu (weak classifier) thành một phân lớp
mạnh hơn (strong classifier). Với những gì mà Freund và Schaprire đã phát triển thì bộ
phân lớp yếu chỉ cần có độ chính xác trên 50% là có thể áp dụng “boost” được.
Để hiểu cách hoạt động của thuật toán boosting, ta xét một bài toán phân loại 2
lớp (mẫu cần nhận dạng chỉ thuộc một trong hai lớp) với D là tập huấn luyện gồm có n
mẫu. Trước tiên, chúng ta sẽ chọn ngẫu nhiên ra n1 mẫu từ tập D (n1
phân lớp yếu sau có thể tập trung vào các mẫu mà các phân lớp yếu trước đó chưa thực
hiện tốt. Sau cùng, các phân lớp yếu sẽ được kết hợp tùy theo mức độ ‘tốt’ của chúng
để tạo nên một phân lớp mạnh hơn.
Trang 14
Nguyễn Hoàng Phúc – 1111540
Nghiên cứu thư viện OpenCv - Ứng dụng nhận dạng khuôn mặt người
Hình 2.12: Nguyên tắc Adaboost
Ý tưởng chính của Boosting là thực hiện lặp lại nhiều lần quá trình học của bộ
phân lớp yếu nghĩa là tập trung học lại các phần tử bị phân lớp sai. Tại mỗi giai đoạn
(stages) của Cascades of Boosted Classifiers được huấn luyện là một Adaboost.
Các weak classifiers hk(x) là các bộ phân loại yếu được lấy từ việc trích các đặc
trưng Haar-like, được biểu diễn như sau:
ℎ𝑘 (𝑥) = {
1 𝑛ế𝑢 𝑝𝑘 𝑓𝑘 (𝑥) < 𝑝𝑘 𝜃𝑘
0
𝑛ế𝑢 𝑛𝑔ượ𝑐 𝑙ạ𝑖
(2.7)
Trong đó:
X : mẫu hay cửa sổ con cần xét (X = (x1,x2,…,xn) là vector đặc trưng của mẫu);
𝜃k: ngưỡng (θ = teta);
fk: giá trị của đặc trưng Haar-like; (2.1)
pk: hệ số quyết định chiều của bất phương trình (a parity indicating the
lớn trọng số
Bộ phân lớp yếu
h3(x)
Bộ phân lớp yếu
h2(x)
Tiếp tục đánh trọng số lớn
hơn cho các mẫu thử vừa bị
phân loại sai ở bước 2
Hình 2.13: Kỹ thuật Adaboost
Trang 16