所以我制作了一个跟踪脸部的小脚本,然后搜索两只眼睛,然后是左眼和右眼。
问题是,即使左右两侧都重叠。
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()
印刷品显示:
[SimpleCV.Features.Detection.HaarFeature at (61,67)] [SimpleCV.Features.Detection.HaarFeature at (60,65)]
我尝试使用face.boundingBox(两个眼睛)裁剪脸部,然后搜索左侧和右侧,但它总是给我(无,无)。
此外,我遇到了findHaarFeatures(" face.xml")的问题,当它给了我超过1张脸时,我通过选择列表中的第一个来克服这个问题,但是我我想选择其中最大的一个,我怎样才能比较两个功能的大小?
最后,有没有更好的方法来查找其他内部的功能,而不是使用裁剪和if-statement'某事!=无'?
顺便说一下,我使用相机的原始图像,最好是用对比度,饱和度,边缘或其他任何东西来处理它以更好地找到功能吗?
答案 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()
右眼和左眼的检测都会产生重叠的结果,因为它们都会检测到右眼和左眼。
为了利用这个优势,你可以取两个结果的平均值来产生一对眼睛。
我在网络摄像头的原始视频流中尝试了上述操作,但未经处理的视频流效果不错。