目录
1.项目背景:
人类的面部表情是其最直接有效的情绪表达方式,针对表情识别技术的研究被认为是未来人机情感交互的主要发展方向。美国的心理学家Ekman和Friesen经过大量的实验与测试后,将人类的表情定义为以下六类:生气(Angry)、厌恶(Disgust)、恐惧(Fear)、高兴(Happiness)、悲伤(Sadness)和惊讶(Surprise)。实际情况下为了和无表情有所区分,一般还增加一类:正常(Neutral),共计7种基础表情,如图1所示。在这个人工智能技术成为热门的时代,人脸表情识别已成为其中的一项研究热点,而卷积神经网络、深度信念网络和多层感知器等端对端的算法在人脸面部表情识别领域的运用尤为广泛。
图1-人类常见的七种表情
目前,人脸识别( Facial Recognition, FR)精度已经超过人眼,人脸表情识别作为FR技术的一个重要组成部分,在计算机视觉、人机交互和情感计算中有着广泛的研究前景,包括人机交互、情绪分析、智能安全、娱乐、网络教育、智能医疗等。人脸表情识别的主要框架分为三个步骤:图像预处理、人脸检测和表情分类,如图2所示。
图2-人脸表情识别步骤
图片预处理通过调整大小和色彩优化图像,减少光照和角度的干扰,提升模型准确性。人脸检测算法用于定位图片中的一个或多个人脸位置,以便进行表情识别。早期研究依赖特征工程和分类算法,如LBP、HOG和Haar特征,这些方法虽简便但适应性有限。本文采用深度学习,训练卷积神经网络构建表情分类模型,实现更快速、准确的表情识别。
2.人脸检测
人脸检测就是用来判断一张图片中是否存在人脸的操作。如果图片中存在人脸,则定位该人脸在图片中的位置;如果图片中不存在人脸,则返回图片中不存在人脸的提示信息。人脸检测是表情识别中必不可少的环节,其检测效果的好坏,将直接影响整个系统的性能优劣。如图3所示,绿色矩形框代表了从图片中检测到的人脸图像位置。
图3-人脸检测示意图
在本文中,摄像头捕获人脸面部图像后,利用Haar特征和Adaboost级联分类器将捕获的图像进行人脸检测。本文使用的是OpenCV中的人脸检测方法——Haar级联分类器,该方法思路如下:
- 使用一个检测窗口在图片上滑动,提取该窗口内图片的特征;
- 通过分类器判断该窗口中是否存在人脸;
- 如果该窗口中存在人脸则返回该窗口坐标,如果不存在人脸则重复步骤(1);
- 若图片的全部区域被扫描完毕,结束检测。
Haar级联分类器可对一整张图片进行多区域、多尺度的检测。多区域检测,即将图片划分为多块,对每个块(检测窗口)进行检测。在人脸检测过程中,出现同一个人脸被多次检测时,需要进行区域的合并,该过程通常使用非极大值抑制(Non-Maximum Suppression, NMS)[6],以防止人脸区域被多次检出的问题。
2.1 Haar特征
Haar特征,也称为Haar-like特征,是Viola-Jones识别器的核心组成部分。这种特征最初在《Robust Real-Time Face Detection》一文中被详细描述,并广泛用于人脸检测任务。Haar特征的提取方法相对简单,主要通过在图像上应用不同的模板来提取特征,然后选择最具代表性的特征进行分类。
Haar特征主要分为三类:边缘特征、线性特征、中心特征和对角线特征。这些特征通过特定的模板来提取,模板由黑色和白色矩形组成,其特征值计算为白色矩形像素值之和减去黑色矩形像素值之和。这种计算方式使得Haar特征能够反映图像中的灰度变化情况。
例如,脸部的某些特征如眼睛或嘴部周围的颜色通常比较深,而脸颊或额头等区域的颜色较浅,这种差异可以通过Haar特征有效地捕捉。然而,Haar特征对于简单的图形结构如边缘和线段较为敏感,因此主要用于描述具有特定方向(如水平、垂直或对角)的结构。
在实际应用中,Haar特征通过不同模板的黑白区域像素值差异进行提取。这些模板的设计使得它们能够捕捉到图像中特定方向上的灰度变化,从而用于描述人脸等复杂图案的特定特征。尽管Haar特征具有一定的局限性,只能描述具有特定方向的结构,但其在人脸检测领域的应用表明了其有效性和实用性。
图4-Haar特征采用的特征模板
Haar特征模板由相邻的黑白矩形组成,通过计算白色矩形像素值之和与黑色矩形像素值之和的差来提取图像特征。这些矩形特征对简单图形结构如边缘和线段敏感,适用于区分人脸与非人脸区域。在图像中移动这些模板可以量化人脸特征,从而帮助识别人脸。图5展示了用Haar特征提取人脸图像特征的过程,其中模板应用于图像不同区域以生成用于分类的数据。
图5-Haar特征提取过程演示
2.2 级联分类器
OpenCV在人脸检测中需计算检测区域的Haar特征值。这些值由AdaBoost算法分析,以判断是否存在人脸。AdaBoost算法结合多个弱分类器形成一个强分类器。为提高检测效果,OpenCV采用级联分类器,串联多个基于AdaBoost的强分类器。在检测过程中,仅当所有分类器均判定存在人脸时,该区域才被认定为人脸区域。级联分类器方法提高了人脸检测的准确性和效率。
图6-基于级联分类器的人脸检测流程
将所有特征应用于所有训练图像,对于每个特征,算法会找到最佳的阈值,该阈值会将人脸分为正面和负面。在此过程中会出现错误或分类错误,算法选择错误率最低的特征,即对人脸和非人脸图像进行最准确分类的特征。在开始时,每个图像的权重均相等,在每次分类后,错误分类的图像的权重都会增加。然后执行相同的过程,将计算新的错误率并据此更新权重。重复进行该过程,直到达到所需的精度或错误率或找到所需的功能数量为止。
2.3 OpenCV人脸检测
以Haar特征分类器为基础的对象检测技术是一种非常有效的对象检测技术,它是基于机器学习的,使用大量的正负样本训练得到分类器。其实就是基于对人脸特征的描述,分类器根据训练的样品数据进行训练,完成后即可感知读取到的图片上的特征,进而对图片进行人脸