Opencv - Haar级联 - 面部跟踪非常慢

use*_*975 9 c++ opencv face-recognition face-detection

我开发了一个使用OpenCV库通过相机跟踪人脸的项目.我用haar cascade haarcascade_frontalface_alt.xml来检测脸部.

我的问题是,如果从网络摄像头捕获的图像不包含任何面部,则检测面部的过程非常慢,因此相机的图像会连续显示给用户,会延迟.

我的源代码:

void camera() 
{
    String face_cascade_name = "haarcascade_frontalface_alt.xml";
    String eye_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
    CascadeClassifier face_cascade;
    CascadeClassifier eyes_cascade;
    String window_name = "Capture - Face detection";
    VideoCapture cap(0);

    if (!face_cascade.load(face_cascade_name))
        printf("--(!)Error loading\n");

    if (!eyes_cascade.load(eye_cascade_name))
        printf("--(!)Error loading\n");

    if (!cap.isOpened()) 
    {
        cerr << "Capture Device ID " << 0 << "cannot be opened." << endl;
    } 
    else 
    {
        Mat frame;
        vector<Rect> faces;
        vector<Rect> eyes;
        Mat original;
        Mat frame_gray;
        Mat face;
        Mat processedFace;

        for (;;) 
        {
            cap.read(frame);
            original = frame.clone();    
            cvtColor(original, frame_gray, CV_BGR2GRAY);
            equalizeHist(frame_gray, frame_gray);
            face_cascade.detectMultiScale(frame_gray, faces, 2, 0,
                    0 | CASCADE_SCALE_IMAGE, Size(200, 200));

            if (faces.size() > 0)
                rectangle(original, faces[0], Scalar(0, 0, 255), 2, 8, 0);

            namedWindow(window_name, CV_WINDOW_AUTOSIZE);
            imshow(window_name, original);
        }

        if (waitKey(30) == 27)
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

Tot*_*oro 1

我经常使用 Haar 级联分类器,在配备 4GB RAM 和 2GHz CPU 的 Intel PC/Mac (Windows/Ubuntu/OS X) 上,可以轻松地以 15 帧/秒的速度对 640x480 图像进行人脸检测。你的配置是什么?

您可以尝试以下一些操作。

  1. 您不必namedWindow(window_name, CV_WINDOW_AUTOSIZE);在每个框架内创建窗口 ( )。只需先创建它并更新图像即可。

  2. 你可以尝试一下在没有直方图均衡的情况下它运行的速度有多快。并不总是需要网络摄像头。

  3. 正如上面 Micka 所建议的,您应该检查您的程序是在调试模式还是发布模式下运行。

  4. 使用分析器查看是否存在瓶颈。

  5. 如果您还没有这样做,您是否测量过注释掉面部检测和绘制矩形时获得的帧速率?

  • 我在 900MHZ RPI 上获得 2 FPS (2认同)