使用 OpenCV+Python-2.7 进行全身检测和跟踪

Posted

技术标签:

【中文标题】使用 OpenCV+Python-2.7 进行全身检测和跟踪【英文标题】:Full body detection and tracking using OpenCV+Python-2.7 【发布时间】:2016-04-24 14:26:47 【问题描述】:

有很多材料可以用 C++ 做到这一点。我想知道是否有办法在 Python-2.7 中使用 OpenCV 进行全身检测?

给定一个人沿着矢状面行走的视频(相机从行走方向拍摄 90 度),我想界定一个覆盖该人整个身体的感兴趣区域矩形,并在运动帧中通过框架。

【问题讨论】:

要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于 Stack Overflow 来说是无关紧要的,因为它们往往会吸引固执己见的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。 @M4rtini:感谢您提供的信息;我已经添加了详细信息。我正在为这个问题寻找一个可行的解决方案,而不是学习材料。 必须尝试使用​​ haar 级联检测它??有用于全身检测的 haar 级联github.com/Itseez/opencv/blob/master/data/haarcascades/… @ArijitMukherjee:这正是我遇到的问题。我只是认为有人可能已经解决了这个问题,或者没有它有一个更简单的解决方案。 你到底遇到了什么麻烦? 【参考方案1】:

这个使用的是 hog 描述符,你可以在 samples/python/peopledetect.py 中找到示例。我使用了 opencv 安装提供的示例视频。

import numpy as np
import cv2


def inside(r, q):
    rx, ry, rw, rh = r
    qx, qy, qw, qh = q
    return rx > qx and ry > qy and rx + rw < qx + qw and ry + rh < qy + qh


def draw_detections(img, rects, thickness = 1):
    for x, y, w, h in rects:
        # the HOG detector returns slightly larger rectangles than the real objects.
        # so we slightly shrink the rectangles to get a nicer output.
        pad_w, pad_h = int(0.15*w), int(0.05*h)
        cv2.rectangle(img, (x+pad_w, y+pad_h), (x+w-pad_w, y+h-pad_h), (0, 255, 0), thickness)


if __name__ == '__main__':

    hog = cv2.HOGDescriptor()
    hog.setSVMDetector( cv2.HOGDescriptor_getDefaultPeopleDetector() )
    cap=cv2.VideoCapture('vid.avi')
    while True:
        _,frame=cap.read()
        found,w=hog.detectMultiScale(frame, winStride=(8,8), padding=(32,32), scale=1.05)
        draw_detections(frame,found)
        cv2.imshow('feed',frame)
        ch = 0xFF & cv2.waitKey(1)
        if ch == 27:
            break
    cv2.destroyAllWindows()

结果

不太好。还是试试看

【讨论】:

你做到了!它就像我的约束视频的魅力。我看到你已经实现了梯度直方图。您能否提供任何链接,以便我了解更多您的代码? 它在 opencv python 的样本中。 HOG 是一个特征描述符 en.wikipedia.org/wiki/Histogram_of_oriented_gradients 基本上这些东西是 opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/… 的更复杂版本。在这里,他们对手写数字的手写识别做同样的事情,而这里的对象更复杂。您可以在 google 上搜索更多关于 HoG 描述符和 SVM 的信息 函数inside用于判断矩形r是否在矩形q内。有一种称为 []non-maxima suppressing](pyimagesearch.com/2014/11/17/…) 的算法来解决需要多个重叠边界框并将它们减少到仅单个边界框的问题。 我们如何提高准确性?在我的视频中,它也检测到手和下半身

以上是关于使用 OpenCV+Python-2.7 进行全身检测和跟踪的主要内容,如果未能解决你的问题,请参考以下文章

使用 OpenCV 和 C++ 进行全身检测

Python OpenCV:Python 2.7 到 Python 3.5 之间的 VideoCapture 差异

在 MAC 上为 python 2.7 安装 opencv

有没有人在 MacOS 10.6 上使用过 OpenCV 与 Python 2.7 一起工作?

无法在 Windows 7 机器中使用 OpenCV 2.4.3、Python 2.7 打开“.mp4”视频文件

Python 2.7 Opencv 错误,ImportError: DLL load failed: 找不到指定的模块