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 分类器的精度调优的主要内容,如果未能解决你的问题,请参考以下文章