其他分享
首页 > 其他分享> > 使用OpenCV Haar-cascades进行人脸特征检测

使用OpenCV Haar-cascades进行人脸特征检测

作者:互联网

我正在使用Java与OpenCV库来检测使用笔记本电脑相机的脸部,眼睛和嘴巴.

到目前为止我做了什么:

>使用VideoCapture对象捕获视频帧.
>使用Haar-Cascades检测脸部.
>将面部区域划分为顶部区域和底部区域.
>在顶部区域内搜索眼睛.
>在底部区域内搜索口腔.

我面临的问题:

>首先,视频正常运行,然后突然变慢.

主要问题:

>高等级相机的分辨率是否适用于Haar-Cascades?
>我是否必须以一定比例捕获视频帧?例如(100px X100px)?
> Haar-Cascades在灰度图像中的效果更好吗?
>不同的照明条件会有所不同吗?
> detectMultiScale(params)方法究竟做了什么?
>如果我想进一步分析眼睛闪烁,闭眼持续时间,嘴巴打呵欠,头部点头和头部方向来检测疲劳(困倦)通过使用支持向量机,任何建议?

非常感谢您的帮助!

解决方法:

下面的article,将为您提供有关幕后内容的概述,我强烈建议您阅读这篇文章.

Do Higher Cameras’ Resolutions work better for Haar-Cascades?

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

Do I have to capture Video Frames in a certain scale? for example
(100px X100px)

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

但是如果输入框架只有面部作为主要部分,并且没有其他较小的面孔悬挂在后面那么你可以使用100 X 100.我已经测试了一些尺寸为100 x 100的样品面并且它工作得很好.如果情况并非如此,则300 – 400 px宽度应该可以正常工作.但是,您需要调整参数以获得准确性.

Do Haar-Cascades work better in Gray-scale Images?

它们仅适用于灰度图像.

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

Does different lighting conditions make difference?

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

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

但考虑输入图像具有背光或非常低的环境光的情况.在这种情况下,可能未找到一些突出的特征,这可能导致未检测到面部.

What does the method detectMultiScale(params) exactly do?

我想,如果你已经阅读了article,那么你必须要了解它.

If I want to go for further analysis for Eye Blinking, Eye Closure
Duration, Mouth Yawning, Head Nodding and Head Orientation to Detect
Fatigue (Drowsiness) By Using Support Vector Machine, any advices?

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

标签:java,opencv,face-detection,haar-classifier,eye-detection
来源: https://codeday.me/bug/20190622/1265715.html