1. 引言
计算机可以通过看人脸或视频来知道人们的心情,这叫做面部表情识别。这是一种让计算机能够感受和表达情绪的技术,也是一种让计算机和人类更好地沟通的技术。心理学家Mehrabian认为,情感表达主要是通过面部表情来传递的,其中面部表情的影响因素占到情感表达的55%,而语言和声音的影响因素分别只有7%和38%。
在2000年以后,计算机和人工智能以及其他相关技术取得了飞跃式的进步,人类对计算机的认识和需求也日益提高。人们不仅希望计算机能够像人类一样听、说、看,更迫切地希望计算机能够更好地理解和表达一些属于人类的思想,更加智能,从而帮助人们更快、更方便地完成工作 [1] 。面部表情是人类最常用的非语言沟通手段之一,它能够反映出人的内心感受和心理状态。如果计算机能够识别和理解人的面部表情,就可以实现更加人性化和亲切的人机交互模式。目前,面部表情识别技术已广泛应用于刑侦、医疗系统、电子商务等领域 [2] 。
但是如今的人脸识别会因为设备限制或外界干扰因素导致识别不准确或失败。也存在识别速度慢、识别精确度低等问题,通过改进后的haar特征提取的算法和Adaboost级联分类器可以尽可能解决速度慢、精确度低的问题。
2. 设计制作
2.1. 视频素材预处理
2.1.1. 信息采集
人脸识别技术的核心环节包括以下两个方面:首先定位图像中人脸的区域和尺寸。然后提取人脸的特征向量并与数据库中的特征向量进行匹配,以确定身份 [3] 。
通过本地摄像头对被测者实时采集信息。在摄像头下,会存在如人脸角度偏移、光线分布不均匀、曝光度过曝欠曝、人脸模糊、人脸有遮挡物、背景阻碍内容采集等因素,因此需要确保其在一个合适的环境下,进行表情识别的测试。
2.1.2. 视频处理
对于视频质量较低的测试项,若直接进行对其进行测试,会出现较为明显的错误情况,大大增大错误率,因此需要进行预处理,提高视频质量,增强人脸的面部特征,以此来更好的获取面部信息,提高表情识别的成功率。
2.1.3. 外部因素
预处理的内容主要通过人脸对齐以及图像增强。其中视频中人脸的方向尤为重要,他将决定计算机是否能识别到面部信息,要确保正对摄像头,使摄像头完全识别到脸的轮廓和眼睛,鼻子,嘴巴等特征项,其将作为人脸识别中的关键点,依据此信息建立人脸坐标系。视频读取时提高其分辨率,以此增加面部细节,同时进行高斯降噪,自动补帧,保证视频的流畅性以及清晰度。调整色偏,ISO,光圈大小以保证源视频的信息可靠度。最后还有背景内容,要确保被测试者有且仅有一个,没有其余的干扰项出现从而减少误差。
2.2. 设计思路
本软件调取摄像头权限,实时监控被测者的表情,分析被测者情绪,并将得到的数据进行处理,大致分为自然、高兴、厌恶、生气、疑惑、伤心、惊讶七种状态,并将数据发送给监测者。设计思路如图1所示:
2.3. 软件设计模块
系统模块结构
系统架构如图2:
1) 监控模块:监控被测者表情,将表情与配对模块进行匹配,若数据与配对模块中的内容相同,将内容发给处理模块。
2) 配对模块:模块中存放七种表情的数据,随时与监控模块中的数据匹配。
3) 处理模块:对监控模块发送过来的数据进行处理,根据数据内容,具体到是哪一种情绪,并将内容发送给显示模块。
4) 显示模块:监测者端的模块,负责接受处理模块的数据。并显示到屏幕之上。使得监测者能清楚被测者的情绪。
2.4. 人工检测
检测流程如图3所示:
3. 采用技术
根据被测者眼睛、眉毛、嘴巴等特征的变化来研究分析被测者状态,并以此为基础设计研发了基于表情识别技术的面部表情识别系统。该系统基本的工作流程是:开放摄像头权限,来实时监控被测者情绪,通过脸上各个部位的变化,将其分为自然、高兴、厌恶、生气、疑惑、伤心、惊讶七种状态,实时发送给监测者。
3.1. 人脸识别
3.1.1. 使用基于OpenCV库的Haar分类器方法
OpenCV是一款开源计算机视觉库,可跨平台使用,被广泛应用于多个领域涉及人脸识别、物体检测、图像分割、机器人视觉、增强现实、视频分析等 [4] 。
Haar分类器,它建立了boost筛选式级联分类器。它与ML库中其他部分相比,有不同的格局,因为它是在早期开发的,并完全可用于人脸检测。
Haar特征是一种图像特征,它可以看出图像中哪些地方颜色变化大,哪些地方颜色变化小。Haar特征有四种类型,每种类型都是用两个矩形来表示,一个白色的,一个黑色的,然后看白色的矩形里的颜色和黑色的矩形里的颜色的差别有多大。Haar特征可以用来找出人脸的一些特点,比如眼睛比脸颊黑,鼻梁比鼻梁旁边白,嘴巴比嘴巴周围黑。
Haar特征最主要的优势是它的计算非常快速,其中主要是因为它使用积分图的结构,如图4。
积分图的计算就是把每个点的值变成它左上角的所有点的值加起来。比如说,你想知道右下角的那个点的积分图的值,你就要把它左边的那个点的积分图的值,加上它上面的那个点的积分图的值,然后减去它左上角的那个点的积分图的值,再加上它自己的原来的值。这样就可以快速地算出任意一个区域里面所有点的值加起来是多少。但是要注意,第一行和第一列的点要特殊处理,因为它们没有左边或者上面的点。
积分图的公式可以表示为:
这个公式就是说,要算一个点的积分图的值,你就要把它左边的那个点的积分图的值,加上它上面的那个点的积分图的值,然后减去它左上角的那个点的积分图的值,再加上它自己的原来的值,如图5。这样就可以用积分图来算出任意一个方块里面所有点的值加起来是多少,只要看看方块的四个角的积分图的值,然后做一些简单的加减法就行了。其中积分图的构建如图6,哈尔特征模板如图7。
3.1.2. 采用改进的Adaboost算法
Freund和Schapire于1996年前后提出了一个实际可用的自适应Boosting算法AdaBoost [5] 。
Ada Boost算法是一种自适应增长算法和迭代算法,它向每轮添加新的弱分类器,直到达到预定的足够小的错误率。第一次分类后,重新调整错误分类样本的权重,增加错误分类样本的权重,使算法关注样本,在下一次分类中可以向误分类样本倾斜。每次训练都会得到一个弱分类器,在下一次训练中调整样本权重,直到总训练达到设定参数,所有得到的分类器都会线性组合,得到最终的强分类器 [6] 。
Adaboost的每一次训练都会生成一个分类器,如图8所示。其中,f表示特征的数值,θ表示划分点,p表示不等式的方向。这样的分类器是基于特征的弱分类器。

