面部检测两只眼睛重叠

时间:2014-05-09 20:40:29

标签: python simplecv haar-classifier eye-tracking

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

问题是,即使左右两侧都重叠。

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 Two eyes overlapping

印刷品显示:

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

我尝试使用face.boundingBox(两个眼睛)裁剪脸部,然后搜索左侧和右侧,但它总是给我(无,无)。

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

最后,有没有更好的方法来查找其他内部的功能,而不是使用裁剪和if-statement'某事!=无'?

顺便说一下,我使用相机的原始图像,最好是用对比度,饱和度,边缘或其他任何东西来处理它以更好地找到功能吗?

1 个答案:

答案 0 :(得分:0)

以下代码可用于检测眼睛中的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()

右眼和左眼的检测都会产生重叠的结果,因为它们都会检测到右眼和左眼。

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

我在网络摄像头的原始视频流中尝试了上述操作,但未经处理的视频流效果不错。