Ho costruito un sistema di rilevamento del volto per fare qualcosa del genere una volta utilizzando OpenCV, è possibile vedere il risultato here.
Il metodo che ho utilizzato è stato due usi separati di haarTraining con lo standard incorporato nei classificatori OpenCV. Ho usato il classificatore chiamato haarcascade_frontalface_default.xml per vedere se un utente sta guardando lo schermo e haarcascade_profileface.xml per vedere se l'utente stava guardando altrove. Il seguente codice dovrebbe iniziare a utilizzare openCV e 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
}
fonte
2012-05-30 07:57:34
sfortunatamente, questo non sembra essere pronto per mac. Certo, potrei provare a lavorare su iOS, ma idealmente vorrei evitarlo. –
ma cerca di registrare esattamente ciò di cui ho bisogno. –
Puoi cercare nel codice ciò di cui hai bisogno. Il codice è un po 'confuso (una sorta di software Frankenstein), ma dovrebbe funzionare con iOS con un po' di lavoro. –