1

我目前正在从事人员检测和计数项目。它基本上通过 USB 网络摄像头检测场景中的任何人,然后计算经过的人。目前,我的设置是:

  1. OpenCV 2.4.6,使用Haar方法检测人头(浮点处理)
  2. 带有 ARM A9 四核和 Mali 四核 GPU 的 ARM 板

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

我尝试使用除 Haar 之外的另一种模型,即基于整数处理的 LBP 模型,但到目前为止,我的 LBP 模型并不令人满意,我仍在努力创建新模型。此外,我尝试将 TBB 与 OpenCV 一起使用(在 OpenCV 中本地实现多线程),但不知何故导致 Odroid 崩溃,如果我不使用 TBB,应用程序可以稳定运行。

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

4

2 回答 2

2

您可能会考虑的其他优化:
1. 使用参数 - 即使比例因子和最小窗口大小的微小变化也可以使您的算法更快。
2. 尝试使用不同的级联
3. 尝试使用 OpenCV 构建参数 -如果您的处理器支持多线程并且级联可以使用多个线程(我认为这是可能的——也许不是所有的时间,但至少它的某些部分可以)。还请查看 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) . 它应该会产生很好的结果并提高速度,因为人们会从帧的一侧走到另一侧 - 所有矩形在两个连续帧之间发生变化的可能性很小。

于 2013-08-23T00:13:08.130 回答
0

您可以尝试使用 latensvm 检测器(按部分检测)检测人。幸运的是,这里有一个训练有素的 person 模型:

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

它可能会比 HOG 更快。

希望有帮助。

于 2013-08-22T09:14:08.120 回答