2013-03-18 222 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分类器,然后合并结果,我的运气更好。

在实践中,如果两个分类发现你可以将它们结合起来,并给予综合作用的结果更高的分数值类似的结果。

为了进一步提高检测效果,您还可以使用分类器来检测眼睛,鼻子和嘴巴。如果您在检测到的脸部中找到这些脸部,您还可以为这些脸部添加更多的值。

在过程中你可以得到的分数值检测到的面部的列表。得分越高,检测的可能性就越高。

希望这可能有所帮助。