我一直在努力寻找照片中的人物,并且在行人方面也取得了一些成功。但是,对于我的用例场景,我需要能够检测照片中的上半身/上半身(腰部向上)或头部。

我尝试了上身的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张测试图像。请注意,它是相同的图像,在某些级别上进行了裁剪。
  • 跪着
  • 腰部向上
  • 挺胸

  • 这是我得到的结果:
  • 跪着

  • python - OpenCV 3 Python-Haar级联上身检测器不能在半身(腰部)照片上工作吗?-LMLPHP
  • 腰部向上

  • python - OpenCV 3 Python-Haar级联上身检测器不能在半身(腰部)照片上工作吗?-LMLPHP
  • 挺胸

  • python - OpenCV 3 Python-Haar级联上身检测器不能在半身(腰部)照片上工作吗?-LMLPHP

    如您所见,“抬膝”和“抬胸”照片分别能够检测上身和头部区域。

    但是,即使可以看到上身和头部,腰部朝上的照片也没有返回任何结果。

    有谁知道这是怎么发生的或为什么发生的,以及如何使上身的检测更加一致?

    最佳答案

    如果要保持一致性,请不要使用haar级联。通常,这些模型旨在快速,轻巧,但是特别是在遮挡情况下,其检测精度很差。我的直觉是为什么该模型不起作用,因为该模型可能依赖于连接到上身的腿的特征来检测和定位上身。由于腿部阻塞,因此找不到上半身。
    为了保持一致性,我建议使用像OpenPose这样对遮挡更强的东西。然后,您可以使用主体关键点在感兴趣的区域周围绘制边界框。

    关于python - OpenCV 3 Python-Haar级联上身检测器不能在半身(腰部)照片上工作吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43158938/

    10-10 17:44