from: http://www.rs-online.com/designspark/electronics/knowledge-item/content-862

一个人的脸部特征可以传达很多信息,如性别,大致年龄,性别以及情感等,因此,在过去三十多年的时间里有大量学者热衷于对人脸检测与人脸识别的研究。

人脸检测(Face Detection)是指在输入图像中确定所有人脸(如果存在) 的位置、大小和位姿的过程。人脸检测作为人脸信息处理中的一项关键技术,近年来已成为模式识别与计算机视觉领域内一项受到普遍重视,研究十分活跃的课题。人脸识别或辨认、人脸定位以及人脸追踪等都与人脸检测密切相关。

人脸定位的目的是确定图像中人脸的位置。假设一幅图像中只存在一张脸,则面部特征检测的目的是检测特征的存在和位置,如眼睛、鼻子(鼻孔) (眉毛) (嘴) (嘴唇)耳朵等。人脸识别或辨认是将输入图像与数据库中的图像比对,如果存在,报告匹配结果。人脸识别的目的是检验输入图像中的个体的身份,而人脸追踪方法是实时地、连续地估计在图像序列中的人脸的位置和可能的方向。面部表情识别涉及识别人类的情感状态(高兴、悲伤、厌恶等) 。很明显,在任何解决上述问题的自动识别系统中,人脸检测是第一步。

人脸检测应用

人脸检测可用于生物特征识别,通常做为人脸识别系统的一部分。人脸检测也可以用于视频监听、人机交互和图像数据库管理。一些最新的数码相机使用人脸检测来自动对焦。人脸检测也获得了市场的兴趣。电视机上可以集成摄像头来检测任何走过的人脸,然后计算该用户的种族、性别和年龄范围。一旦获得这些信息,可以针对性的播放广告。

人脸检测也可以用于节约能源。人们看电视或电脑的时候往往会做其他工作,这时候普通的显示器不能自动降低亮度来节省能源。智能系统可以识别用户的面部朝向,当用户不看屏幕时,可以自动降低亮度;在用户重新看屏幕时,再增加亮度。

随着近些年来国际形势的变化,特别是 9.11 事件之后,各国对自身重要设施的安保性能越发重视,也积极研发了一些自动人脸识别系统并投入实用。比如,美国 Identix 公司的 FaceIt系统,该系统基于局部特征分析(LFA),能在不同的光照,肤色,姿态,表情情况下得到良好的检测性能。我国的生物特征认证与安全技术研究中心(CBSR)则在 2004 年成功研制出了基于人脸、指纹、虹膜三种识别方法的快速通关系统(MRTD),取得了国际先进的整体性能。

人脸检测主要难点

人脸的自动检测是一类具有很大挑战性的问题,其主要难点在于:

(1)人脸是一类高度非刚性的目标,存在相貌,表情,肤色等差异;

(2)人脸上可能会存在一些附属物,诸如,眼镜,胡须等;

(3)人脸的姿态变化万千,并且可能存在遮挡物;

(4)待检测图像性质的差异。比如:待检图像的分辨率;摄录器材的质量等;

(5)光源的种类和角度。不同种类和角度的光源会对待检测的人脸产生不同性质的反射和不同区域的阴影。

人脸检测算法实现

到2000年为止,已经出现非常多的技术应用于检测人脸,但是都存在处理速度太慢或可靠性低的问题。直到2001年Viola和Jones提出了基于Haar特征的级联分类器用于对象检测,并于2002年由Lienhart和Maydt经过改进,状况才得到改变。这种对象检测器即快速又可靠,并且可以直接在OpenCV中使用这种分类器。还有一种是基于LBP特征的级联分类器,速度比Haar分类器快好几倍。Haar分类器的训练是独立于人脸检测过程的。分类器的训练分为两个阶段:

A. 创建样本,用OpenCV自带的creatsamples.exe完成。

B. 训练分类器,生成xml文件,由OpenCV自带的haartraining.exe完成。

OpenCV中的这两种分类器都已经是训练好的,可以直接使用。检测流程如下:

Viola-Jones人脸检测算法的主要贡献:

1. 提出积分图像(integral image),从而可以快速计算Haar-like特征。

