今天把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的训练样本的问题,用自带的检测器对于正脸的检测率会高很多,而对于侧脸的检测效果很差,需要后期自己训练模板来检测。这是下一步的工作。
本文对比了Opencv中四种不同的人脸检测器(haarcascade_frontalface_alt, haarcascade_frontalface_alt_tree, haarcascade_frontalface_alt2, haarcascade_frontalface_default)的效果,通过测试发现各种检测器在处理正面人脸时表现较好,但在侧脸检测方面效果不佳。

2万+

被折叠的 条评论
为什么被折叠?



