我想使用OpenCV(或Emgu CV)开发一个“人数统计系统”。
请指导我如何实施或引导我参加一些示例或开源项目。
(我做了一些工作:提取差异然后阈值删除背景,使用运动历史等等;仍然没有好结果。)
编辑1:我正在计算一个高人流量(其中十几个可能同时出现)。
编辑2:它必须至少80%准确。人们走过一扇近5米宽的门。问题是我无法控制相机的位置或角度。相机在距离10米处高度2.5米的地方喊叫。
谢谢
答案 0 :(得分:7)
如果你打电话给人数统计系统一个计算房间内人员的系统,那么我建议你用带有2个激光器(普通激光玩具)和2个光敏电阻的微控制器来实现硬件。对于微控制器,我建议你使用Arduino.And然后创建一个具有SerialPort对象的C#应用程序并读取arduino通过USB发送的数据。例如,arduino将为“有人进入房间”发送1,为“有人离开房间”发送0。然后日志记录和统计信息可以在C#中轻松完成。
Arduiono网站:here
Photoresistor只需$ 1:here
与使用质量相当好的相机相比,这种解决方案更便宜,更容易实现。
希望我帮助过你。
答案 1 :(得分:3)
查看最近版本的OpenCV附带的HOG行人检测器(> = 2.2)。
在OpenCV来源中查看modules/objdetect/src/hog.cpp
和samples/cpp/peopledetect.cpp
。不幸的是,目前还没有关于它的官方文档。
答案 2 :(得分:3)
这可以帮助您计算包括人在内的移动物品:Motion Detection project on CodeProject
答案 3 :(得分:2)
人们是场景中唯一的“实体”吗?如果情况并非如此,你是否关心考虑一个人在场景中移动的其他东西?因为如果是这种情况,您可以计算进入或从场景中出来的blob。这可能听起来有点幼稚,但我会采取某种运动图像,按群集中的距离分组运动像素。您的距离度量可以考虑一些限制,例如人们将“经常”站立,因此群集中的像素应该围绕某种回归线(如果摄像机与de floor对齐,则为直线)。没有必要在场景中跟踪它们,只是注意它们何时进入或离开,尽管你会遇到一些问题,例如,人们在场景中自己进入并成对或成组离开。祝你好运:))
答案 4 :(得分:1)
我认为如果你有密集的人群拥有大量的遮挡,你必须使用一些机器学习算法,例如你可以使用隐式形状模型的功能。
答案 5 :(得分:0)
这实际上取决于相机的位置。假设您可以在图像中获得人物的正面轮廓:
这个问题基本上是人脸检测和识别。
有许多方法可以找到面孔,但这是我更熟悉的方法。
对于脸部检测,您需要对肤色进行图像分割。这将提取皮肤区域。 [手臂,胸部(对于那些穿着V形顶部的人),面部,腿部等]然后,您需要将皮肤区域的轮廓与受训练面部的轮廓对齐。
[你需要使用特征脸来创建一个脸部外观的通用轮廓]
如果皮肤区域对齐并且没有偏离轮廓太远,那么它被认为是面部。一旦确认了面部,然后将其添加到特征脸数据存储[用于识别]。要保存处理,如果要查找前一个面,可能需要考虑限制搜索区域。 [给定帧率,上次看到这个人时]
如果您指的是“人群流动”,我认为您只是指人群中的面部密度。
现在您已确认视频中的移动物体是一个人。现在您只需要注意这一点,然后确保您不再将它们视为新人。
这种方法:真的取决于你检测面部区域的能力。如果视频中的人向下看,不适合训练数据的配置文件等,这可能不起作用。如果一个人在视频中戴上太阳镜,也可能会有效。 [可能会被视为“新面孔”]