Sau khi ta đã thu thập đủ khuôn mặt cho mỗi người cần nhận dạng, thì ta phải tiến hành huấn luyện hệ thống để nó học dữ liệu bằng cách dùng thuật toán máy học tập phù hợp với việc nhận dạng khuôn mặt.
Có rất nhiều các thuật toán nhận dạng khuôn mặt khác nhau, nhưng đơn giản nhất là Eigenfaces và mạng noron nhân tạo. Eigenfaces có xu hướng thực hiện tốt hơn so với ANNs, và mặc dù nó đơn giản hơn, và nó có hoạt động của nó cũng gần giống như nhiều thuật toán nhận dạng khuôn mặt phức tạp khác, do đó, thuật toán này đã trở nên rất phổ biến như các thuật toán nhận dạng khuôn mặt cơ bản cho người mới bắt đầu cũng như dùng để so sánh với các thuật toán nhận dạng mới. Dưới đây là ba thuật toán nhận dạng khuôn mặt có thể thực hiện với OpenCV v2.4.8:
FaceRecognizer.Eigenfaces: Eigenfaces, còn được gọi là PCA, được sử dụng đầu tiên bởi Turk và Pentland vào năm 1991.
FaceRecognizer.Fisherfaces: Fisherfaces, còn được gọi là LDA, do Belhumeur, Hespanha và Kriegman phát minh vào năm 1997.
FaceRecognizer.LBPH: mô hình histogram nhị phân cục bộ, phát minh bởi Ahonen, Hadid và Pietikäinen vào năm 2004.
Các thuật toán nhận dạng khuôn mặt có lớp FaceRecognizer ở module contrib của OpenCV. Vì vậy, ta nên gọi hàm cv::initModule_contrib()
trước khi truy cập vào thuật toán nhận dạng khuôn mặt FaceRecognizer.
Để sử dụng một trong các thuật toán nhận dạng khuôn mặt, ta phải tạo ra một đối tượng FaceRecognizer bằng cách sử dụng hàm
Trang 82
Một khi ta đã nạp thuật toán nhận dạng khuôn mặt lên thì ta có thể dễ dàng gọi hàm huấn luyện FaceRecognizer::train() cho tập các khuôn mặt đã
thu thập trước đó:
Nếu ta chỉ có một vài người với ít hơn 20 khuôn mặt, thì khi đó việc huấn luyện này sẽ được thực hiện rất nhanh chóng, nhưng nếu ta có nhiều người hơn với nhiều khuôn mặt hơn, thì hàm train() có thể sẽ mất vài giây hoặc thậm chí vài phút để xử lý tất cả các dữ liệu.
3.1.5 Nhận dạng khuôn mặt
Nhờ có lớp FaceRecognizer của OpenCV, ta có thể xác định được người nào trong ảnh chỉ đơn giản bằng cách gọi hàm FaceRecognizer::predict()
trên một ảnh khuôn mặt như sau:
Giá trị identity này chính là con số đánh nhãn mà ban đầu ta sử dụng khi thu thập khuôn mặt cho việc huấn luyện. Ví dụ, 0 cho người đầu tiên, 1 cho người thứ hai, vv…
Vấn đề đối với con số nhận dạng này là đầu ra của nó luôn là con số, mặc dù ngay cả khi đầu vào là ảnh của một người chưa biết hoặc là ảnh của một chiếc xe. Nó sẽ cho ta biết rằng người nào là người có khả năng nhất trong bức ảnh đó, Vì vậy ta rất khó tin được kết quả này. Giải pháp là ta phải có một con số đánh giá độ tin cậy của kết quả thu được từ việc nhận dạng. nếu kết quả có độ tin cậy thấp thì khi đó ta quyết định rằng đó là người chưa biết.
Trang 83