如何使用OpenCV检测和追踪人物?
我有一台相机,它会固定在一个地方,朝着室内的某个区域拍摄。人们会在相机前走过,大约距离相机有5米。我想用OpenCV来检测走过的人,理想的结果是得到一个包含检测到的人的数组,并且每个人都有一个边框矩形。
我看了一些内置的示例:
- 没有一个Python的示例适合我的需求。
- C语言的一个气泡追踪示例看起来不错,但它不支持实时视频,这让测试变得困难。而且这是所有示例中最复杂的,提取相关知识并转换成Python的接口也很麻烦。
- C语言的'motempl'示例也很有前景,因为它可以从后续的视频帧中计算出轮廓。这样我可能可以用它来找到紧密连接的部分,并提取出单独的气泡和它们的边框 - 但我仍然在想办法如何将后续帧中找到的气泡识别为同一个气泡。
有没有人能提供一些指导或示例,最好是用Python来实现的?
4 个回答
4
这显然不是一件简单的事情。你需要查阅一些科学出版物来获取灵感(谷歌学术在这方面会对你有帮助)。这里有一篇关于人类检测和追踪的论文:通过快速均值漂移模式寻找进行人类追踪
5
Nick,
你现在想要的不是人脸识别,而是运动检测。如果你能多告诉我们一些你想解决的问题或者想做的事情,我们就能给出更好的建议。
总之,运动检测有很多种方法,具体取决于你想用结果做什么。最简单的方法是通过对比图像来找出变化,然后设定一个阈值。而复杂的方法可能涉及到建立背景模型、前景减法、形态学操作,再到连通组件分析,如果需要的话还可以进行斑点分析。你可以下载opencv的代码,看看里面的示例文件夹,也许能找到你需要的东西。此外,还有一本关于opencv的Oreilly书籍。
希望这对你有帮助,
Nand
29
最新的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
(这两个文件都在OpenCV的源代码里)。