Haar-like型特征是Viola等人提出的一种简单矩形特征,因为类似Haar小波而得名。Haar型特征的定义是黑色矩形和白色矩形在图像子窗口中对应的区域的权重灰度级总和之差。算子数量庞大时上述计算量显得太大,Viola等人发明了积分图方法,使得计算速度大大加快。

2. 利用Adaboost学习算法进行特征选择和分类器训练,把弱分类器组合成强分类器。

在离散Adaboost算法中,Haar-like特征算子计算结果减去某阈值,便可视为一个人脸检测器。因为其准确率不高,称为弱分类器。Adaboost算法的循环中,首先利用各种弱分类器对训练图片库进行分类,准确度最高的弱分类器保留下来,同时提高判断错误的图片的权重,进入下一循环。最终将每次循环所保留的弱分类器组合起来,成为一个准确的人脸检测器,称为强分类器。

3. 采用分类器级联提高效率。

瀑布型级联检测器是针对人脸检测速度问题提出的一种检测结构。瀑布的每一层是一个由adaboost算法训练得到的强分类器。设置每层的阈值,是的大多数人脸能够通过,在此基础上尽量抛弃反例。位置越靠后的层越复杂,具有越强的分类能力。 这样的检测器结构就想一系列筛孔大小递减的筛子,每一步都能筛除一些前面筛子楼下的反例,最终通过所有筛子的样本被接受为人脸。

OpenCV人脸检测原理

人脸检测属于目标检测(object detection) 的一部分,主要涉及两个方面:

  1. 先对要检测的目标对象进行概率统计,从而知道待检测对象的一些特征,建立起目标检测模型。
  2. 用得到的模型来匹配输入的图像,如果有匹配则输出匹配的区域,否则什么也不做。

OpenCV中Haar分类器的路径:

haarcascades目录下还有人的全身,眼睛,嘴唇,侧脸,鼻子,上半身等的Haar分类器。

那么我们该如何利用呢?可以参见这篇博文——【OpenCV入门指南】第十三篇 人脸检测:http://blog.csdn.net/morewindows/article/details/8426318。

这篇博文写的非常详细。以下摘录一些主要内容。

使用人脸的Haar特征分类器非常之简单,直接使用cvHaarDetectObjects。下面来看看这个函数的介绍。

函数功能:检测图像中的目录

函数原型

CVAPI(CvSeq*) cvHaarDetectObjects(

const CvArr* image,

CvHaarClassifierCascade* cascade,

CvMemStorage* storage,

double scale_factor CV_DEFAULT(1.1),

int min_neighbors CV_DEFAULT(3),

int flags CV_DEFAULT(0),

CvSize min_size CV_DEFAULT(cvSize(0,0)),

CvSize max_size CV_DEFAULT(cvSize(0,0))

);

函数说明

第一个参数表示输入图像,尽量使用灰度图以加快检测速度。

第二个参数表示Haar特征分类器,可以用cvLoad()函数来从磁盘中加载xml文件作为Haar特征分类器。

第三个参数为CvMemStorage类型,大家应该很熟悉这个CvMemStorage类型了,《OpenCV入门指南》中很多文章都介绍过了。

第四个参数表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%

第五个参数表示构成检测目标的相邻矩形的最小个数(默认为3个)。如果组成检测目标的小矩形的个数和小于 min_neighbors - 1 都会被排除。如果min_neighbors 为 0, 则函数不做任何操作就返回所有的被检候选矩形框,这种设定值一般用在用户自定义对检测结果的组合程序上。

第六个参数要么使用默认值,要么使用CV_HAAR_DO_CANNY_PRUNING,如果设置为CV_HAAR_DO_CANNY_PRUNING,那么函数将会使用Canny边缘检测来排除边缘过多或过少的区域,因此这些区域通常不会是人脸所在区域。

第七个,第八个参数表示检测窗口的最小值和最大值,一般设置为默认即可。

函数返回值

函数将返回CvSeq对象,该对象包含一系列CvRect表示检测到的人脸矩形。

这是该博文的其中一个运行结果:

如果你对OpenCV有所了解,可以到上面提出的博文页面参考具体的原代码。

