opencv自带人脸检测算法对比

今天把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检测器,所有人脸都检测到了,但有多个误检,且耗时很长

opencv自带人脸检测算法对比_第1张图片

使用haarcascade_frontalface_alt_tree检测器,效果不错,只有一个漏检,有两个误检

opencv自带人脸检测算法对比_第2张图片


使用haarcascade_frontalface_alt2检测器,所有人脸都检测到了,但有多个误检

opencv自带人脸检测算法对比_第3张图片


使用haarcascade_frontalface_default检测器,检测效果较差

opencv自带人脸检测算法对比_第4张图片




另外,我又用以上几种检测器测试了下面场景,效果都不是很好,其中,haarcascade_frontalface_alt_tree检测器一个也没有检测到,这个应该是opencv的训练样本的问题,用自带的检测器对于正脸的检测率会高很多,而对于侧脸的检测效果很差,需要后期自己训练模板来检测。这是下一步的工作。

opencv自带人脸检测算法对比_第5张图片

你可能感兴趣的:(opencv自带人脸检测算法对比)