我有一个静止的相机,指向室内区域。人们将走过相机,距离它约5米。使用 OpenCV ,我想检测走过的人 - 我理想的回归是一组检测到的个体,带有边界矩形。
我查看了几个内置示例:
是否有人能够为此做出指导或示例 - 最好是 Python ?
答案 0 :(得分:27)
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
;有关更完整的python示例,请参阅samples/python/peopledetect.py
。
答案 1 :(得分:5)
尼克,
您正在寻找的不是人物检测,而是运动检测。如果您告诉我们更多关于您要解决/做的事情,我们可以更好地回答。 无论如何,根据您对结果的处理方式,有很多方法可以进行运动检测。最简单的是差分,然后是阈值处理,而复杂的可以是适当的背景建模 - >前景减法 - >形态学操作 - >连通成分分析,然后根据需要进行blob分析。下载opencv代码并查看samples目录。你可能会看到你在寻找什么。此外,有一本关于OCV的Oreilly书。
希望这有帮助, Nand
答案 2 :(得分:4)
这显然是一项非常重要的任务。你必须从科学出版物中寻找灵感(Google Scholar是你的朋友)。这是一篇关于人体检测和跟踪的论文:Human tracking by fast mean shift mode seeking
答案 3 :(得分:2)
这类似于我们作为计算机视觉课程的一部分所做的项目,我现在可以告诉你,要做到正确是一个难题。
您可以使用前景/背景分割,查找所有斑点,然后确定它们是一个人。问题是它不会很好地工作,因为人们往往会一起走过,走过彼此等等,所以一个blob很可能由两个人组成,然后你会看到blob在他们走过时分裂和合并。
你需要一些方法来区分一个blob中的多个人。这不是一个问题,我希望有人能够在一个SO帖子中回答。
我的建议是深入研究可用的研究,看看你是否能在那里找到任何东西。考虑到存在这样的产品,问题并非无法解决:Autoliv有一种产品可以使用汽车上的红外摄像头检测行人,我看到其他产品涉及计算客户进出商店的数量。