Hướng dẫn viết code nhận diện mặt người qua camera năm 2024
Nhận diện khuôn mặt có rất nhiều ứng dụng hay như chấm công tự động, theo dõi hành vi... Trong bài này chúng ta sẽ đi nhận diện khuôn mặt trong ảnh và video với OpenCV, Python và Deep Learning (thư viện chính là Show Thư viện Thư viện
Nên nhớ ở đây chúng ta sử dụng lại pre-trained model - tạo ra embedding 128 dimensions chứ không training lại từ đầu (model này đã được train với rất nhiều ảnh rồi). Bố cục chungProject sẽ có một số thư mục như sau:
Bước 1. Tạo datasetỞ đây chúng ta sử dụng Chú ý: Mỗi ảnh nên chỉ chứa duy nhất 1 khuôn mặt của người đó (nếu có các khuôn mặt của nhiều người, phần implementation bên dưới sẽ phức tạp hơn vì đôi khi phải xác định thêm ai trong bức ảnh) Ở đây dataset được tạo thông qua webcam. Đưa mặt người đến gần, xa webcam, với các tư thế, biểu cảm khác nhau. Chạy file Ngoài việc tạo dataset thông qua webcam, chúng ta có thể tạo dataset thủ công hoặc sử dụng Search API như Bing hay Google. Sau khi dataset được tạo với Bước 2. Tạo encodings cho các khuôn mặt trong datasetSau khi tạo xong dataset chúng ta sẽ đi tạo các encodings (hay embeddings) của các khuôn mặt trong dataset đó. Việc đầu tiên cần làm là đi trích xuất các face ROIs (tránh sử dụng hết cả ảnh vì sẽ có nhiều nhiễu background ảnh hưởng đến chất lượng mô hình). Để phát hiện và trích xuất khuôn mặt có thể sử dụng nhiều phương pháp như haar cascades, HOG + Linear SVM, Deep Learning-bases face detector... Khi có các face ROIs chúng ta sẽ đưa chúng qua mạng NN để lấy các encodings. Tạo encoding từ ảnh khuôn mặt Ở đây chúng ta không training lại từ đầu mạng tạo encodings mà sử dụng lại pre-trained model (trong thư viện Trong phần này file `face_recognition`0 được chạy để lưu các encodings và names (nếu cần ID thì bổ sung). Các bạn xem thêm file đó để hiểu hơn, mình có chú thích rất rõ từng phần. Các encodings và names được lưu ra file `dlib`5. Bước 3. Nhận dạng khuôn mặt trong ảnhẢnh đầu ra sau khi nhận diện Sau khi chúng ta đã có các encodings từ datasets (lấy được qua pre-trained model, thông qua dlib và face_recognition) chúng ta có thể bắt đầu thực hiện face recognition được rồi. Chạy file `dlib`6 để nhận diện khuôn mặt trong ảnh, đối với video thì các bạn chạy file`dlib`7. Chú ý nếu muốn chạy face recognition trên CPU hay các thiết bị nhúng như Raspberry thì chọn detection method là `dlib`8 ở file `dlib`6, còn ban đầu khi lấy encodings từ dataset chúng ta vẫn có thể để `face_recognition`0 (chạy lâu hơn nhưng chính xác hơn để phát hiện khuôn mặt). Phần implementaion khá dài, các bạn có thể xem thêm tại Github-huytranvan2010. Nếu thấy hữu ích hãy nhấn * cho github của mình và upvote bài viết này. Kết luậnNhư vậy chúng ta đã thực hiện nhận diện khuôn mặt với OpenCV và Deep Learning. Đây là những phần cơ bản để xây dựng hệ thống chấm công dựa trên nhận diện khuôn mặt. Kết hợp với một số kỹ thuật và công cụ khác như phát hiện người thật (so với ảnh)... chúng ta hoàn toàn có thể xây dựng hệ thống chấm công đơn giản cho riêng mình được. |