36

我有一台静止的相机,指向室内区域。人们会在距离它约 5 米的范围内经过摄像头。使用OpenCV,我想检测走过的人 - 我理想的回报是检测到的个人数组,带有边界矩形。

我查看了几个内置示例:

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

是否有人能够为此提供指导或示例 - 最好是在Python中?

4

4 回答 4

28

最新的 SVN 版本的 OpenCV 包含基于 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实现和samples/python/peopledetect.py更完整的 python 示例(均在 OpenCV 源代码中),请参阅。

于 2010-02-20T00:16:52.490 回答
5

缺口,

您正在寻找的不是人员检测,而是运动检测。如果您告诉我们更多有关您要解决/做什么的信息,我们可以更好地回答。无论如何,有很多方法可以进行运动检测,具体取决于您要对结果做什么。最简单的一种是差分,然后是阈值,而复杂的一种可能是适当的背景建模 -> 前景减法 -> 形态学操作 -> 连通分量分析,如果需要,然后进行斑点分析。下载 opencv 代码并查看示例目录。您可能会看到您正在寻找的内容。此外,还有一本关于 OCV 的 Oreilly 书。

希望这会有所帮助,南德

于 2010-02-28T18:12:11.143 回答
4

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

于 2010-02-14T11:19:18.997 回答
2

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

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

您将需要某种方法来区分一个 blob 中的多个人。这不是一个问题,我希望任何人都能够在一个 SO-post 中回答。

我的建议是深入研究可用的研究,看看你是否能在那里找到任何东西。考虑到存在这样做的产品,这个问题并非无法解决:奥托立夫有一款产品可以使用汽车上的红外摄像头检测行人,我还看到其他产品可以处理进出商店的顾客计数。

于 2010-02-03T09:13:15.357 回答