今天把opencv自带的几个frontface检测器做了一个效果比较
frontface检测器如下:
haarcascade_frontalface_alt.xml haarcascade_frontalface_alt_tree.xml haarcascade_frontalface_alt2.xml haarcascade_frontalface_default.xml |
核心代码:
//检测器加载路径 //char* cascade_name ="D://haarcascade_frontalface_alt.xml"; //3333.56ms num = 63 //char* cascade_name ="D://haarcascade_frontalface_alt_tree.xml"; //1423.51ms num=48 //char* cascade_name ="D://haarcascade_frontalface_alt2.xml"; //2243.31ms num = 63 char* cascade_name ="D://haarcascade_frontalface_default.xml"; //3996.3ms num= 80 //加载检测器 CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); //调用检测算法 double t = (double)cvGetTickCount(); CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, 1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/, cvSize(30, 30) ); t = (double)cvGetTickCount() - t; printf( "detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.) ); |
我在网上找了一张毕业照来做测试(随便在百度上搜的,不知道侵犯肖像权没有,如有冒犯请第一时间联系我!)
检测器名称 | 耗时(ms) | 检测结果(目标个数) |
alt | 3333.56 | 63 |
alt_gree | 1423.51 | 48 |
alt2 | 2243.31 | 63 |
default | 3996.3 | 80 |
使用haarcascade_frontalface_alt检测器,所有人脸都检测到了,但有多个误检,且耗时很长
使用haarcascade_frontalface_alt_tree检测器,效果不错,只有一个漏检,有两个误检
使用haarcascade_frontalface_alt2检测器,所有人脸都检测到了,但有多个误检
使用haarcascade_frontalface_default检测器,检测效果较差
另外,我又用以上几种检测器测试了下面场景,效果都不是很好,其中,haarcascade_frontalface_alt_tree检测器一个也没有检测到,这个应该是opencv的训练样本的问题,用自带的检测器对于正脸的检测率会高很多,而对于侧脸的检测效果很差,需要后期自己训练模板来检测。这是下一步的工作。