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

零、检测

  接上篇博文继续探讨人脸检测的相关内容,本文会给出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_alt

Haar_alt2

lbp

复杂背景图像

2054

2309

948

简单背景图像

912

964

326

(2)检测结果上对比:

图像

Haar_alt

Haar_alt2

lbp

复杂背景图像

70

70

69

简单背景图像

277

283

292

二、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));

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

【深度解读】GANs实现:比较生成对抗网络(无需择优挑选)

一些理论性的GANs(生成对抗网络)的实现包括:DCGAN, LSGAN, WGAN, WGAN-GP, BEGAN,还有DRAGAN。 这篇文章执行了与论文结...

3245
来自专栏开源FPGA

基于FPGA的均值滤波算法实现

  我们为了实现动态图像的滤波算法,用串口发送图像数据到FPGA开发板,经FPGA进行图像处理算法后,动态显示到VGA显示屏上,前面我们把硬件平台已经搭建完成了...

2155
来自专栏机器之心

学界 | ImageNet 2017目标定位冠军论文:双路径网络

选自arXiv 作者:Yunpeng Chen等 机器之心编译 参与:蒋思源、Smith 最后一届 ImageNet 挑战赛刚刚落下帷幕,而新加坡国立大学参与的...

2637
来自专栏腾讯Bugly的专栏

深度学习三大框架对比

人工智能的浪潮正席卷全球,诸多词汇时刻萦绕在我们的耳边,如人工智能,机器学习,深度学习等。

83111
来自专栏机器学习算法与理论

《白话深度学习与Tensorflow》学习笔记(1)

刚入手一本《白话深度学习与Tensorflow》,哈哈,一直看深度学习很火,其实自己一知半解,都没有对这个领域进行一点系统的学习,现在准备看看这本书,开始入门。...

3598
来自专栏开源FPGA

基于FPGA的均值滤波算法的实现

  前面实现了基于FPGA的彩色图像转灰度处理,减小了图像的体积,但是其中还是存在许多噪声,会影响图像的边缘检测,所以这一篇就要消除这些噪声,基于灰度图像进行图...

2486
来自专栏深度学习-机器学习

深度学习三大框架对比

人工智能的浪潮正席卷全球,诸多词汇时刻萦绕在我们的耳边,如人工智能,机器学习,深度学习等。“人工智能”的概念早在1956年就被提出,顾名思义用计算机来构造复杂的...

2777
来自专栏有趣的Python

4-机器学习启蒙- 聚类和相似度模型聚类和相似度: 文档检索

4- 聚类和相似度模型 聚类和相似度: 文档检索 我们想从数据中推断出某种潜在的结构。 结构是一组相关观测。对于一个实际应用进行研究。 检索感兴趣的文档。 文...

3776
来自专栏深度学习入门与实践

【深度学习】用PaddlePaddle进行车牌识别(二)

  上节我们讲了第一部分,如何用生成简易的车牌,这节课中我们会用PaddlePaddle来识别生成的车牌。 ---- 数据读取   在上一节生成车牌时,我们可...

4618
来自专栏月色的自留地

图像识别基本算法之SURF

1388

扫码关注云+社区