Zbudowałem system wykrywania twarzy, aby zrobić coś takiego raz przy użyciu OpenCV, można zobaczyć wynik here.
Metodą, którą wówczas stosowałem, były dwa osobne zastosowania haarTraining ze standardowym wbudowanym klasyfikatorem OpenCV. Użyłem klasyfikatora o nazwie haarcascade_frontalface_default.xml, aby sprawdzić, czy użytkownik ogląda ekran i haarcascade_profileface.xml, aby sprawdzić, czy użytkownik nie patrzy. Poniższy kod powinien zacząć korzystać z openCV i 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
}
Niestety, nie wydaje się być gotowy do mac. Z pewnością mógłbym zacząć pracować z systemem iOS, ale najlepiej chciałbym tego uniknąć. –
, ale wygląda na to, że rejestruje dokładnie to, czego potrzebuję. –
Możesz zajrzeć do kodu, aby znaleźć to, czego potrzebujesz. Kod jest nieco zagmatwany (rodzaj oprogramowania Frankenstein), ale powinien działać z iOS przy niewielkiej ilości pracy. –