2010-02-02 42 views
34

我有一个静止的相机,指向室内区域。人们会走过距离摄像机约5米的地方。使用OpenCV,我想检测走过去的人 - 我理想的返回是一组检测到的个人,边界矩形。如何检测和跟踪使用OpenCV的人?

我看了几个内置的样品:

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

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

+2

+1大胆的努力。有兴趣看看会发生什么。 – 2010-02-02 23:51:51

+0

@Trent不知道你是否认真。 OpenCV没有任何这样的方法。 – 2010-02-03 09:05:37

+0

@尼克约翰逊,对不起,这是一个不好的幽默尝试。能够在真实世界的环境中检测和跟踪人员并不重要。克服的障碍很多,包括:不同的照明条件,障碍物,阴影去除等。 – Trent 2010-02-03 15:28:49

回答

27

最新的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源)。

1

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

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

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

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

+0

实际上我并没有太在意在一个'blob'中识别多个人 - 我是更关心定位活动的斑点并找到它们的边界框和质心。我希望有人能够简单地提出OpenCV中可用的一系列算法。 :) – 2010-02-03 11:55:21

4

这显然是一项不平凡的任务。你将不得不看科学出版物的灵感(Google Scholar是你的朋友在这里)。下面是一篇关于人体检测和跟踪的文章:Human tracking by fast mean shift mode seeking

+0

正如我所评论的,我不需要确定它们是人类 - 我只需要隔离移动的斑点并追踪它们。 – 2010-02-14 14:32:06

5

尼克,

你在找什么不是人检测,但运动检测。如果你告诉我们更多关于你想要解决/做什么的事情,我们可以更好地回答。 无论如何,有很多方法可以进行运动检测,具体取决于您将如何处理结果。最简单的是差分法,然后是阈值法,而一个复杂的可能是适当的背景建模 - >前景减法 - >形态学运算 - >连通分量分析,如果需要则进行斑点分析。下载opencv代码并查看示例目录。你可能会看到你在找什么。另外,还有一本关于OCV的奥雷利书。

希望这会有帮助, Nand