Tôi đã xây dựng một hệ thống phát hiện khuôn mặt để làm điều gì đó như thế này khi sử dụng OpenCV, bạn có thể xem kết quả here.
Phương pháp tôi đã sử dụng sau đó là hai cách sử dụng riêng biệt của haarTraining với tiêu chuẩn được xây dựng trong bộ phân loại OpenCV. Tôi đã sử dụng trình phân loại được gọi là haarcascade_frontalface_default.xml để xem liệu người dùng có đang xem màn hình và haarcascade_profileface.xml để xem liệu người dùng có đang tìm kiếm không. Đoạn mã sau sẽ giúp bạn bắt đầu sử dụng openCV và C++.
CvHaarClassifierCascade *cascade_face;
CvMemStorage *storage_face;
CvHaarClassifierCascade *cascade_profile;
CvMemStorage *storage_profile;
//profile face
storage_profile = cvCreateMemStorage(0);
cascade_profile = (CvHaarClassifierCascade*)cvLoad("haarcascade_profileface.xml", 0, 0, 0);
cvHaarDetectObjects(frm, cascade_profile, storage_profile, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING);
//frontal face
storage_face = cvCreateMemStorage(0);
cascade_face = (CvHaarClassifierCascade*)cvLoad("haarcascade_frontalface_default.xml", 0, 0, 0);
cvHaarDetectObjects(frm, cascade_face, storage_face, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING);
//detect profiles
CvSeq *profile = cvHaarDetectObjects(img,cascade_profile, storage_profile, 1.1,3,0,cvSize(20, 20));
for(i = 0 ; i < (profile ? profile->total : 0) ; i++) {
CvRect *r = (CvRect*)cvGetSeqElem(profile, i);
//draw rectangle here, or do other stuff
}
//detect front
CvSeq *faces = cvHaarDetectObjects(img,cascade_face, storage_face, 1.1,3,0,cvSize(20,20));
for(i = 0 ; i < (faces ? faces->total : 0) ; i++) {
CvRect *r = (CvRect*)cvGetSeqElem(faces, i);
//draw rectangle here, or do other stuff
}
Nguồn
2012-05-30 07:57:34
thật không may, điều này dường như không sẵn sàng cho mac. Chắc chắn có thể có một đi tại nhận được để làm việc trên iOS nhưng lý tưởng tôi muốn tránh điều này. –
nhưng nó nhìn để ghi lại chính xác những gì tôi cần. –
Bạn có thể xem mã cho những gì bạn cần. Mã của nó hơi khó hiểu (một loại phần mềm Frankenstein) nhưng nên làm việc với iOS với một chút công việc. –