2013-08-22 183 views
1

我目前正在进行人员检测和计数项目。它基本上可以通过USB网络摄像头检测现场的任何人,然后统计路过的人。目前,我的设置是:OpenGL人脸检测

  1. OpenCV的2.4.6,使用检测方法哈尔(浮点处理)
  2. ARM板与ARM A9四核心和Mali四核GPU

不幸的人头上,处理时间不够快,每帧70 - 100毫秒(14 - 10 fps),因此不会计算以正常速度或更快速度行走的人。瓶颈在于OpenCV HaarDetection方法,基本上每帧处理时间的90%被该进程消耗。

我试着在Haar旁边使用另一个模型,这是基于整数处理的LBP模型,但到目前为止,我的LBP模型并不令人满意,我仍在努力创建新模型。此外,我尝试使用TBB与OpenCV(原生在OpenCV中实现的多线程)但以某种方式导致Odroid崩溃,如果我不使用TBB,应用程序运行稳定。

我能想到的唯一优化就是利用板上的Mali GPU,使用修改后的HaarDetection重新编译OpenCV以利用某些GPU处理能力。我的问题是,这是可以使用OpenGL库吗?我看到大多数OpenGL的例子都是渲染图形,而不是处理图像。

+3

今天大多数Mali四核处理器都是Mali-400 MP,它只支持OpenGL ES 2.0,并且没有GPGPU api的说法。你可能有很多意志力和时间可能使用顶点/片段着色器将某些东西拼凑在一起,但它似乎很难实现(你不仅需要重写算法,而且要以非常尴尬的分区方式重写它)。抛出硬件或调整算法/改变你的方法。 – PeterT

+0

您可以尝试使用latentsvm检测器,但这意味着需要为不直观的人员培训新模型。告诉我,如果你有兴趣,我会提供更多的细节。 – GilLevi

+0

没关系,有一个训练有素的模特儿。 – GilLevi

回答

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网络摄像机的简单眼球记录器)中使用了这个解决方案,并且它工作正常。
6.如上所述+仅在发生差异的地区进行搜索。
7.划分你的图像,例如16个矩形。检查每个矩形中当前和前一帧之间的差异 - 如果一行或一列中的所有矩形几乎与前一帧中的相同 - 不要分析此行/列(只将图像的一部分传递给haar级联 - 使用ROI) 。它应该给出相当好的结果并且提高速度,因为人们会从框架的一侧走到另一侧 - 所有矩形在两个连续帧之间改变的可能性很小。

+0

太棒了!期待着尝试这些新想法。无论如何,我快速尝试,也搜索: 3. WITH_TBB将导致我的应用程序崩溃在我的ARM板,但在PC中确定。使用Valgrind进行调试时停止了内核错误。 SSE和SSE2仅适用于英特尔系统,是吗?我用ARM板 5.我用基于背景减法的运动检测器,方法不适用是整个区域充满了移动的人。更不用说背景减法和连接的组件消耗额外的时间。 无论如何,你的建议留下很多东西来尝试和激励我。谢谢! – bonchenko

+0

我遵循你的回答,根据肤色,调整参数检测一些区域,并且fps从15变为50!很好的答案,非常感谢 – bonchenko

0

您可以尝试使用latensvm检测器检测人员(通过部件检测)。幸运的是,有一个人训练模型在这里:

https://github.com/Itseez/opencv_extra/tree/master/testdata/cv/latentsvmdetector/models_VOC2007

它可能会更快然后HOG。

希望有所帮助。

+0

我曾在我的主机上试过HOG,但它比Haar慢了10倍。但在某些来源阅读[链接](http://answers.opencv.org/question/12124/latentsvm-detector/)和[链接2](http://answers.opencv.org/question/8733/opencv- latentsvm-detector-too-slow /)表示OpenCV实现不适用于实时处理。尽管尝试过LatentSVM,但很快就会尝试。谢谢! – bonchenko