Haar-Cascade 分类器的精度调优

Posted

技术标签:

【中文标题】Haar-Cascade 分类器的精度调优【英文标题】:Accuracy tuning for Haar-Cascade Classifier 【发布时间】:2015-02-21 18:16:56 【问题描述】:

我正在使用 Haar-Cascade 分类器来检测人脸。

我目前面临以下功能的一些问题:

void ImageManager::detectAndDisplay(Mat frame, CascadeClassifier face_cascade)


    string window_name = "Capture - Face detection";
    string filename;

    std::vector<Rect> faces;
    std::vector<Rect> eyes;
    Mat frame_gray;
    Mat crop;
    Mat res;
    Mat gray;
    string text;
    stringstream sstm;


    cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
    equalizeHist(frame_gray, frame_gray);

    // Detect faces
    face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));

    // Set Region of Interest
    cv::Rect roi_b;
    cv::Rect roi_c;

    size_t ic = 0; // ic is index of current element


    for (ic = 0; ic < faces.size(); ic++) // Iterate through all current elements (detected faces)  
    

        roi_c.x = faces[ic].x;
        roi_c.y = faces[ic].y;
        roi_c.width = (faces[ic].width);
        roi_c.height = (faces[ic].height);



        crop = frame_gray(roi_c);

        faces_img.push_back(crop);

        rectangle(frame, Point(roi_c.x, roi_c.y), Point(roi_c.x + roi_c.width, roi_c.y + roi_c.height), Scalar(0,0,255), 2);


    

    imshow("test", frame);
    waitKey(0);

    cout << faces_img.size();



相框是我要扫描的照片。

face_cascade 是分类器。

【问题讨论】:

可能将 minNeighbours 参数从 2 增加到 5(直到您开始错过积极因素)。 哇,它有效。谢谢 顺便说一句,如果您发现更好的错误检测,请随时 add them here 【参考方案1】:

在内部,CascadeClassifier 会进行多个检测,并将它们分组。

minNeighbours(在 detectMultiScale 调用中)是在大约同一个地方的检测数量,需要算作有效检测,因此将其从当前的 2 增加到 5 左右,直到您开始错过积极的一面。

【讨论】:

【参考方案2】:

作为对 berak 声明的补充,如果您不只在图像上做这些事情,它不仅是关于减少/增加 detectMultiScale 参数。您将面临不允许用户使用应用程序的性能问题。

性能问题取决于计算错误。计算所需要的只是测试。 如果您不想在不同的光照条件下获得最佳结果(因为这是依赖于视觉的信息),则必须先缩放输入数组,然后再将其作为参数发送给 detectMultiScale 函数。检测完成后,重新缩放到以前的大小(可以通过更改用作 detectMultiScale 参数的矩形大小来完成)。

【讨论】:

以上是关于Haar-Cascade 分类器的精度调优的主要内容,如果未能解决你的问题,请参考以下文章

了解二元分类器的精度和召回结果

使用 SVM 作为图像分类器的精度/F 分数是不是可以达到 10%?

常用精度调优方法

Weka 分类器精度

使用sklearn自带的贝叶斯分类器进行文本分类和参数调优

算法 | 使用sklearn自带的贝叶斯分类器进行文本分类和参数调优