【问题标题】:How can I detect and track people using OpenCV?如何使用 OpenCV 检测和跟踪人员?
【发布时间】:2011-01-12 10:01:42
【问题描述】:

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

我查看了几个内置示例:

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

有没有人可以提供指导或示例 - 最好是在 Python 中?

【问题讨论】:

  • +1 大胆的尝试。有兴趣看看会发生什么。
  • @Trent 不确定您是否认真。 OpenCV 没有这样的方法。
  • @Nick Johnson,抱歉,这是一次糟糕的幽默尝试。能够在现实世界环境中检测和跟踪人员并非易事。有很多障碍需要克服,包括:不同的照明条件、障碍物、阴影移除等。
  • 这个家伙有一份出版物。查看robots.ox.ac.uk/~nema/publications 上的论文“你是谁?实时人员识别”。基本理论似乎是径向基函数。 (只是炫耀我的谷歌技能。)
  • @Trent 这是一次很好的幽默尝试。

标签: python opencv computer-vision motion-detection


【解决方案1】:

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 了解实现,samples/python/peopledetect.py 了解更完整的 python 示例(均在 OpenCV 源代码中)。

【讨论】:

    【解决方案2】:

    尼克,

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

    希望这会有所帮助, 南德

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 正如我评论的那样,我不需要确定它们是人类 - 我只需要隔离移动的 blob 并跟踪它们。
      【解决方案4】:

      这类似于我们在计算机视觉课程中所做的一个项目,我现在可以告诉你,要做好是一个很难的问题。

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

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

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

      【讨论】:

      • 我实际上并不太担心在一个“斑点”中识别多个人——我更感兴趣的是定位活动斑点并找到它们的边界框和质心。我希望有人能够为此目的简单地建议 OpenCV 中可用的一系列算法。 :)
      猜你喜欢
      • 2020-06-03
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      相关资源
      最近更新 更多