OpenCV用于人脸检测相关推荐

  1. 使用OpenCV进行人脸检测(Viola-Jones人脸检测方法)

    扩展阅读: OpenCV用于人脸检测 参考文献:Paul Viola, Michael J. Jones. Robust Real-Time Face Detection[J]. Internatio ...

  2. Python图像处理,cv2模块,OpenCV实现人脸检测蔡徐坤

    前言 利用Python实现OpenCV实现人脸检测,废话不多说~ 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: cv2模块: 以及一些Python自带的模块. 环境搭建 ...

  3. 利用OpenCV实现人脸检测

    如何在一副图片中检测到人脸,这涉及到计算机图形学中一些非常复杂的计算,如果这些计算都靠程序员自己来编程,那么工作量就相当大.OpenCV全称是Open Computer Vision,是指开放的计算机 ...

  4. 【OpenCV实战】OpenCV实现人脸检测详解(含代码)

    OpenCV中有许多可以进行人脸.人眼检测的特征文件,今天我们利用OpenCV中自带的特征文件haarcascade_frontalface_default.xml来进行人脸检测. [OpenCV实战 ...

  5. opencv(人脸检测和识别)

    Opencv的人脸检测函数,定义了具体可跟踪对象类型的数据文件. Haar级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配. 两个图像的相似程度可以通过它们对应特征的欧式距 ...

  6. 基于opencv实现人脸检测

    基于opencv实现人脸检测 opencv简述 opencv是一个开源的计算机视觉库,它有着C++,Python,Java等接口,支持Windows,Linux,Mac OS,IOS 和 Androi ...

  7. 基于opencv的人脸检测(图片、视频、摄像头)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一.检测图片中的人脸 二.检测视频与摄像头中的人脸 总结 前言 人脸检测识别一直是个热门的研究问题,同时也是opencv中 ...

  8. MTCNN-将多任务级联卷积神经网络用于人脸检测和对齐

    论文链接:  https://kpzhang93.github.io/MTCNN_face_detection_alignment/,本文是根据自己的理解翻译的如有错误,还请见谅,评论提出,立马修 ...

  9. flutter 人脸检测_【转载】opencv实现人脸检测

    全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...

最新文章

  1. 上帝视角:程序员为什么需要理解 CPU?
  2. python简介怎么写-python中如何写类
  3. Silverlight数据加载时,等待图标显示与隐藏(Loading)
  4. 使用jdbc操作mysql数据库_java使用JDBC操作MYSQL数据库
  5. c语言变量强制转换,C语言——“=”中的强制类型转换
  6. 讓combobox也綁定數據表
  7. ASP.NET 2.0 中Cookies的Expires属性详解
  8. mesos 学习笔记-- mesos安装和配置
  9. php动态生成页面结构,PHP 动态生成静态HTML页面示例代码
  10. python3.6爬淘宝信息
  11. (Java)idea连接数据库
  12. sourceTree git工作流无法结束
  13. hough变换检测圆周_Hough变换检测圆(附:MATLAB程序)
  14. 电脑只能上微信不能打开网页_电脑可以上微信,但是网页打不开怎么解决
  15. Base64解码文件下载
  16. 如何知道计算机是否支持64位,使用鲁大师怎么查看电脑CPU是否支持64位系统?...
  17. pdf编辑器工具哪个好?好用的pdf编辑器一款就够!
  18. 家谱mysql_mysql家谱表查询某人所有后代
  19. Pearson,Kendall和Spearman三种相关分析方法的异同
  20. Socket 网络协议 等

热门文章

  1. Windows Phone Developer Tools Beta 发布
  2. 未来智能社会的一砖一瓦都需要今天我们一点点的探索发现!
  3. OVS DPDK--网桥配置(四)
  4. form表单刷新_《大胖 ? 小课》- 不用 js 实现文件无刷新上传
  5. BadTunnel:跨网段劫持广播协议
  6. 拆分一个字符串并把每个字符单独输出
  7. Python3并发检验代理池地址
  8. Java7中的switch支持String的实现细节
  9. 把blogengine当作cms作公司网站
  10. php https server_使用https,$_SERVER['HTTPS']却不等于on?