Một trong những bài toán được nhiều người quan tâm nhất của lĩnh vực xử lý ảnh hiện nay đó là nhận dạng khuôn mặt (Face Recognition). Như chúng ta đã biết, khuôn mặt đóng vai trò quan trọng trong quá trình giao tiếp giữa người với người, nó mang một lượng thông tin giàu có, chẳng hạn như từ khuôn mặt chúng ta có thể xác định giới tính, tuổi tác, chủng tộc, trạng thái cảm xúc, đặc biệt là xác định mối quan hệ với đối tượng (có quen biết hay không). Do đó, bài toán nhận dạng khuôn mặt đóng vai trò quan trọng trong nhiều lĩnh vực đời sống hằng ngày của con người như các hệ thống giám sát, quản lý vào ra, tìm kiếm thông tin một người nổi tiếng, … đặc biệt là an ninh, bảo mật. Có rất nhiều phương pháp nhận dạng khuôn mặt để nâng cao hiệu suất tuy nhiên dù ít hay nhiều những phương pháp này đang vấp phải những thử thách về độ sáng, hướng nghiêng, kích thước ảnh, hay ảnh hưởng của tham số môi trường. Bài toán Nhận diện khuôn mặt (Face Recognition) bao gồm nhiều bài toán khác nhau như: phát hiện mặt người (face detection), đánh dấu (facial landmarking), trích chọn (rút) đặc trưng (feature extration), gán nhãn, phân lớp (classification). Trong thực tế, nhận dạng khuôn mặt người (Face Recognition) là một hướng nghiên cứu được nhiều nhà khoa học quan tâm, nghiên cứu để ứng dụng trong thực tiễn. Ở các trường đại học hàng đầu về Công Nghệ Thông Tin như Massachusetts Institute of Technology (MIT), Carnegie Mellon University (CMU), Standford, Berkeley và các công ty lớn như Microsoft, Apple, Google,
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN
MÔN HỌC: TRUYỀN THÔNG ĐA PHƯƠNG TIỆN Giảng viên hướng dẫn:Vũ Hữu Tiến
ĐỀ TÀI: NHẬN DẠNG ĐỐI TƯỢNG BẰNG KHUÔN MẶT
Trang 2
MỤC LỤC
LỜI MỞ ĐẦU 3
1 Lý do chọn đề tài 3
2 Mục đích của đề tài 4
3 Đối tượng và phạm vi nghiên cứu 4
I BÀI TOÁN NHẬN DẠNG ĐỐI TƯỢNG BẰNG KHUÔN MẶT 5
1 Tổng quan và các khái niệm liên quan đến nhận dạng khuôn mặt 5
1.1 Hệ thống sinh trắc học 5
1.2 Hệ thống nhận dạng khuôn mặt 5
1.3 Hoạt động của hệ thông nhận diện khuôn mặt 6
1.4 Những khó khăn của hệ thống nhận dạng khuôn mặt 6
2 Tổng quan kiến trúc của một hệ thống nhận dạng mặt người 7
2.1 Tổng quan kiến trúc 7
2.2 Ngôn ngữ lập trình 8
3 Hướng tiếp cận của đề tài: 8
4 Tổng quan về các thư viện 9
4.1 Tổng quan về thư viện opencv 9
4.2 Tổng quan về thư viện face_recognition 10
4.3 Thư viện pyQT 11
5 Các thuật toán sử dụng: 11
5.1 Các đặc trưng Haar-Like 11
5.2 Trích xuất đặc trưng: 14
5.3: Nhận diện khuôn mặt: 14
6 Xây dựng hệ thống: 15
7 Code 18
II Kết Luận 20
Tài liệu tham khảo 20
Trang 3LỜI MỞ ĐẦU
1 Lý do chọn đề tài.
Với sự phát triển không ngừng của khoa học và công nghệ, đặc biệt là với những chiếc điện thoại thông minh (smartphone) ngày càng hiện đại và được sử dụng phổ biến trong đời sống con người đã làm cho lượng thông tin thu được bằng hình ảnh ngày càng tăng Theo đó, lĩnh vực xử lý ảnh cũng được chú trọng phát triển, ứng dụng rộng rãi trong đời sống xã hội hiện đại Không chỉ dừng lại ở việc chỉnh sửa, tăng chất lượng hình ảnh mà với công nghệ xử lý ảnh hiện nay chúng ta có thể giải quyết các bài toán nhận dạng chữ viết, nhận dạng dấu vân tay, nhận dạng khuôn mặt…
Một trong những bài toán được nhiều người quan tâm nhất của lĩnh vực xử lý ảnh
hiện nay đó là nhận dạng khuôn mặt (Face Recognition) Như chúng ta đã biết, khuôn
mặt đóng vai trò quan trọng trong quá trình giao tiếp giữa người với người, nó mang một lượng thông tin giàu có, chẳng hạn như từ khuôn mặt chúng ta có thể xác định giới tính, tuổi tác, chủng tộc, trạng thái cảm xúc, đặc biệt là xác định mối quan hệ với đối tượng (có quen biết hay không) Do đó, bài toán nhận dạng khuôn mặt đóng vai trò quan trọng trong nhiều lĩnh vực đời sống hằng ngày của con người như các hệ thống giám sát, quản lý vào ra, tìm kiếm thông tin một người nổi tiếng, … đặc biệt là an ninh, bảo mật
Có rất nhiều phương pháp nhận dạng khuôn mặt để nâng cao hiệu suất tuy nhiên dù ít hay nhiều những phương pháp này đang vấp phải những thử thách về độ sáng, hướng nghiêng, kích thước ảnh, hay ảnh hưởng của tham số môi trường
Bài toán Nhận diện khuôn mặt (Face Recognition) bao gồm nhiều bài toán khác nhau như: phát hiện mặt người (face detection), đánh dấu (facial landmarking), trích chọn
(rút) đặc trưng (feature extration), gán nhãn, phân lớp (classification) Trong thực tế, nhận dạng khuôn mặt người (Face Recognition) là một hướng nghiên cứu được nhiều nhà khoa
học quan tâm, nghiên cứu để ứng dụng trong thực tiễn Ở các trường đại học hàng đầu về Công Nghệ Thông Tin như Massachusetts Institute of Technology (MIT), Carnegie Mellon University (CMU), Standford, Berkeley và các công ty lớn như Microsoft, Apple,
Trang 4Google, Facebook đều có các trung tâm về sinh trắc học (Biometrics Center) và nghiên cứu về nhận dạng khuôn mặt người và nó đã trở thành một trong những lĩnh vực nghiên cứu chính cho đến nay
2 Mục đích của đề tài.
- Xây dựng một dự án phần mềm ứng dụng nhận dạng khuôn mặt và sử dụng cho việc điểm danh
- Tìm hiểu về xây dựng giao diện bằng pyQT5
- Tìm hiểu về thư viện OpenCV
- Tìm hiểu về thư viện face_recognition
- Phương pháp phát hiện khuôn mặt harr-casscade
- Sử dụng phương pháp trích xuất đặc trưng trong thư viện face_recognition
3 Đối tượng và phạm vi nghiên cứu.
a, Đối tượng
- Các phương pháp, thuật toán phục vụ cho việc phát hiện và nhận dạng khuôn mặt người trên ảnh
- Bộ thư viện xử lý ảnh OpenCV
- Bộ thư viện face_reconition
b, Phạm vi nghiên cứu:
- Tập trung tìm hiểu nhận dạng khuôn mặt (Face Recognition) chứ không chú trọng tìm hiểu phát hiện khuôn mặt (Face Detection).
- Việc xử lý ảnh, nhận dạng khuôn mặt thỏa mãn các điều kiện:
+ Ánh sáng bình thường
+ Góc ảnh: Trực diện (frontal).
+ Không bị che khuất (no occulusion).
+ Ảnh có chất lượng cao (high quality images).
Trang 5I BÀI TOÁN NHẬN DẠNG ĐỐI TƯỢNG BẰNG KHUÔN MẶT
1 Tổng quan và các khái niệm liên quan đến nhận dạng khuôn mặt.
1.1 Hệ thống sinh trắc học.
Hệ thống sinh trắc học là một hệ thống được thiết kế để xác minh và nhận dạng một người dựa vào những đặc trưng sinh học duy nhất của người đó
1.2 Hệ thống nhận dạng khuôn mặt.
Hệ thống nhận dạng mặt người là một hệ thống nhận vào là một ảnh hoặc một đoạn video (một dòng các hình ảnh liên tục) Qua xử lý, tính toán hệ thống xác định được vị trí mặt người (nếu có) trong ảnh và xác định là người nào trong số những người mà hệ thống
đã được biết (qua quá trình học) hoặc là người lạ
Hình 1 Hệ thống nhận dạng mặt người.
Trang 61.3 Hoạt động của hệ thông nhận diện khuôn mặt.
Hình 2 Hoạt động của hệ thống.
1.4 Những khó khăn của hệ thống nhận dạng khuôn mặt
Bài toán nhận dạng mặt người là bài toán đã được nghiên cứu từ những năm 70 Tuy nhiên, đây là một bài toán khó nên những nghiên cứu hiện tại vẫn chưa đạt được những kết quả mong muốn Chính vì thế, vấn đề này vẫn đang được nhiều nhóm trên thế giới quan tâm nghiên cứu Khó khăn của bài toán nhận dạng mặt người có thể kể đến như sau:
a Tư thế chụp, góc chụp: Ảnh chụp khuôn mặt có thể thay đổi rất nhiều bởi vì góc
chụp giữa camera và khuôn mặt Chẳng hạn như: chụp thẳng, chụp chéo bên trái 450 hay chụp chéo bên phải 450, chụp từ trên xuống, chụp từ dưới lên, v.v… Với các tư thế khác nhau, các thành phần trên khuôn mặt như mắt, mũi, miệng có thể bị khuất một phần hoặc thậm chí khuất hết
b Sự xuất hiện hoặc thiếu một số thành phần của khuôn mặt: Các đặc trưng như: râu
mép, râu hàm, mắt kính, v.v… có thể xuất hiện hoặc không Vấn đề này làm cho bài toán càng trở nên khó hơn rất nhiều
c Sự biểu cảm của khuôn mặt: Biểu cảm của khuôn mặt con người có thể làm ảnh
hưởng đáng kể lên các thông số của khuôn mặt Chẳng hạn, cùng một khuôn mặt một người, nhưng có thể sẽ rất khác khi họ cười hoặc sợ hãi, v.v…
Trang 7d Sự che khuất: Khuôn mặt có thể bị che khuất bởi các đối tượng khác hoặc các
khuôn mặt khác
e Hướng của ảnh (pose variations): Các ảnh khuôn mặt có thể biến đổi rất nhiều với
các góc quay khác nhau của trục camera Chẳng hạn chụp với trục máy ảnh nghiêng làm cho khuôn mặt bị nghiêng so với trục của ảnh
f Điều kiện của ảnh: Ảnh được chụp trong các điều kiện khác nhau về: chiếu sáng,
về tính chất camera (máy kỹ thuật số, máy hồng ngoại, v.v…), ảnh có chất lượng thấp ảnh hưởng rất nhiều đến chất lượng ảnh khuôn mặt
g Aging condition: Việc nhận dạng ảnh mặt thay đổi theo thời gian còn là một vấn
đề khó khăn, ngay cả đối với khả năng nhận dạng của con người
h Các hệ thống cực lớn (very large scale systems): Các CSDL ảnh mặt được test bởi
các nhà nghiên cứu còn khá nhỏ (vài trăm tới vài chục nghìn ảnh mặt), tuy nhiên trên thực
tế các CSDL có thể rất lớn, ví dụ CSDL ảnh mặt của cảnh sát của một đất nước có thể chứa từ hàng triệu tới hơn 1 tỉ ảnh
i Đối với hệ thống điểm danh còn cần tốc độ xử lý trên thời gian thực
2 Tổng quan kiến trúc của một hệ thống nhận dạng mặt người.
2.1 Tổng quan kiến trúc.
Một hệ thống nhận dạng mặt người thông thường bao gồm bốn bước xử lý sau:
1 Phát hiện khuôn mặt (Face Detection)
2 Căn chỉnh khuôn mặt (Face Alignmen)
3 Trích chọn đặc trưng (Feature Extraction)
4 Nhận dạng (Recognition) hay Phân lớp khuôn mặt (Face Clasaification)
Phát hiện khuôn mặt dò tìm, định vị những vùng (vị trí) có thể là khuôn mặt xuất hiện trong ảnh hoặc các frame video Các vùng này sẽ được tách riêng để xử lý Căn chỉnh khuôn mặt sẽ đưa khuôn mặt về cùng một góc và hướng để thuận tiện cho việc trích xuất đặc trưng và nhận diện Ở bước trích chọn đặc trưng, sử dụng thư viện
Trang 8face_recognition, thư viện sử dụng một mô hình deep leanring đã được huấn luyện sẵn với một bộ dữ liệu đủ lớn để trích xuất đặc trưng của khuôn mặt, đặc trưng khi trích xuất
sẽ có dạng một vector (feature vector) có kích thước 128x1 Những vecto đặc trưng này
sẽ là dữ liệu đầu vào cho một mô hình đã được huấn luyện trước để nhận dạng khuôn mặt (Face Recognition) hay phân lớp khuôn mặt (Face Classifition), tức là xác định danh tính (identity) hay nhãn của ảnh đó là ảnh của ai Ở bước nhận dạng khuôn mặt (Face Recognition), thường sẽ sử dụng một độ đo để so sánh sự sai khác giữa các vector đặc trưng và nhận dạng
Bên cạnh những bước chính nêu trên, chúng ta còn có thể áp dụng thêm một số bước khác như tiền xử lý, hậu xử lý nhằm làm tăng độ chính xác cho hệ thống Ví dụ, sau bước phát hiện khuôn mặt, ta có thể thực hiện bước tiền xử lý (Preprocessing) bao gồm các bước chuẩn hóa ánh sáng (illumination normalization)
Do một số thông số như: tư thế khuôn mặt, độ sáng, điều kiện ánh sáng, v.v… phát hiện khuôn mặt được đánh giá là bước khó khăn và quan trọng nhất so với các bước còn lại của hệ thống Tuy nhiên, trong phạm vi đồ án này, không tập trung tìm hiểu bước phát hiện khuôn mặtmà chỉ tập trung chủ yếu vào bước nhận dạng khuôn mặt
2.2 Ngôn ngữ lập trình.
Để giải quyết bài toán nhận dạng khuôn mặt sử dụng thư viện OpenCV, chúng ta có thể sử dụng các ngôn ngữ lập trình như: NET C#, VB, IronPython, Java, C++…Trong đồ
án này ngôn ngữ lập trình được sử dụng là Python, viết trên phần mềm Python
3 Hướng tiếp cận của đề tài:
- Do đề tài hướng đến việc xây dựng một hệ thống điểm danh nên yêu cầu hệ thống nhận diện phải được thực hiện trên thời gian thực
- Phương pháp phát hiện khuôn mặt, sử dụng haar-casscade trong thư viện opencv, phương pháp cho độ chính xác có thể chấp nhận được và tốc độ xử lý trong thời gian thực
- Trích xuất vùng khuôn mặt, căn chỉnh
- Phương pháp trích xuất đặc trưng, sử dụng thư viện face_recognition để trích xuất đặc trưng khuôn mặt
Trang 9- Phương pháp nhận diện, sử dụng độ đo sự tương đồng, so sánh sự tương đồng giữa 2 vetor đặc trưng và đưa ra kết luận
4 Tổng quan về các thư viện
4.1 Tổng quan về thư viện opencv
* Giới thiệu tổng quan về thư viện OPENCV
OpenCV (Open Source Computer Vision) là một thư viện mã nguồn mở về thị giác máy với hơn 500 hàm và hơn 2500 các thuật toán đã được tối ưu về XLA, và các vấn đề liên quan tới thị giác máy OpenCV được thiết kế một cách tối ưu, sử dụng tối đa mạnh của các dòng chip đa lõi… để thực hiện các phép tính toán trong thời gian thực, nghĩa là tốc độ đáp ứng của nó thể đủ nhanh cho các ứng dụng thông thường
OpenCV là thư viện được thiết kế để chạy trên nhiều nền tảng khác nhau (cross-platform), nghĩa là nó có thể chạy trên hệ điều hành Window, Linux, Mac, iOS… Việc
sử dụng thư viện OpenCV tuân theo các quy định về sử dụng phần mềm mã nguồn mở
BSD do đó bạn có thể sử dụng thư viện này một cách miễn phí cho các mục đích phi
thương mại lẫn thương mại
Dự án về OpenCV được khởi động từ những năm 1999, đến năm 2000 nó được
giới thiệu trong một hội nghị của IEEE về các vấn đề trong thị giác máy và nhận dạng,
tuy nhiên bản OpenCV 1.0 mãi tới tận năm 2006 mới chính thức được công bố và năm
2008 bản 1.1 (pre-release) mới được ra đời Tháng 10 năm 2009, bản OpenCV thế hệ thứ hai ra đời (thường gọi là phiên bản 2.x), phiên bản này có giao diện của C++ (khác với phiên bản trước có giao diện của C) và có nhiều điểm khác biệt so với phiên bản thứ nhất
Thư viện OpenCV ban đầu được sự hỗ trợ từ Intel, sau đó được hỗ trợ bởi Willow Garage, một phòng thí nghiệm chuyên nghiên cứu về công nghệ Robot Cho đến nay, OpenCV vẫn là thư viện mở, được phát triển bởi nguồn quỹ không lợi nhuận (none-profit foundation) và được sự hưởng ứng rất lớn của cộng đồng
Trang 10* Cấu trúc tổng quan.
Cấu trúc tổng quan của OpenCV bao gồm 5 phần chính Hình vẽ dưới đây, mô tả 4 trong 5 thành phần đó
Hình 3 Các thành phần của thư viện OpenCV.
Phần CV bao gồm các thư viện cơ bản về XLA và các giải thuật về thị giác máy tính MLL là bộ thư viện về các thuật toán học máy, bao gồm rất nhiều bộ phân cụm và phân loại thống kê HighGUI chứa đựng những thủ tục vào ra, các chức năng về lưu trữ cũng như đọc các file ảnh và video Phần thứ 4, Cxcore chứa đựng các cấu trúc dữ liệu cơ bản (ví dụ như cấu trúc XML, các cây dữ liệu…) Phần cuối cùng là CVAUX, phần này bao gồm cá thư viện cho việc phát hiện, theo dõi và nhận dạng đối tượng (khuôn mặt, mắt…)
4.2 Tổng quan về thư viện face_recognition
- Là thư viện được xây dựng từ thư viện dlib (one of the best deep learning model for face
recognition) Mô hình có độ chính xác lên đến 9938% trên tập dữ liệu labeled faces in the wild
- Thư viện cung cấp các giao diện lập trình cho người dùng có thể gọi từ python code
- Chúng em sử dụng thư viện face_recognition để trích xuất đặc trưng của ảnh khuôn mặt
Trang 114.3 Thư viện pyQT
- Là thư viện xây dựng giao diện ứng dụng được viết bằng ngôn ngữ python
5 Các thuật toán sử dụng:
5.1 Các đặc trưng Haar-Like
Các đặc trưng Haar-Like là những hình chữ nhật được phân thành các vùng khác nhau như hình:
Hình 4 Phân vùng các đặc trưng của thuật toán Haar-Like.
Đặc trưng do Viola và Jones công bố gồm 4 đặc trưng cơ bản để xác định khuôn mặt người 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:
Trang 12Hình 5 Đặc trưng cơ bản để xác định khuôn mặt người.
Để sử dụng các đặc trưng này vào việc xác định khuôn mặt người, 4 đặc trưng Haar-Like 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 feature)
Hình 6 Đặc trưng cạnh (edge feature).
- Đặc trưng đường (line feature)
Hình 7 Đặc trưng đường (line feature).
Trang 13- Đặc trưng xung quanh tâm (center-surround features)
Hình 8 Đặc trưng xung quanh tâm (center-surround feature).
Dùng các đặc trưng trên, ta có thể tính được cá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 vùng đen và vùng trắng như trong công thức sau:
Viola và Jones đưa ra một khái niệm gọi là Integral Image, là một mảng 2 chiều với kích thước bằng với kích thước của ảnh cần tính đặc trưng Haar-Like, với mỗi phần tử của mảng này được tính bằng cách tính tổng của điểm ảnh phía trên (dòng-1) và bên trái (cột-1) của nó
Hình 9 Công thức tính Intergral Image.
Trang 14Sau khi tính được Integral Image, việc tính tổng các giá trị mức xám của một vùng bất kỳ nào đó trên ảnh thực hiện rất đơn giản theo cách sau:
Giả sử ta cần tính tổng giá trị mức xám của vùng D như hình dưới, ta có thể tính được như sau: D = A + B + C + D - (A+B) - (A+C) + A
Với A + B + C + D chính là giá trị tại điểm P4 trên Integral Image, 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:
Hình 10 Tổng các giá trị mức xám ở điểm D.
5.2 Trích xuất đặc trưng:
- Thư viện face_recognition sử dụng deep learning để trích xuất đặc trưng khuôn mặt
- Mô hình được huấn luyện bằng tập dữ liệu labeled face in the wild và đạt được độ chính xác 99.38%
5.3: Nhận diện khuôn mặt:
- Sử dụng khoảng cách Euclidean để tính sự tương đồng giữa các vector đặc trưng trích
xuất được
- Sau đó đưa ra kết quả