Phát hiện khuôn mặt (detect) là bước đầu tiên của bài toán nhận diện khuôn mặt (recognize). Về nguyên lý thì phát hiện khuôn mặt giống như phát hiện bất kỳ đối tượng nào trong ảnh. Do vấn đề này đã được nghiên cứu và ứng dụng quá nhiều nên chúng ta không nên huấn luyện lại mà nên sử dụng file xml đã được huấn luyện sẵn.
Nếu bạn muốn tự tay huấn luyện lại mô hình phát hiện khuôn mặt thì đọc bài: Retrain face cascade model. Các file xml khuôn mặt được cung cấp sẵn trong OpenCV được huấn luyện từ hình ảnh khuôn mặt người phương Tây, nếu bạn thấy không nhận diện đúng khuôn mặt của người Việt Nam thì các bạn có thể huấn luyện lại. Riêng bản thân tôi thấy các file xml đã làm tốt việc phát hiện khuôn mặt người Việt Nam.
Bài này giới thiệu chương trình chỉ phát hiện khuôn mặt, tức là xác định vị trí khuôn mặt trong ảnh. Phần nhận diện khuôn mặt sẽ giới thiệu trong 1 bài khác sau khi đã hiểu rõ về phát hiện.
Chương trình này load data xml khuôn mặt, sau đó detect trên ảnh/video/camera. Viết bằng Visual C++ 11 sử dụng thư viện Opencv.
Lý thuyết
Cũng như các ứng dụng thị giác máy tính khác, nhận diện khuôn mặt cũng có 3 bước
– 1. Tiền xử lý ảnh: trích xuất ảnh từ video, webcam. Sau đó biến đổi thành ảnh xám (gray)
– 2. Tìm khuôn mặt trong ảnh xem có khuôn mặt trong ảnh không? Nếu có thì có bao nhiêu khuôn mặt? Sau đó crop để qua bước 3
– 3. Nhận diện khuôn mặt và trả về kết quả. Có thể vẽ hình vuông bao lấy khuôn mặt hoặc vẽ text tên người
Bài viết này chỉ tập trung vào bước 1-2, bước 3 có thể đọc bài
Giới thiệu về Cascade model
Đặc trưng haar-like là tập hợp những đặc trưng đường ngang, đường dọc, đường chéo,… của một đối tượng. Các đặc trưng này được lưu trong 1 file xml, dựa vào file này mà có thể biết được ảnh có chứa đối tượng cần tìm hay không.
Ngoài HAAR ra thì có đặc trung LBP và HOG cũng được áp dụng cho nhận diện hình ảnh.
OpenCV cung cấp sẵn các model như lbpcascade_frontalface.xml để phát hiện khuôn mặt. Các bạn tải file này về rồi dùng tool Cascade analytics để thử.
Các bước của chương trình
Đầu tiên chương trình load các file cascade model được chỉ định file config.ini. Nếu load cascade thành công thì load file video cũng được chỉ định trong config.ini.
Sau đó tiến hành tách ra từng frame rồi detect khuôn mặt, nếu có khuôn mặt thì vẽ hình vuông lên trên khuôn mặt.
Source code
Không gì hiệu quả bằng ví dụ mẫu, bên dưới là source code Face detection viết bằng C++. Compile bằng Visual Studio 2015 Community, các tham số nằm trong file bin\config.ini
Tuy nhiên trong repo có nhiều project khác nhau, các bạn chỉ cần build FaceDetection_VS2015.sln để tìm hiểu. Trong source code đã có kèm 1 video để demo, chỉ cần build xong là chương trình có thể demo lập tức.
Chào bạn, mình chạy chương trình thì bị lỗi.Và khi mình chạy demo có sẵn của opencv về nhận diện khuôn mặt nó cũng bị lỗi và mình đã tìm kiếm và không biết lỗi này là gì.Bạn có thể giúp mình được không
Bạn copy mã lỗi lên đây mình xem giùm cho
Lỗi đây, bạn xem giùm mình nhé.
https://i.imgur.com/Po8V9q5.png
Lỗi này do bạn cài thiếu Visual C++ 2013
https://www.microsoft.com/en-us/download/details.aspx?id=40784
Thế sao mình có visual studio 2015 rồi mà vẫn phải cài 2013 vậy.Bạn giải thích giùm mình với.
vì các file dll của opencv build sẵn yêu cầu C++ 2013, bạn dùng opencv 3.2 sẽ không bị lỗi đó
Bạn xem dùng mình, mình đang dùng visual studio 2015,openCV 3.1
Đây là code https://ibb.co/nCBw9a
Còn đây là lỗi https://ibb.co/icQpUa
Cảm ơn bạn đã giúp đỡ.
Ad cho minh hỏi, báo lỗi error: ..\..\..\..\opencv\modules\imgproc\src\color.cpp:3739: error: (-215) scn == 3 || scn == 4 in function cv::cvtColor thì phải giải quyết như thế nào??? cảm ơn bạn
bạn xem lại đường dẫn đến ảnh, thay bằng đường dẫn tuyệt đối thử xem. Nếu không hết thì comment đoạn code lên mình xem cho
em không debug được chương trình này của anh ạ, em bị lỗi “……..is not a valid Win32 application”. em sử dụng Visual 2017 và OpenCV 3.4.1 ạ. em mới bắt đầu mong anh chỉ giúp ạ
nếu viết một project mới dùng code của anh thì add các thư viện ntn ạ? vì em thấy rất nhiều tệp thư viện với tên TGMT ạ
Bạn vào group này đặt câu hỏi kèm theo ảnh chụp mã lỗi nhé: https://www.facebook.com/groups/thigiacmaytinh/