OpenGL人脸检测

标签 opengl opencv image-processing gpgpu mali

我目前正在从事人员检测和计数项目。它基本上通过 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 中 native 实现)一起使用,但不知何故导致 Odroid 崩溃,如果我不使用 TBB,应用程序工作稳定。

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

最佳答案

您可能会考虑的其他优化:
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) .它应该提供相当好的结果并提高速度,因为人们会从帧的一侧步行/运行/等到另一侧 - 所有矩形在两个连续帧之间发生变化的可能性很小。

关于OpenGL人脸检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18370878/

相关文章:

opencv - opencv-如何从几个小图像创建一个大图像?

python - 如何在不丢失掩码中间数据的情况下去除边框上的噪声

python - 在 python scipy 版本 1.1 中计算信噪比

c++ - OpenCV:如何从提供的图片中检测粗红线及其轮廓

c++ - OpenSceneGraph 和 GLSL 330 光影

opengl - 有了 OpenCL,GLSL 的意义何在?

image - Opengl 纹理和字节顺序

python - 如何解决AttributeError : 'module' object has no attribute 'createBackgroundSubtractorMOG' in opencv?

opencv - 使用OpenCV从屏幕坐标计算世界坐标

c++ - opengl过剩使hud