【问题标题】:Face Features Detection Using OpenCV Haar-cascades使用 OpenCV Haar-cascades 进行人脸特征检测
【发布时间】:2017-08-08 10:37:17
【问题描述】:

我正在使用JavaOpenCV 库来检测FaceEyesMouth 使用Laptop Camera

到目前为止我做了什么:

  1. 使用VideoCapture 对象捕获视频帧。
  2. 使用Haar-Cascades检测Face
  3. Face区域划分为Top区域和Bottom区域。
  4. Top 区域内搜索Eyes
  5. Bottom 区域内搜索Mouth

我面临的问题:

  • 一开始视频运行正常,突然变慢了。

主要问题:

  1. 更高的相机分辨率是否更适合 Haar-Cascades?

  2. 我是否必须以特定比例捕获视频帧?例如(100px X100px)?

  3. Haar-CascadesGray-scale 图像中效果更好吗?

  4. 不同的光照条件有区别吗?

  5. detectMultiScale(params) 方法究竟做了什么?

  6. 如果我想进一步分析Eye BlinkingEye Closure DurationMouth YawningHead NoddingHead Orientation 以使用Support Vector Machine 检测疲劳(嗜睡),有什么建议吗?

感谢您的帮助!

【问题讨论】:

标签: java opencv face-detection haar-classifier eye-detection


【解决方案1】:

下面的article 将为您提供幕后工作的概览,我强烈建议您阅读这篇文章。

更高的相机分辨率是否更适合 Haar-Cascades?

不一定,cascade.detectMultiScale 具有针对各种输入宽度、高度情况进行调整的参数,例如 minSizemaxSize,这些是可选参数,但是,如果您有控制权,您可以调整这些以获得可靠的预测超过输入图像大小。如果您将minSize 设置为更小的值并忽略maxSize,那么它也适用于更小和更高分辨率的图像,但性能会受到影响。此外,如果您现在想象,为什么高分辨率和低分辨率图像之间没有区别,那么您应该考虑 cascade.detectMultiScale 在内部将图像缩放到较低分辨率以提高性能,这就是为什么定义 maxSizeminSize 对于避免任何不必要的迭代很重要。

我必须以一定的比例捕捉视频帧吗?例如 (100px X100px)

这主要取决于您传递给cascade.detectMultiScale 的参数。我个人认为100 x 100 对于帧中较小的人脸检测来说太小了,因为在将帧调整为更小的尺寸时某些特征会完全丢失,而cascade.detectMultiScale 高度依赖于输入图像中的梯度或特征.

但是如果输入帧只有人脸作为主要部分,并且没有其他较小的人脸悬在后面,那么你可以使用100 X 100。我已经测试了一些大小为100 x 100 的样本面,效果很好。如果不是这种情况,那么300 - 400 px 宽度应该可以正常工作。但是,您需要调整参数以达到准确性。

Haar-Cascades 在灰度图像中效果更好吗?

它们仅适用于灰度图像。

article,如果你看了第一部分,就会知道人脸检测是由检测图像中的许多二进制模式组成的,这基本上来自ViolaJones,论文是基础这个算法。

不同的光照条件会有所不同吗?

在某些情况下,大部分 Haar 特征可能是光照不变的。

如果您考虑在不同的照明条件下拍摄绿光或红光下的图像,那么它可能不会影响检测,haar 特征(因为依赖于灰度)独立于输入图像的 RGB 颜色。检测主要取决于输入图像中的梯度/特征。因此,只要输入图像中有足够的梯度差异,例如眉毛的强度低于前额等,它就可以正常工作。

但是考虑输入图像有背光或环境光非常低的情况,在这种情况下,可能没有找到一些突出的特征,这可能导致无法检测到人脸。

detectMultiScale(params) 方法究竟做了什么?

我猜,如果你已经阅读了article,那么此时你一定很了解它。

如果我想进一步分析 Eye Blinking, Eye Closure 持续时间、嘴巴打哈欠、头部点头和头部方向检测 疲劳(嗜睡)使用支持向量机,有什么建议吗?

不,我不建议您使用 SVM 执行这些类型的手势检测,因为运行 10 个不同的级联来得出当前的面部状态会非常慢,但是我建议您使用一些面部标志检测框架,比如Dlib,你也可以搜索一些其他的框架,因为dlib的模型大小接近100MB,如果你想移植到移动设备上可能不适合你的需求。所以关键是**面部地标检测**,一旦你得到了全脸的标签,你可以得出结论,比如嘴巴是否张开或眼睛是否在眨眼,并且它是实时工作的,所以你的视频处理不会不会受太多苦。

【讨论】:

    猜你喜欢
    • 2017-02-23
    • 2012-02-06
    • 2013-08-06
    • 2016-10-26
    • 1970-01-01
    • 2013-03-23
    • 2017-10-02
    • 1970-01-01
    • 2011-11-14
    相关资源
    最近更新 更多