我目前正致力于人员检测和计数项目。它基本上通过USB网络摄像头检测现场的任何人,然后计算人们路过。目前,我的设置是:
不幸的是,处理时间不够快,每帧70到100毫秒(14 - 10 fps),因此不计算以正常速度或更快速度行走的人。瓶颈在OpenCV HaarDetection方法中,基本上每帧的处理时间的90%被该过程消耗。
我尝试使用Haar旁边的另一个模型,LBP模型基于整数处理,但到目前为止我的LBP模型并不令人满意,我仍在努力创建新模型。此外,我尝试使用TBB和OpenCV(在OpenCV中原生实现的多线程),但不知何故导致Odroid崩溃,如果我不使用TBB,应用程序可以稳定工作。
我能想到的唯一优化是在板上使用Mali GPU,使用修改后的HaarDetection重新编译OpenCV以利用一些GPU处理能力。我的问题是,这是否可以使用OpenGL库?我看到OpenGL的大部分例子是渲染图形而不是处理图像。
答案 0 :(得分:2)
您可以考虑的其他优化:
1.使用参数进行播放 - 即使比例因子和最小窗口大小的微小变化也可以使您的算法更快
2.尝试使用不同的级联
3.尝试使用OpenCV构建参数 - WITH_TBB可能会帮助您(http://www.threadingbuildingblocks.org/)如果您的处理器支持多线程并且级联可以使用多个线程(我认为它可能 - 可能不是所有时间,但至少它的某些部分可以)。看看ENABLE_SSE和ENABLE_SSE2也是如此
4.搜索haar级联探测器的其他一些实现或尝试自己制作它 - 可以使它更快,请参阅(文章和评论):http://www.computer-vision-software.com/blog/2009/06/fastfurious-face-detection-with-opencv/
5.如果要分析图像序列,请检查两个连续帧是否相同/非常相似 - 如果是这样,您可以跳过当前帧的分析,因为结果将是相同的(或非常相似)。我在我的BSc论文(使用720p网络摄像头的简单eyetracker)中使用了这个解决方案,它工作得很好。
6.如上所述+仅在发生差异的地区进行搜索
7.将图像分割为例如16个矩形。检查每个矩形中当前帧和上一帧之间的差异 - 如果来自一行或列的所有矩形与前一帧中的几乎相同 - 不要分析此行/列(仅将图像的一部分传递给haar级联 - 使用ROI) 。它应该提供相当好的结果并提高速度,因为人们将从帧的一侧走到/跑/等到另一侧 - 所有矩形在两个连续帧之间变化的可能性很小。
答案 1 :(得分:0)
您可以尝试使用latensvm探测器检测人员(按部件检测)。幸运的是,这里有一个训练有素的模特:
https://github.com/Itseez/opencv_extra/tree/master/testdata/cv/latentsvmdetector/models_VOC2007
它可能比HOG快。
希望有所帮助。