【问题标题】:Pedestrian Detection with unique identifier具有唯一标识符的行人检测
【发布时间】:2013-11-22 12:35:47
【问题描述】:

您好,我目前正在使用 HOG 和 Haar Cascade 的 OpenCV 实现来执行行人检测并将其限制在视频源上。

但是,我想为进入视频源的每个行人分配一个唯一的 id(数字),在行人离开视频源之前,该 id 保持不变。由于帧是一个接一个地处理而不考虑前一帧,我不确定如何以最简单但有效的方式实现这一点。

我真的需要使用像 camshift 或 Kalman 这样的跟踪算法吗?或者有没有更简单的方法来实现我想要的?

P/S:这个video 是我想要实现的。事实上,我之前在这里发布了一个类似的问题,但更多的是针对检测技术,这是针对分配唯一标识符的下一步。

【问题讨论】:

  • 是的,这就是所谓的跟踪。

标签: opencv detection video-tracking


【解决方案1】:

一个简单的解决方案:

在向量中跟踪您的对象。
如果您计算一个新框架,对于每个对象:搜索存储在您的向量中的最近的对象。如果存储的对象和您当前的对象之间的距离低于某个阈值,则它是同一个对象。

如果没有找到匹配,则该对象是新的。最后删除 Vector 中与当前帧的对象无关的所有对象。

【讨论】:

  • 感谢您的建议。我之前也想过这个问题,但我害怕的是:如果检测器在某个帧内“错过”了这个人怎么办,“最近的物体”方法会认为这个人已经离开了视频源。
  • 您可以为每个对象创建一个计数器。如果计数器达到某个值 -> 丢弃对象。因此,您观看一定数量的帧,并且只有当对象丢失太久时您才会丢弃它。到目前为止,这不是一种非常稳健的做事方式,这就是我写“简单解决方案”的原因;-)
  • 是的,这确实是一个不错且简单的解决方案 :)。如果你不介意我问,你知道其他更可靠的方式来做我想做的事吗?
  • 更复杂的方法是使用您在问题中已经提到的卡尔曼滤波器。你可以看看这个 Matlab 实现,看看它是如何工作的:blog.cordiner.net/2011/05/03/…
  • 哦,不久前我确实偶然发现了 Kalman,但我完全不知道如何将它与我的 HOG 或 Haar 行人检测方法一起使用。有适合我的情况的好的代码教程吗?我正在使用 C++ OpenCV 顺便说一句。
【解决方案2】:

当您使用detectMultiScale 获取匹配项时,您将拥有一个std:Vector<cv:Rect> 结构,其中包含所有检测到的行人。在遍历它们进行绘图时,您可以为每个被检测到的唯一 cv::Rect 分配一个数字(您可能需要为此编写一个稍微深入的测试,以检查重叠的矩形),然后您可以绘制(假设在顶部) 对应的矩形。

HTH

【讨论】:

  • 无意冒犯,但你有点误解了我的问题。我可以为 detectMultiScale 返回的每个 Rect 分配一个唯一标识符。问题出现在下一帧中,在前一帧检测到的人可能已经移动,那么我如何确保同一个人仍然具有我在前一帧分配给他的相同唯一 ID(而不是重新分配给他一个新的唯一 ID )。
  • 哦,我想我没有说清楚。您需要将 Rect 保留为全局变量(@Mailerdaimon 建议的方式)。
  • 我在第一次阅读时也没有明白这一点。也许你可以改写你的答案更清楚。 +1 的好方法 ;)
  • 别担心,无论如何,你写的正是我的意思。 :)
猜你喜欢
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
相关资源
最近更新 更多