c++ - 为什么 haar 级联很慢 opencv c++

标签 c++ opencv haar-classifier

我正在使用 haar 级联 来检测正面。我有以下代码:

int main()
{
    Mat image;

    cv::VideoCapture cap;
    cap.open(1); 

    int frame_idx = 0;
    time_t fpsStartTime, fpsEndTime;
    time(&fpsStartTime);
    for (;;)
    {
        frame_idx = frame_idx + 1;
        cap.read(image);

        CascadeClassifier face_cascade;
        face_cascade.load("<PATH");
        std::vector<Rect> faces;
        face_cascade.detectMultiScale(image, faces, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, Size(30, 30));

        // Draw circles on the detected faces
        for (int i = 0; i < faces.size(); i++)
        {
            Point center(faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5);

            ellipse(image, center, Size(faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);
        }

        cv::imshow("Detected Face", image);
        char k = cv::waitKey(1);
        if (k == 27)
            break;

        time(&fpsEndTime);
        double seconds = difftime(fpsEndTime, fpsStartTime);
        double fps = frame_idx / seconds;
        std::string fps_txt = "FPS: " + std::to_string(fps);  // fps_str.str();
        cout << "FPS :  " << fps_txt << endl;

    }
    return 0;
}

此代码运行良好,但 FPS 非常低。 FPS 约为 1fps,非常慢。我在配备英特尔 i5 CPU 的 Windows 10 笔记本电脑上运行它。我相信这不应该这么慢。

在 Debug模式下,它提供 ~1fps 但在 Release模式下它是 4-5fps,这又是非常慢的。我运行了一些 openvino 演示,例如 pedestrian detection它在相同的硬件上使用 2 个 openvino 模型,它给出了 ~17-20fps,这非常好。

我使用的是 USB 3.0 logitech brio 4k 相机,所以这不是低 fps 的原因。我的问题是为什么 haar 级联执行非常慢。无论如何我们可以提高它的速度并使其更有用。请帮忙。谢谢

最佳答案

您不应该在每个 帧上(重新)加载分类器。它应该在处理帧之前加载一次。

将以下语句移出 for 循环。

CascadeClassifier face_cascade;
face_cascade.load("<PATH");

请参阅 OpenCV Docs 上的演示.

关于c++ - 为什么 haar 级联很慢 opencv c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57141914/

相关文章:

c++ - 为什么 enable_shared_from_this 无法直接访问嵌入式 weak_ptr?

c++ - 递归累积和

c++ - c++中基类如何调用派生类传递的闭包?

c++ - 矩形图像可以用于opencv haar训练吗

opencv - 无法使用 opencv_createsamples.exe 创建样本

c++ - 如何在 MFC Dialog 应用程序中插入更多对话框?

python - opencv2 Aruco 库模块不适用于 python

c++ - Linux MAKEFILE 访问环境变量

opencv cascade.xml 格式

image - OpenCv在图像的圆形部分上应用过滤器