Nhận diện khuôn mặt – P2: face recognition

Sau khi đã phát hiện được khuôn mặt chúng ta tiến hành nhận dạng (recognition).

Để nhận dạng ta sử dụng lib face, là lib được đóng góp bởi người dùng OpenCV. Trong lib face hỗ trợ 3 phương pháp nhận diện là Eigen, Fisher và LBPH. Các tham số đó tốt nhất là để trong file config để dễ dàng thay đổi mà không cần build lại.

Thuật toán

Nhận diện khuôn mặt là học có giám sát, tức là bạn phải dán nhãn cho ảnh khuôn mặt. Từ đó chương trình sẽ tìm ra sự khác biệt của các khuôn mặt rồi lưu lại model. Với model đã học chúng ta dùng để nhận diện khuôn mặt.

Cách mình làm như sau:
– Thu thập khuôn mặt, crop rồi lưu vào folder, mỗi người là mỗi folder
– Khi chạy chương trình thì training ảnh khuôn mặt
– Với mỗi khung hình tiến hành tìm kiếm khuôn mặt
– Nếu tìm thấy khuôn mặt thì nhận diện rồi in kết quả

Trong chương trình có viết sẵn hàm load/save model YAML của các khuôn mặt. Tuy nhiên mình không save model YAML vì các lý do:
– Load model YAML chậm hơn training
– Model YAML nặng hơn toàn bộ ảnh khuôn mặt
– Trong quá trình chạy sẽ có lúc cần training lại vì có khuôn mặt mới
– Để ảnh khuôn mặt ở dạng thô (*.png) sẽ dễ dàng lọc/loại bỏ bằng tay

Do đó mình chọn cách lưu ảnh chứ không lưu model

Source code

Trong repo có nhiều solution từ dễ đến khó, ở bài này các bạn build FaceRecognition_VS2015.sln
FaceDetection

Leave a Reply