下面的文章将为您概述幕后发生的事情,我强烈建议您阅读这篇文章。
更高的相机分辨率是否更适合 Haar-Cascades?
不一定,cascade.detectMultiScale
有参数可以针对各种输入宽度、高度情况进行调整,例如minSize
和maxSize
,这些是可选参数,但是,如果您可以控制输入图像大小,则可以调整这些以获得可靠的预测。如果您将其设置minSize
为较小的值并忽略,maxSize
那么它也适用于较小和高分辨率的图像,但性能会受到影响。另外,如果您现在想象,为什么高分辨率和低分辨率图像之间没有区别,那么您应该考虑在cascade.detectMultiScale
内部将图像缩放到较低的分辨率以提高性能,这就是为什么定义maxSize
和minSize
对于避免任何不必要的重要迭代。
我是否必须以一定比例捕获视频帧?例如(100 像素 X100 像素)
这主要取决于您传递给cascade.detectMultiScale
. 我个人认为100 x 100
对于帧中较小的人脸检测来说太小了,因为在将帧调整为更小的尺寸时,一些特征会完全丢失,并且cascade.detectMultiScale
高度依赖于输入图像中的梯度或特征。
但是如果输入帧只有人脸作为主要部分,并且没有其他较小的人脸悬在后面,那么你可以使用100 X 100
. 我已经测试了一些尺寸的样本面,100 x 100
效果很好。如果不是这种情况,那么300 - 400
px 宽度应该可以正常工作。但是,您需要调整参数以达到准确性。
Haar-Cascades 在灰度图像中效果更好吗?
它们仅适用于灰度图像。
在本文中,如果您阅读了第一部分,您就会知道,人脸检测是由检测图像中的许多二进制模式组成的,这基本上来自ViolaJones论文,该论文是该算法的基础。
不同的光照条件有区别吗?
可能在某些情况下,大部分 Haar 特征是光照不变的。
如果您考虑在不同的光照条件下拍摄绿光或红光下的图像,那么它可能不会影响检测,haar 特征(因为依赖于灰度)与输入图像的 RGB 颜色无关。检测主要取决于输入图像中的梯度/特征。因此,只要输入图像中有足够的梯度差异,例如眉毛的强度低于前额等,它就可以正常工作。
但是考虑输入图像有背光或环境光非常低的情况,在这种情况下,可能没有找到一些突出的特征,这可能导致无法检测到人脸。
方法 detectMultiScale(params) 究竟做了什么?
我想,如果你已经阅读了article
, 到这个时候,那么你一定很了解它。
如果我想通过使用支持向量机进一步分析眨眼、闭眼持续时间、嘴巴打哈欠、点头和头部方向以检测疲劳(嗜睡),有什么建议吗?
不,我不建议您使用 SVM 执行这些类型的手势检测,因为运行 10 个不同的级联来得出当前的面部状态会非常慢,但是我建议您使用一些面部标志检测框架,例如Dlib,你也可以搜索一些其他的框架,因为 dlib 的模型大小接近 100MB,如果你想将它移植到移动设备上,它可能不适合你的需求。所以关键是**面部地标检测**,一旦你得到了全脸的标签,你就可以得出结论,比如嘴巴是否张开或眼睛是否在眨眼,并且它是实时工作的,所以你的视频处理不会' t 受很多苦。