【问题标题】:OpenGL Face DetectionOpenGL人脸检测
【发布时间】:2013-08-22 02:46:12
【问题描述】:

我目前正在从事人员检测和计数项目。它基本上通过 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的例子是渲染图形,而不是处理图像。

【问题讨论】:

  • 目前市面上的大多数 Mali 四核是 Mali-400 MP,它只支持 OpenGL ES 2.0,没有 GPGPU api 可言。你可以用大量的意志力和时间可能使用顶点/片段着色器一起破解一些东西,但这似乎不值得(你不仅要重写算法,而且要以非常尴尬的分区方式重写它)。向它扔硬件或调整你的算法/改变你的方法。
  • 你可以尝试使用latentsvm检测器,但这意味着为人们训练一个新模型并不简单。如果您有兴趣,请告诉我,我会提供更多详细信息。
  • 没关系,有训练有素的模范人。

标签: opengl opencv image-processing gpgpu mali


【解决方案1】:

您可能会考虑的其他优化:
1. 使用参数 - 即使比例因子和最小窗口大小的微小变化也可以使您的算法更快。
2.尝试使用不同的级联
3. 尝试使用 OpenCV 构建参数 - WITH_TBB 可能会帮助你 (http://www.threadingbuildingblocks.org/) 如果你的处理器支持多线程并且级联可以使用多个线程(我认为这是可能的 - 也许不是一直,但至少在某些部分它可以)。还请查看 ENABLE_SSE 和 ENABLE_SSE2。
4.搜索haar级联检测器的一些其他实现或尝试自己制作 - 可以使其更快,请参阅(文章和cmets):http://www.computer-vision-software.com/blog/2009/06/fastfurious-face-detection-with-opencv/
5. 如果您正在分析图像序列,请检查两个连续帧是否相同/非常相似 - 如果是,您可以跳过当前帧的分析,因为结果将相同(或非常相似)。我在我的 BSc 论文中使用了这个解决方案(使用 720p 网络摄像头的简单眼动仪),效果很好。
6. 同上 + 仅在出现差异的区域中搜索。
7. 将图像划分为例如 16 个矩形。检查每个矩形中当前帧和前一帧之间的差异 - 如果一行或一列中的所有矩形与前一帧几乎相同 - 不要分析此行/列(仅将图像的一部分传递给 haar 级联 - 使用 ROI) .它应该会产生很好的结果并提高速度,因为人们会从帧的一侧走到另一侧 - 所有矩形在两个连续帧之间发生变化的可能性很小。

【讨论】:

  • 太棒了!期待尝试这些新想法。无论如何,我会快速尝试并搜索: 3. WITH_TBB 会导致我的应用程序在我的 ARM 板上崩溃,但在 PC 中可以。 Valgrind 的调试因内核错误而停止。 SSE 和 SSE2 仅适用于 Intel 系统,是吗?我使用ARM board 5。我使用了基于背景减法的运动检测器,该方法不适用,因为整个区域都充满了移动的人。更不用说背景减法和连接组件会消耗额外的时间。不管怎样,你的建议留下了很多东西可以尝试并激励我。谢谢!
  • 我按照你的回答,根据肤色检测某些区域,调整参数,fps 从 15 到 50!很好的答案,非常感谢
【解决方案2】:

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

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

它可能会比 HOG 更快。

希望对您有所帮助。

【讨论】:

  • 我之前在我的主机上尝试过 HOG,但它比 Haar 慢 10 倍。但是阅读一些源代码linklink 2 表明OpenCV 实现不是用于实时处理的。虽然从未尝试过 LatentSVM,但很快就会尝试。谢谢!
  • 提供的 GitHub 链接不可用,请更新。
猜你喜欢
  • 2019-11-18
  • 2013-09-24
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 2013-07-16
  • 2019-02-27
  • 2021-09-09
  • 2011-08-19
相关资源
最近更新 更多