2013-03-18 59 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'只是一個演示訓練集。 – 2013-03-18 17:13:45

+0

還有haarcascade_frontalface_default.xml,比如_alt級聯對我來說效果更好 – berak 2013-03-18 18:12:07

+0

我已經嘗試了所有的面部haarcascade xml,沒有一個對我很好。即使是簡單的臉部照片,他們都會失敗。 – 2013-03-19 11:55:30

回答

1

通過運用算法多次使用OpenCV提供的不同haarcascades分類器,然後合併結果,我的運氣更好。

在實踐中,如果兩個分類發現你可以將它們結合起來,並給予綜合作用的結果更高的分數值類似的結果。

爲了進一步提高檢測效果,您還可以使用分類器來檢測眼睛,鼻子和嘴巴。如果您在檢測到的臉部中找到這些臉部,您還可以爲這些臉部添加更多的值。

在過程中你可以得到的分數值檢測到的面部的列表。得分越高,檢測的可能性就越高。

希望這可能有所幫助。