Figure 8. Adaboost classifier algorithm
图8. Adaboost分类器算法
而改进后的AdaBoost算法 [7] [8] [9] [10] 使用多分辨率搜索提高效率的主要思路如下:首先简单扫描图像,估计人脸区域的大致位置,并进行一次或多次粗略扫描;其次,找到面部最可能的区域,并做出有效的精确定位。算法流程为:先用相同分辨率的检测器扫描图片,标记所有可能的人脸位置U0,有特殊情况下没有检测到人脸,然后将结果记录为R0 = 0。人脸检测以与第一次不同的粗略分辨率执行,并标记所有可能的人脸位置U1。如果未检测到人脸,则结果写为R1 = 0。第三,如果R0 = 0和R1 = 0,则图像中没有人脸,结果直接输出。相反,以精细分辨率再次检测人脸位置U0和U1,并将其标记为U2。第四,由于相同的图像,人脸区域可能会被多次检测,因此在处理时,处理方法U0 ∩ U2,U1 ∩ U2,如果相交,则取四个顶点的平均值作为新顶点,整合到新顶点中,结果记录为U3,大大提高了识别效率。
3.2. 实验对比
通过不同的Haar特征算子对人脸图片进行不同尺度、不同步长的特征提取,将提取的特征作为输入,根据已标定的正负结果,进行模型自主学习训练,其实现的步骤大致分为几步:
1) 样本准备
人脸样本主要下载一些国际上出版的人脸图库,以及一些在线采集的常规人脸图片,其中必须包含彩色、黑白。由于尺寸不同,请使它们成为统一的尺寸。同时,收集非人脸的照片必须是多样化的。因为负样本的种类越多,算法的准确率就越高,正负样本应该包含不同角度的人脸照片,这样经过训练后,算法的准确率会很高。本文中的正样本量约为1000张人脸图片,负样本约为3000张。
2) 分类器训练
对于训练使用,设置分类器迭代次数和停止迭代的样本误差,正样本数应小于样本总数,否则会发生错误。让阳性样本库的每个图像单独取出进行训练,这样更详细,检测结果也会更准确。
3) 测试性能
重复2的操作来训练改进的分类器。分析了两个分类器的性能,为了准确测量数据,在比较实验中进行了多次实验和平均。研究发现,改进算法的训练时间明显缩短,准确率略有提高。
本文对两个分类器进行了多组实验,发现经过改进的算法时间上大大缩减,且人脸检测准确率也有所上升,达到预期的目标,如图9所示。
4. 作品演示
1) 开启软件,效果如图10。
2) 软件调用摄像头权限,加载人脸库,开始人脸识别,特征定位,效果如图11。
3) 监测对象的表情匹配度,并实时显示,在显示当前状态时,同时显示与其他表情的相似度。测试结果如下,分别是惊讶表情如图12、开心表情如图13、伤心表情如图14、厌恶表情如图15。
4) 退出软件。
5. 结论
本文设计并实现了一个基于harr分类器的人脸表情识别系统。系统通过摄像头获取视频数据,对数据进行处理,处理后的数据用基于Haar特征的级联分类器识别,识别后呈现在屏幕上。因此,我们的系统是一种有用的技术,可以在多种场景中应用,如检测患者状态、互动娱乐、安防监控等。本文介绍了人脸表情识别系统的原理和方法。人脸表情识别系统还有很多改进和优化的空间,需要进一步的研究和探索。
参考文献