使用opencv和python进行人脸检测的准确性

时间:2013-03-18 17:10:50

标签: python opencv

我最近开始学习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...")

1 个答案:

答案 0 :(得分:1)

通过使用随OpenCV提供的不同haarcascades分类器多次运行算法,然后将结果组合,我运气好了。

在实践中,如果两个分类器找到相似的结果,您可以将它们组合起来,并为组合结果提供更高的分数值。

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

在此过程中,您可以获得具有分数值的检测到的面部列表。分数越高,检测的可能性就越大。

希望这可能会有所帮助。