2017-03-17 131 views
3

我使用JavaOpenCV图书馆使用Laptop Camera检测FaceEyesMouth人脸检测功能使用OpenCV的哈尔级联

我迄今所做的:

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

问题,我面对:

  • 在第一视频正常运行时突然就变慢。

主要问题:

  1. DO高阶相机的分辨率为工作哈尔瀑布更好?

  2. 我是否必须在一定范围内捕捉视频帧?例如(100px X100px)

  3. 是否Haar-CascadesGray-scale中的表现更好?

  4. 不同的照明条件有什么不同?

  5. detectMultiScale(params)准确的做法是什么?

  6. 如果我想要去进一步分析Eye BlinkingEye Closure DurationMouth YawningHead NoddingHead Orientation来检测疲劳(嗜睡)通过使用Support Vector Machine,有何意见?

您的帮助表示感谢!

回答

3

以下article,会给你一个引擎盖下的事情的概述,我强烈建议阅读文章。

做更高级相机的决议对Haar-Cascades更好吗?

不是必需的,cascade.detectMultiScale有PARAMS调整各种输入宽度,高度情景,像minSizemaxSize,这些都是可选PARAMS不过,但是你可以调整这些获得强大的预测,如果你有控制输入图片大小。如果您将minSize设置为较小的值并忽略maxSize,那么它对较小和高分辨率的图像也适用,但性能会受到影响。此外,如果现在想象一下,如何在高分辨率和低分辨率图像之间没有差异,那么您应该考虑内部缩放图像以降低分辨率以提高性能,这就是为什么定义maxSizeminSize对于避免任何不必要的迭代。

我是否必须以一定的比例捕捉视频帧?例如 (100像素X100px)

这主要取决于你传递给cascade.detectMultiScale的PARAMS。我个人认为100 x 100对于较小的人脸检测来说太小了,因为在将框架调整到较小的尺寸时某些功能会完全丢失,并且cascade.detectMultiScale高度依赖于输入图像中的渐变或特征。

但是,如果输入框架只有脸部作为主要部分,并且没有其他较小的面部悬在后面,那么您可以使用100 X 100。我已经测试了一些尺寸为100 x 100的样本面,效果很好。如果情况并非如此,那么300 - 400像素宽度应该很好。但是,您需要调整参数才能达到准确性。

Do Haar-Cascades在灰度图像中的工作更好吗?

它们只能在灰度图像中工作。

article如果你读了第一部分,你会发现它的面部检测包括检测图像中的许多二进制模式,这基本上来自ViolaJones,这是该算法的基本原理。

不同的照明条件有什么不同?

可能在某些情况下,主要是哈尔特征是光照不变的。

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

但是,考虑输入图像具有背光或环境光很弱的情况,在这种情况下,可能会发现某些突出的特征未找到,这可能导致未检测到面部。

detectMultiScale(params)方法的确切做法是什么?

我想,如果您已阅读article,那么您现在一定知道这一点。

如果我想去的眨眼进一步分析,眼睛闭合 时间,嘴打哈欠,点头和头部方向来检测 疲劳(嗜睡)通过使用支持向量机,有何意见?

不,我不会建议你用SVM执行这些类型的手势检测的,因为这将是运行10个不同的级联结束当前的面部状态非常慢,但是我会建议你使用一些面部Landmark Detection Framework,例如Dlib,您也可以搜索其他一些框架,因为dlib的模型大小将近100MB,如果您想将它移植到移动设备上,它可能不适合您的需要。所以关键是**面部标记检测**,一旦你得到全脸标记,你可以得出结论,如口如果打开或眼睛闪烁,并且它在实时工作,所以你的视频处理赢得'受到很大的影响。