如何在opencv / emgucv中检测多个人并跟踪它们

时间:2014-01-08 05:43:07

标签: opencv computer-vision emgucv

我一直试图在一个狭小的空间内探测多个人,从而跟踪他们。

输入:从安装在小房间的相机中取出闭路电视。

预期输出:跟踪并存储人们从房间一端移动到另一端时所走的路径。

我试图实现一些基本方法,如背景减法和行人检测。但结果并不理想。

在通过实施背景扣除获得的结果中,由于遮挡,斑点不是单个实体(一个人的斑点被分成多个小斑点)因此,将其作为单个人检测是非常困难的。 现在,考虑一下有很多人站在一起的情况。在这种情况下,使用简单的背景减法检测人是一场彻底的灾难。

有没有更好的方法来检测多人? 或者有没有办法改善背景减法的结果?

请建议一个跟踪多人的好方法吗?

1 个答案:

答案 0 :(得分:3)

这是一个非常难的问题,并且没有开箱即用的解决方案,因此您可能需要尝试不同的方法。

一开始你会想要做一些假设,比如静态相机位置和非背景的一切都是一个人或一个人的一部分,也许是多个人。人员不能出现在图像中,但他们必须“输入”它(并在检测后进入和跟踪时检测到)。

检测和跟踪都可能是难题,因此您可能希望首先关注其中一个问题。我会从跟踪开始并选择probabilisic tracking method,因为像tracking by detection这样的简单跟踪方法可能无法很好地处理重叠和多个目标。

Tracking: 我会尝试像http://www.irisa.fr/vista/Papers/2002/perez_hue_eccv02.pdf这样的粒子滤镜 它能够跟踪多个目标。

Detection: OpenCV中有一个HoG人物探测器,对于正直的人来说非常好

HOGDescriptor hog;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());

但最好知道图像中人物的大致尺寸并相应地缩放图像。您可以通过缩放斑点或斑点组合在背景扣除后执行此操作,或者使用相机校准并将尺寸为1.6m至2.0m的图像部分缩放到HoG探测器尺寸。否则你可能会有许多未命中和许多错误警报。

最后,你需要工作和研究一段时间才能让事情顺利进行,但不要指望早期成功或100%的命中率;)

我会创建一个示例视频并对其进行处理,手动屏蔽输入检测人员并使用这些检测实现跟踪器。