我一直在努力寻找照片中的人物,并且在行人方面也取得了一些成功。但是,对于我的用例场景,我需要能够检测照片中的上半身/上半身(腰部向上)或头部。
我尝试了上身的haar级联。这是我使用的代码:
import numpy as np
import cv2
img = cv2.imread('/path/to/img.jpg',0)
upperBody_cascade = cv2.CascadeClassifier('path/to/haarcascade_upperbody.xml')
arrUpperBody = upperBody_cascade.detectMultiScale(img)
if arrUpperBody != ():
for (x,y,w,h) in arrUpperBody:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
print 'body found'
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
我使用了3张测试图像。请注意,它是相同的图像,在某些级别上进行了裁剪。
这是我得到的结果:
如您所见,“抬膝”和“抬胸”照片分别能够检测上身和头部区域。
但是,即使可以看到上身和头部,腰部朝上的照片也没有返回任何结果。
有谁知道这是怎么发生的或为什么发生的,以及如何使上身的检测更加一致?
最佳答案
如果要保持一致性,请不要使用haar级联。通常,这些模型旨在快速,轻巧,但是特别是在遮挡情况下,其检测精度很差。我的直觉是为什么该模型不起作用,因为该模型可能依赖于连接到上身的腿的特征来检测和定位上身。由于腿部阻塞,因此找不到上半身。
为了保持一致性,我建议使用像OpenPose这样对遮挡更强的东西。然后,您可以使用主体关键点在感兴趣的区域周围绘制边界框。
关于python - OpenCV 3 Python-Haar级联上身检测器不能在半身(腰部)照片上工作吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43158938/