如何提高人脸检测正确率

21人阅读 评论(0) 收藏 举报
分类:

原文地址https://blog.csdn.net/u010402786/article/details/52261933

零、检测

  接上篇博文继续探讨人脸检测的相关内容,本文会给出Opencv中自带的人脸检测的相关对比以及Opnev检测中常用的标注等相关操作。人脸检测是一个非常经典的问题,但是还是有一些常见的问题出现在实际使用当中: 
   
  (1)误检(把非人脸的物体当作人脸)较多,非人脸图像当作人脸送入后续算法,会引起一系列不良后果。 
  (2)漏检问题,例如戴墨镜、大胡子、逆光条件、黑种人、倾斜姿态较大的脸无法检测到。 
  

一、人脸检测分类器对比

序号级联分类器的类型XML文件名
1人脸检测器(默认)haarcascade_frontalface_default.xml
2人脸检测器(快速的Haar)haarcascade_frontalface_alt2.xml
3人脸检测器(快速的LBP)lbpcascade_frontalface.xml
4人脸检测器(Tree)haarcascade_frontalface_alt_tree.xml
5人脸检测器(Haar_1)haarcascade_frontalface_alt.xml

    
   Haar特征,毫无疑问Haar特征用在人脸检测里具有里程碑式的意义。博主针对正面人脸分类器进行了实验,总共有4个,alt、alt2、alt_tree、default。对比下来发现alt和alt2的效果比较好,alt_tree耗时较长,default是一个轻量级的,经常出现误检测。针对alt和alt2两者,在同一个视频的对比中检测部分alt要略微好于alt2。接下来是一些具体的对比:

(1)检测时间上对比

图像Haar_altHaar_alt2lbp
复杂背景图像20542309948
简单背景图像912964326

  
(2)检测结果上对比:

图像Haar_altHaar_alt2lbp
复杂背景图像707069
简单背景图像277283292

二、detectMultiScale函数

  选择最终的人脸分类器后,若想在这个基础上继续优化,那就试试这个detectMultiScale函数。具体可以查看Opencv源码,下面给出这个函数的讲解:

void detectMultiScale(   
    const Mat& image,   
    CV_OUT vector<Rect>& objects,   
    double scaleFactor = 1.1,   
    int minNeighbors = 3,    
    int flags = 0,   
    Size minSize = Size(),   
    Size maxSize = Size()   
); 

函数介绍: 
参数1:image–待检测图片,一般为灰度图像加快检测速度; 
参数2:objects–被检测物体的矩形框向量组; 
参数3:scaleFactor–表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%; 
参数4:minNeighbors–表示构成检测目标的相邻矩形的最小个数(默认为3个)。 如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框; 
参数5:flags–要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,函数将会使用Canny边缘检测来排除边缘过多或过少的区域, 因为这些区域通常不会是人脸所在区域; 

参数6、7:minSize和maxSize用来限制得到的目标区域的范围。如果视频中误检到很多无用的小方框,那么就把minSize的尺寸改大一些,默认的为30*30。

三、视频标注

  视频标注中必不可少的就是画框和文字标注:

//视频画框
for (vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++)
        rectangle(img, cvPoint(r->x, r->y), cvPoint(r->x + r->width - 1, r->y + r->height - 1), Scalar(255, 0, 255), 3, 8, 0);

//文字标注
putText(imgForShow, p.first, Point(BBox.x, BBox.y), FONT_HERSHEY_PLAIN, 2, Scalar(255, 0, 0));

查看评论

opencv提高之人脸检测

上一篇介绍了cascade分类器的训练,这里给出训练好的xml文件进行人脸检测的代码(由于眼睛发炎不能长时间看电脑屏幕,以后补详细介绍)#include #include #include #i...
  • keith_bb
  • keith_bb
  • 2017-05-04 17:46:51
  • 842

算法优化二——如何提高人脸检测正确率

提高人脸检测正确率,如何使用Opencv中自带的人脸分类器
  • u010402786
  • u010402786
  • 2016-08-20 16:27:26
  • 7011

号称正确率100%的人脸识别算法

  • 2009年06月25日 19:55
  • 11.43MB
  • 下载

如何提高人脸检测速度

首先,我承认这个题目有点标题党。之所以写这篇,因为发现微信微博上有很多公司介绍他们的技术,但都是说如何如何牛,但缺少技术细节,对读者帮助有限。因此写一点相对干货多的东西,希望能帮助大家。如有谬误,也请...
  • wtq1993
  • wtq1993
  • 2016-08-11 10:07:38
  • 1081

在语言模型文件中更新词汇以提高识别正确率

完成CMU Sphinx Toolkit到UNICODE的移植后,由于其自身支持的中文词汇太少且过于简单,实际生活中的很多词汇无法识别,由于其缺少开发文档,只能在代码跟踪的过程里心烦了。 于是想,肯定...
  • lifesider
  • lifesider
  • 2011-06-18 10:33:00
  • 2871

提升人脸检测效率的方法总结

人脸检测是一个非常经典的问题,很多人认为这是一个“已经解决”了的问题。人脸检测最经典的方法是Haar+AdaBoost。采用开源的Haar+AdaBoost实现(如OpenCV中的训练和检测程序),我...
  • u012554092
  • u012554092
  • 2017-07-25 14:56:18
  • 726

已经证实提高机器学习模型准确率的八大方法

我从实践中学习了到这些方法。相对于理论,我一向更热衷于实践。这种学习方式也一直在激励我。本文将分享 8 个经过证实的方法,使用这些方法可以建立稳健的机器学习模型。希望我的知识可以帮助大家获得更高的职业...
  • u012556077
  • u012556077
  • 2016-02-08 20:21:04
  • 591

可视化展示神经网络是如何将分类正确率提升的

主旨这篇从可视化的角度形象说明神经网络到底如何提升分类正确率,不会涉及数学推导和模型原理,目的在于帮助读者建立神经网络对数据处理的形象化概念。备注这篇最初发表于我的知乎专栏:程序员深度学习笔记,结合知...
  • wangyao_bupt
  • wangyao_bupt
  • 2017-04-30 16:00:30
  • 947

opencv人脸检测输出的置信率

让opencv输出人脸检测的得分(置信率) 最近项目略多,其中一个需要找出一些和脸比较像但是不是脸的负样本,想用opencv的人脸检测器检测到的错误脸作为这样的负样本。 但是国内(...
  • u011783201
  • u011783201
  • 2016-08-09 10:46:02
  • 738

英语阅读太难?掌握6大技巧让正确率达到90%

参加过英语(精品课)考试的人应该都知道,在英语考试中,阅读理解部分的分值占整个试卷分值的很重,但又很容易丢分。150分题要想上100分,阅读理解就一定不可以丢分太多。 所以做阅读速度的快慢、对文章内...
  • kwame211
  • kwame211
  • 2018-01-06 17:20:47
  • 182
    个人资料
    等级:
    访问量: 1万+
    积分: 368
    排名: 21万+
    玩耍园地

    最新评论