计数系统
本文关键字:系统 | 更新日期: 2023-09-27 18:04:56
我想用OpenCV(或Emgu CV)开发一个"People Counting System"
请指导我如何实现或带我到一些例子或开源项目。
(我做了一些工作:提取diff然后阈值删除背景,使用运动历史等;仍然没有好的结果
编辑1:我正在计算高人流量(十几个人可能同时通过)。
编辑2:它必须至少有80%的准确性。人们正穿过一扇近5米宽的门。问题是我无法控制相机的位置和角度。摄像机在2.5米高的地方从10米远的地方拍摄。谢谢
如果你把一个计数系统称为一个计数房间里的人的系统,那么我建议你用一个带有2个激光器(普通激光器玩具)和2个光敏电阻的微控制器来实现硬件。对于微控制器,我建议您使用Arduino。然后制作一个c#应用程序,它有一个SerialPort对象,并读取arduino通过USB发送的数据。例如,arduino将发送1表示"有人进入房间",发送0表示"有人离开房间"。然后在c#中可以很容易地完成日志记录和统计。
Arduiono网站:
$1的光敏电阻:这里
这个解决方案比使用一个质量相当好的相机更便宜,更容易实现。
希望我能帮到你。
查看最新版本的OpenCV(>= 2.2)附带的HOG行人检测器。
参见OpenCV源代码中的modules/objdetect/src/hog.cpp
和samples/cpp/peopledetect.cpp
。遗憾的是,目前还没有关于它的官方文档。
这将帮助你计算移动的事物,包括人:CodeProject上的运动检测项目
人是场景中唯一的"实体"吗?如果情况并非如此,你是否会考虑将人物视为场景中移动的其他事物?因为如果是这样的话,你可以数一下从现场进来或出来的斑点。这听起来可能有点幼稚,但我将采用某种运动图像,在集群中按距离分组运动像素。你的距离度量可以考虑一些限制,例如人们"经常"站着,所以集群中的像素应该围绕某种回归线(如果相机与地板对齐,则是直线)分组。不需要在场景中跟踪他们,只需要注意他们何时进入或离开,尽管你可能会遇到一些问题,例如,人们在场景中独自进入并成对或成群离开……祝你好运!
我认为如果你有密集的人群,有很多闭塞,你必须使用一些机器学习算法,例如你可以使用隐式形状模型的特征。
这取决于相机的位置。假设您可以获得图像中人物的正面配置文件:
这个问题基本上是人脸检测和识别。
有很多方法去寻找面孔,但这是我更熟悉的方法。
对于人脸检测,您需要对肤色颜色进行图像分割。这将提取皮肤区域。[手臂,胸部(对于那些穿V字上衣的人),脸,腿等]然后你需要将皮肤区域的轮廓与你训练过的脸的轮廓对齐。
[你需要使用Eigenfaces来创建一个面孔的通用配置文件]
如果皮肤区域与轮廓线对齐且不偏离太远,则被认为是脸。一旦面部被确认,然后将其添加到特征面部数据存储中[用于识别]。为了节省处理时间,如果您正在寻找以前的面孔,您可能需要考虑限制搜索区域。[给定帧率,最后一次看到的人]
如果你指的是"人流",我想你指的是人群中面孔的密度。
现在你已经确认视频中移动的物体是一个人。现在你只需要注意这一点,然后确保你不会再把他们当成一个新人。
这个方法:真的取决于你检测面部区域的能力。如果视频中的人向下看,不符合训练数据的轮廓等,这可能不起作用。如果一个人在视频中戴上太阳镜,也可能会受到影响。[可能会被认为是"新面孔"]