如何使用OpenCV检测和跟踪人员?

时间:2010-02-02 23:50:00

标签: python opencv computer-vision motion-detection

我有一个静止的相机,指向室内区域。人们将走过相机,距离它约5米。使用 OpenCV ,我想检测走过的人 - 我理想的回归是一组检测到的个体,带有边界矩形。

我查看了几个内置示例:

  • Python 示例中没有一个真正适用
  • C blob跟踪示例看起来很有前途,但不接受实时视频,这使测试变得困难。它也是最复杂的样本,使得提取相关知识并将其转换为Python API存在问题。
  • C 'motempl'样本也看起来很有前景,因为它会计算后续视频帧的轮廓。据推测,我可以使用它来查找强连接组件并提取单个blob及其边界框 - 但我仍然试图找出一种方法来识别后续帧中发现的blob为同一个blob。

是否有人能够为此做出指导或示例 - 最好是 Python

4 个答案:

答案 0 :(得分:27)

OpenCV的最新SVN版本包含基于HOG的行人检测的(未记录的)实现。它甚至配备了预先训练好的探测器和python包装。基本用法如下:

from cv import *

storage = CreateMemStorage(0)
img = LoadImage(file)  # or read from camera

found = list(HOGDetectMultiScale(img, storage, win_stride=(8,8),
                padding=(32,32), scale=1.05, group_threshold=2))

因此,您可以在每个帧中运行检测器,直接使用其输出,而不是跟踪。

有关实现的信息,请参阅src/cvaux/cvhog.cpp;有关更完整的python示例,请参阅samples/python/peopledetect.py

答案 1 :(得分:5)

尼克,

您正在寻找的不是人物检测,而是运动检测。如果您告诉我们更多关于您要解决/做的事情,我们可以更好地回答。 无论如何,根据您对结果的处理方式,有很多方法可以进行运动检测。最简单的是差分,然后是阈值处理,而复杂的可以是适当的背景建模 - >前景减法 - >形态学操作 - >连通成分分析,然后根据需要进行blob分析。下载opencv代码并查看samples目录。你可能会看到你在寻找什么。此外,有一本关于OCV的Oreilly书。

希望这有帮助, Nand

答案 2 :(得分:4)

这显然是一项非常重要的任务。你必须从科学出版物中寻找灵感(Google Scholar是你的朋友)。这是一篇关于人体检测和跟踪的论文:Human tracking by fast mean shift mode seeking

答案 3 :(得分:2)

这类似于我们作为计算机视觉课程的一部分所做的项目,我现在可以告诉你,要做到正确是一个难题。

您可以使用前景/背景分割,查找所有斑点,然后确定它们是一个人。问题是它不会很好地工作,因为人们往往会一起走过,走过彼此等等,所以一个blob很可能由两个人组成,然后你会看到blob在他们走过时分裂和合并。

你需要一些方法来区分一个blob中的多个人。这不是一个问题,我希望有人能够在一个SO帖子中回答。

我的建议是深入研究可用的研究,看看你是否能在那里找到任何东西。考虑到存在这样的产品,问题并非无法解决:Autoliv有一种产品可以使用汽车上的红外摄像头检测行人,我看到其他产品涉及计算客户进出商店的数量。