当帧中没有人脸时,OpenCV 中的人脸检测器会变慢

Posted

技术标签:

【中文标题】当帧中没有人脸时,OpenCV 中的人脸检测器会变慢【英文标题】:Face detector in OpenCV becoming slow when there is no face in the frame 【发布时间】:2014-09-11 01:33:34 【问题描述】:

我正在尝试使用 OpenCV 中的 Viola-Jones 人脸检测器实现带有网络摄像头输入的人脸检测程序,它工作正常,只是当帧中没有检测到人脸时它会慢 10 倍左右。

这真的很奇怪,因为如果框架中没有人脸,大多数窗口将在级联的早期阶段被拒绝,我猜它应该稍微快一点(不慢!)。

出于某些原因,我正在使用 detectMultiScale 函数(不是 cvHaarDetectObjects 函数),但我认为这无论如何都不重要。

谁能给我一个关于这个问题的建议吗? 提前致谢。

【问题讨论】:

【参考方案1】:

您是否尝试添加要检测的面部矩形的最小和最大尺寸? 你也可以检查一下你的金字塔比例值,它必须>1,如果太慢,尝试使用更高的值,检测不会那么好,但会更快。

    cv::CascadeClassifier cascade;
    // ... init classifier
    cv::Mat grayImage;
    // ... set image
    std::vector<cv::Rect> > results;
    cv::Size minSize(60,60);
    cv::Size maxSize(80,80);
    int minNeighbors= 3; // edited
    float pyramidScale = 1.1f;

    cascade.detectMultiScale(grayImage, results, pyramidScale, minNeighbors,
            0 , minSize, maxSize);

【讨论】:

帧中有人脸时速度很快(30 fps)。这就是为什么它如此奇怪... scaleFactor = 1.1, minNeighbors = 3, minSize = (50, 50), maxSize = frame size 这些是我现在使用的参数。顺便说一下,第 4 个参数不是要检测的人脸数。将它们合并为一个最终结果的相邻候选区域的最小数量。 我的错,但对我来说“maxSize = frame size”是问题的关键。通过设置一个巨大的最大尺寸,我遇到了类似的问题。 即使我没有设置 maxSize,我也可以使用“cvHaarDetectObjects 函数”执行相同的操作。但可以肯定的是,无论如何我都应该尝试改变这个值。谢谢你的回复。

以上是关于当帧中没有人脸时,OpenCV 中的人脸检测器会变慢的主要内容,如果未能解决你的问题,请参考以下文章

使用 AR Foundation 检测图像中的人脸

使用 opencv 和 node 比较两个人脸的相似度

flex中的人脸检测

opencv 人脸检测中的xml可以修改吗

opencv_人脸检测模型训练人脸识别

Android中的人脸检测?