[英]Face Features Detection Using OpenCV Haar-cascades
我正在使用Java
与OpenCV
库来检测使用Laptop Camera
Face
, Eyes
和Mouth
。
到目前为止我做了什么:
VideoCapture
对象捕获视频帧。 Haar-Cascades
检测Face
。 Face
区域划分为Top
Region和Bottom
Region。 Top
区域内的Eyes
。 Bottom
区域内的Mouth
。 我面临的问题:
主要问题:
高等级相机的分辨率是否适用于Haar-Cascades?
我是否必须以一定比例捕获视频帧? 例如(100px X100px)
?
Haar-Cascades
在Gray-scale
图像中的效果更好吗?
不同的照明条件会有所不同吗?
detectMultiScale(params)
的方法究竟做了什么?
如果我想进一步分析Eye Blinking
, Eye Closure Duration
, Mouth Yawning
, Head Nodding
和Head Orientation
来检测疲劳(困倦)通过使用Support Vector Machine
,任何建议?
非常感谢您的帮助!
下面的文章将向您概述幕后的内容,我强烈建议您阅读这篇文章。
高等级相机的分辨率是否适用于Haar-Cascades?
不一定, cascade.detectMultiScale
有params来调整各种输入宽度,高度场景,如minSize
和maxSize
,这些是可选参数但是,如果您可以控制输入图像大小,可以调整这些以获得可靠的预测。 如果将minSize
设置为较小的值并忽略maxSize
那么它也适用于较小和较高分辨率的图像,但性能会受到影响。 此外,如果您现在想象,为什么高分辨率和低分辨率图像之间没有差异,那么您应该考虑cascade.detectMultiScale
内部将图像缩放到较低分辨率以提升性能,这就是为什么定义maxSize
和minSize
是避免任何不必要的迭代很重要。
我是否必须以一定比例捕获视频帧? 例如(100px X100px)
这主要取决于传递给cascade.detectMultiScale
的参数。 我个人认为100 x 100
对于帧中较小的面部检测来说太小了,因为在将帧尺寸调整到较小尺寸时某些特征会完全丢失,而cascade.detectMultiScale
高度依赖于输入图像中的渐变或特征。
但是如果输入框架只有面部作为主要部分,并且没有其他较小的面孔悬空,那么你可以使用100 X 100
。 我测试了一些尺寸为100 x 100
样品面,效果非常好。 如果情况并非如此,则300 - 400
px宽度应该可以正常工作。 但是,您需要调整参数以获得准确性。
Haar-Cascades在灰度图像中的效果更好吗?
它们仅适用于灰度图像。
在文章中 ,如果您阅读第一部分,您将会发现它的面部检测包括检测图像中的许多二进制模式,这基本上来自ViolaJones ,这是该算法的基础。
不同的照明条件会有所不同吗?
可能在某些情况下,主要是哈尔特征是照明不变的。
如果您考虑在不同的光照条件下拍摄绿色或红色光下的图像,那么它可能不会影响检测。哈尔特征(因为依赖于灰度)与输入图像的RGB颜色无关。 检测主要取决于输入图像中的梯度/特征。 因此,只要在输入图像中有足够的梯度差异,例如眉毛的强度低于前脑等,它就可以正常工作。
但考虑输入图像具有背光或非常低的环境光的情况。在这种情况下,可能未找到一些突出的特征,这可能导致未检测到面部。
detectMultiScale(params)的方法究竟做了什么?
我想,如果你已经读过article
了,那么你一定很了解它。
如果我想进一步分析眼睛闪烁,闭眼持续时间,嘴巴打呵欠,头部点头和头部方向来检测疲劳(困倦)通过使用支持向量机,任何建议?
不,我不建议您使用SVM执行这些类型的手势检测,因为运行10个不同的级联来结束当前的面部状态会非常慢,但我建议您使用一些面部标志检测框架,例如Dlib ,您也可以搜索其他一些框架,因为dlib的模型大小接近100MB,如果您想将其移植到移动设备,它可能不适合您的需求。 所以关键是**面部地标检测**,一旦你得到标记的全脸,你可以得出结论,如果嘴巴打开或眼睛闪烁,它可以实时工作,所以你的视频处理赢了'受苦很多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.