2013-03-18 3 views
2

저는 최근에 opencv를 배우기 시작했으며 python으로 이미지의 얼굴을 탐지하고 감지 된 모든 얼굴을 별도의 이미지로 저장하는 프로그램을 작성했습니다. 일부 이미지에서는 제대로 작동하지만 많은 이미지에서 모든 얼굴을 감지하지 못합니다.opencv와 python을 사용한 얼굴 검출 정확도

심지어이 (http://imgur.com/HUh3tIK) 간단한 이미지에서 실패합니다. 오른쪽 면만 감지하고 왼쪽면은 감지하지 못합니다. 정확도를 높이려면이 문제를 해결하는 방법을 도와주세요.

import cv2.cv as cv 
import string 
im = cv.LoadImageM("D:\Test\Dia.jpg") 
storage = cv.CreateMemStorage() 
haar=cv.Load("C:\opencv\data\haarcascades\haarcascade_frontalface_default.xml") 
detected = cv.HaarDetectObjects(im, haar, storage, 1.1, 2,cv.CV_HAAR_DO_CANNY_PRUNING,(10,10)) 
i = 0 
if detected: 
    for face in detected: 
     i = i + 1 
     xx = face[0][0] 
     yy = face[0][1] 
     width = face[0][2] 
     height = face[0][3] 

     pankaj12 = (width,height) 
     cvIm = cv.LoadImage("D:\Test\Dia.jpg") 

     cropped = cv.CreateImage(pankaj12,cvIm.depth, cvIm.nChannels) 
     src_region = cv.GetSubRect(cvIm, face[0]) 
     cv.Copy(src_region, cropped) 
     cv.SaveImage("D:\Test\Pankaj"+str(i)+".jpg",cropped) 

input("Press Enter to continue...") 
+0

"haarcascade_frontalface_default.xml"은 데모 트레이닝 세트 일뿐입니다. –

+0

haarcascade_frontalface_default.xml 이상입니다. _alt 계곡이 나를 위해 더 좋게 작동했습니다 – berak

+0

나는 모든 얼굴 haarascade xml을 이미 시도했지만 아무도 나를 위해 잘 작동하지 않습니다. 간단한 얼굴 사진조차 모두 실패합니다. –

답변

1

OpenCV와 함께 제공되는 다양한 haarcascades 분류기를 사용하여 알고리즘을 여러 번 실행 한 다음 결과를 결합하여 운이 좋았습니다.

실제로 2 명의 분류기가 비슷한 결과를 발견하면이를 조합하여 더 높은 점수 값을 얻을 수 있습니다.

검색을 더욱 향상 시키려면 분류기를 사용하여 눈, 코 및 입을 감지 할 수도 있습니다. 감지 된 얼굴 안에있는 것을 발견하면 그 얼굴에 더 많은 가치를 추가 할 수도 있습니다.

과정에서 점수 값이있는 감지 된 얼굴 목록을 얻을 수 있습니다. 점수가 높을수록 정확한 검색 결과가됩니다.

희망이 도움이 될 수 있습니다.