OpenCV를 사용하여 한 번 이런 식으로 얼굴을 감지하는 시스템을 만들었으므로 결과는 here입니다.
내가 사용한 방법은 OpenCV 분류기에 내장 된 표준을 사용하여 haarTraining을 두 번 사용하는 것입니다. haarcascade_frontalface_default.xml이라는 분류자를 사용하여 사용자가 화면을보고 있는지 확인하고 haarcascade_profileface.xml을 사용하여 사용자가 멀리보고 있는지 확인합니다. 다음 코드는 openCV 및 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
}
불행히도, 이것은 Mac에 대한 준비가되지 않은 것으로 보입니다. 물론 iOS에서 작동하도록 할 수는 있지만 이상적으로는 이것을 피하고 싶습니다. –
하지만 내가 필요한 것을 정확히 기록하려고합니다. –
필요한 코드를 살펴볼 수 있습니다. 이 코드는 다소 혼란 스럽지만 (일종의 프랑켄슈타인 소프트웨어) 약간의 작업으로 iOS에서 작동해야합니다. –