这是关于人脸的第①篇原创!(源码在第三篇)
人脸识别的英文名称是 Face Recognition,前段时间查找资料学的时候发现,不少人将人脸识别和人脸检测(Face Detection)混为一谈,很大程度上增加了查询学习资料的难度,这里在参照一些前辈的基础上,自己动手敲写代码,整理出了一个完整的版本。
此系列文章将从理论到实践进行整合:分三篇进行叙述,第一篇从零说人脸识别,保证大多数朋友能通过这篇文章了解到人脸识别的概念,并且能够形成一个基本的框架。第二篇将进行初步的实践,包括人脸图像的采集,和如何利用opencv已有的模型根据人脸图像进行训练,得到需要的分类器。第三篇则是综合篇,将程序以模块化进行展示,以文档形式实现人脸识别和建立MFC程序实现人脸识别。
一、人脸检测和人脸识别
首先需要介绍下人脸识别和人脸检测的不同。人脸检测指的是对一幅图片进行检测,检测图片中是否包含有人脸;而人脸识别则是在人脸检测的基础上,不仅要检测出是否该图片中存在人脸,更要进一步将检测出的人脸图像与已有人脸库中的进行对比,识别出该人脸图像对应库中的哪一个。人脸检测的相关知识可以参照微信公众号里(Mr_cplus)的相关历史文章。
二、人脸识别的大概流程
人脸识别大体上分为四步:人脸图像采集及检测、人脸图像预处理、人脸图像特征提取、匹配与识别。
(1)人脸图像采集及检测
人脸图像的采集指的是按照所研究的目标(比如研究不同姿态下的人脸识别),采集一定数量的图像数据整理成库。当前学术界已有许多现成的人脸库,满足基本的研究需求,当然也可以在这些数据库的基础上进行添加(比如将自己的人脸添加进某数据库)。当前较为常用的人脸图像数据库有:
1. FERET人脸数据库
由FERET项目创建,包含14,051张多姿态,光照的灰度人脸图像,是人脸识别领域应用最广泛的人脸数据库之一.其中的多数人是西方人,每个人所包含的人脸图像的变化比较单一.
2. MIT人脸数据库
由麻省理工大学媒体实验室创建,包含16位志愿者的2,592张不同姿态,光照和大小的面部图像.
3. Yale人脸数据库
由耶鲁大学计算视觉与控制中心创建,包含15位志愿者的165张图片,包含光照,表情和姿态的变化.
4. Yale人脸数据库B
包含了10个人的5,850幅多姿态,多光照的图像.其中的姿态和光照变化的图像都是在严格控制的条件下采集的,主要用于光照和姿态问题的建模与分析.由于采集人数较少,该数据库的进一步应用受到了比较大的限制.
5. PIE人脸数据库
由美国卡耐基梅隆大学创建,包含68位志愿者的41,368张多姿态,光照和表情的面部图像.其中的姿态和光照变化图像也是在严格控制的条件下采集的,目前已经逐渐成为人脸识别领域的一个重要的测试集合.
6. ORL人脸数据库
由剑桥大学AT&T实验室创建,包含40人共400张面部图像,部分志愿者的图像包括了姿态, 表情和面部饰物的变化.该人脸库在人脸识别研究的早期经常被人们采用,但由于变化模式较少,多数系统的识别率均可以达到90%以上,因此进一步利用的价值已经不大.
……
(2)人脸图像预处理
此处主要指两方面:一个是如何将获取的人脸图像进行一些处理,使之和待放入的人脸库内图片数据有相同的尺寸,格式等;另一个是指将整体库内图片进行处理,使之满足后面图像特征提取以及识别中的要求。
(3)人脸图像特征提取
人脸图像特征提取是指按照一定的算法,将人脸图像进行处理,提取出特征信息,形成特征矩阵等,之后用于分类器的训练。特征提取的算法往往决定着识别效果的好与坏。
(4)匹配与识别
人脸图像经过特征提取形成了一定的特征矩阵,之后将待识别的人脸图片(或者视频中的某些帧)当作输入,按照同样的特征提取算法,形成其人脸图的矩阵,之后与利用分类器进行分类,识别其属于库内的哪一个类别。
三、人脸识别的常用方法
人脸识别方法有很多,当前大体可以分为四类:
- 基于人脸特征点的识别算法(Feature-based recognition algorithms)。
- 基于整幅人脸图像的识别算法(Appearance-based recognition algorithms)。
- 基于模板的识别算法(Template-based recognition algorithms)。
- 利用神经网络进行识别的算法(Recognition algorithms using neural network)。
四、部分结果的提前展示
此次动手实践利用的人脸数据库是ORL人脸数据库,并且为了识别自己的人脸写了一个拍照程序自拍,将采集到的自己的图片信息加入该数据库,形成一个新的包含有自己人脸信息的数据库。
1、以文档程序为例进行展示,当摄像头检测到的人脸是自己时,会“夸"自己是“ 大帅比”,检测结果不是自己时会显示“大丑逼”。哈哈哈,我长的帅已经不是秘密了!(41是指识别判断的结果,41对应我自己,ORL中原有40个人)
2、以MFC程序为例进行展示。同样,当摄像头检测到的人脸是自己时,会“夸"自己是“ 大帅比”,检测结果不是自己时会显示“大丑逼”。而且可以设定当检测结果为数据库中的某一个时,可以在另一个图片控件(picture control)中显示对应一张人脸库中的图像。(各种BUTTON表示不同功能,在接下来的两篇中将进行介绍。)