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