2

所以我做了一个跟踪脸部的小脚本,然后搜索两只眼睛,然后搜索左眼和右眼。

问题是,即使是左右,它也会重叠。

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 两只眼睛重叠

打印显示:

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

我尝试用 face.boundingBox(twoeyes) 裁剪脸部,他们搜索左右,但它总是给我(无,无)。

另外,当 findHaarFeatures("face.xml") 给我超过 1 张脸时,我遇到了问题,我通过选择列表中的第一个来克服这个问题,但我想选择其中最大的,如何我可以比较两个功能的大小吗?

最后,有没有更好的方法来查找其他内部的特征,而不是使用裁剪和 if 语句“某事!=无”?

顺便说一句,我正在使用来自相机的原始图像,用一些对比度、饱和度、findedges 或其他任何东西来更好地找到特征会更好吗?

4

1 回答 1

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()

右眼和左眼的检测都给出了重叠的结果,因为两者最终都检测到了右眼和左眼。

为了利用这一点,您可以取两个结果的平均值来产生一对眼睛。

我已经在来自网络摄像头的原始视频流中尝试了上述方法,它在未经处理的流中产生了不错的结果。

于 2014-08-14T20:38:20.177 回答