2014-05-09 21 views
2

그래서 얼굴을 추적하는 작은 스크립트를 작성한 다음 두 눈을 검색 한 다음 왼쪽 눈과 오른쪽 눈을 검색합니다.얼굴 검출 두 눈이 겹치다

왼쪽과 오른쪽이 모두 겹치는 문제는 문제입니다.

[SimpleCV.Features.Detection.HaarFeature at (61,67)] [SimpleCV.Features.Detection.HaarFeature at (60,65)] 

내가 face.boundingBox (twoeyes)와 함께 얼굴을 자르기하고 왼쪽과 오른쪽을 검색 시도했지만 항상 저를 제공합니다

findHaarFeatures Two eyes overlapping

i = Camera().getImage() 
face = i.findHaarFeatures("face.xml") 
if face != None: 
    face = face[0].boundingBox() 
    face = i.crop(face) 
    twoeyes = face.findHaarFeatures("two_eyes_big.xml") 
    if twoeyes != None: 
     righteye = face.findHaarFeatures('right_eye.xml') 
     lefteye = face.findHaarFeatures('lefteye.xml') 
     if righteye != None and lefteye != None: 
      print righteye,lefteye 
      righteye = righteye[0].draw() 
      lefteye = lefteye[0].draw() 
      face.show() 
인쇄는 것을 보여준다 (없음, 없음).

또한 findHaarFeatures ("face.xml")에 문제가 있습니다. 얼굴이 1 개 이상 나오면 목록의 첫 번째 픽을 선택하여이 문제를 극복 할 수 있지만 가장 큰 픽업을 선택하고 싶습니다. 두 가지 기능의 크기를 비교하려면 어떻게해야합니까?

마지막으로 자르기와 if 문 'something! = None'대신에 다른 내부의 기능을 찾는 더 좋은 방법이 있습니까?

Btw, 카메라의 원본 이미지를 사용하고 있습니다. 대비, 채도, 검색 결과 또는 기타 기능을 더 잘 찾아서 처리하는 것이 더 낫습니까?

답변

0

다음 코드는 얼굴 인 ROI (관심 영역)가 감소한 눈을 감지하는 데 유용합니다.

자르기 기술을 사용하여 ROI를 줄입니다.

img = Camera().getImage() 
face = img.findHaarFeatures("face.xml") 

    if face: #checks for non empty feature set 
     face = face.sortArea() #sorting all detected faces by area 
     face = face[-1] #picking the largest face 
     face = img.crop(face) #crops face from the image 

     leftEye = face.findHaarFeatures("lefteye.xml") 
     leftEye.draw() 

     rightEye = face.findHaarFeatures("right_eye.xml") 
     rightEye.draw() 
     face.show() 

오른쪽 눈과 왼쪽 눈을 모두 감지하면 결과가 겹치기 때문에 둘 다 결국 왼쪽 눈과 오른쪽 눈을 감지합니다.

이점을 이용하면 두 가지 결과의 평균을 취하여 한 쌍의 눈을 생성 할 수 있습니다.

나는 웹캠의 원본 비디오 스트림에서 위의 내용을 시도했지만 처리되지 않은 스트림의 경우 괜찮은 결과를 얻었습니다.