当前位置:首页 期刊杂志

基于OpenCV的人脸识别算法

时间:2024-05-04

廖周宇 王钰婷 陈科良

(河池学院计算机与信息工程学院 广西壮族自治区河池市 546300)

1 引言

人脸识别[1]是基于人的脸部特征信息进行身份识别的一种生物特征识别技术,简单来说就是用电子设备(如:相机、摄像头)收集到人脸图片或视频,从收集到的人脸图片或视频中查找人脸,如果找到就定位人脸的位置,然后根据位置截取人脸并对人脸进行特征提取,再把提取到的特征与特征数据库进行验证识别的一门技术。在国家公共安全、商业安全及社会安全等众多领域也有很多应用,其中之一就是部分高校用于门禁管理和教学点名系统[2]。但现实识别场景的多样性和背景的复杂性,需要研究出更高效、更精确的人脸检测和识别算法来满足未来更多的应用场景。文献[3]提出了在人脸图像预处理阶段采用了灰度直方图均衡化的技术,在构建特征脸的阶段选取了光照锥法进行光照补偿,以便于削弱系统中的光照影响。文献[4]研究了将人脸识别技术应用于移动端平台,通过Haar特征训练人脸图像,利用Open CV 与LBPH 算法相结合完成人脸识别。本文研究了特征脸(Eigenfaces)识别算法,对其原理和技术实现进行详细分析,并基于Open CV 对其进行改进和代码实现,经在多姿态人脸图像数据上验证,取得了较好的检测和识别效率和效果。

2 人脸检测改进

人脸检测是指对电子设备采集到的图像进行搜索,找到所有可能是人脸的位置,并返回人脸位置和大小的过程。人脸识别流程主要可分为训练部分和搜索部分,其中搜索部分是基于人脸检测所检测的人脸在人脸库进行搜索,所以人脸检测是人脸识别的关键环节之一,检测效果的好坏直接影响到人脸识别的效率。而OpenCV 库中的级联检测器只能直接检测正脸和左侧脸,对于其他姿态(如:遮挡脸,仰头脸)人脸检测效果差,检测耗时较长。因此,本人从三方面对人脸检测算法进行了改进,第一,检测范围方面,在OpenCV 库的环境上,基于HAAR 级联分类器实现了对正脸、左侧脸、右侧脸的检测,并结合鼻子和嘴巴实现了对五官脸的检测,使改进之后的人脸检测算法对于正脸、侧脸、仰脸、垂头脸、遮挡脸等不同姿态的人脸都有较好的检测效果;第二,检测结果方面,设置筛选算法过滤掉人脸结果中的重复人脸和非人脸;第三,检测时间方面,本人在确保对检测效果影响较小的前提下,通过图像缩放牺牲一定的图片质量来缩短检测时间。通过这三方面对人脸检测算法进行改进,使得人脸检测算法的效率得到很大的提升,改进之后的人脸检测的流程如图1所示。

图1:人脸检测流程图

图2:检测效果图

根据上图进行代码实现,并用分别包含正脸、侧脸、仰脸、垂头脸、遮挡脸等不同姿态人脸的图像进行检测测试,检测测试的效果如图2所示。

3 基于人脸检测优化的人脸识别

随着市场的发展,人脸识别应用的领域越来越多,所需要面临和适应的环境也会越来越多、越来越复杂,对人脸识别应用的要求也越来越多。所以按领域和要求主要可分为两大类,第一类应用的领域是国家安全、社会安全、经济安全...等重要领域,这一类对人脸识别技术要求是更快速、更高效、更精确、更有针对性;第二类应用的领域是高校、家庭等民用领域,这一类对人脸识别技术的要求是通用性更强、适用性更广、可操作性难度更低。

本文是往第二类应用领域研究,研究人脸识别算法的具体实现,并结合改进之后的人脸检测算法进行实现和使用。人脸识别主要是指在人脸库中搜索待识别人脸并给出搜索验证结果的过程,人脸识别流程主要包含以下两个部分。

(1)训练部分,其是指用人脸识别算法对人脸库中的人脸进行特征提取,把提取到的特征保存成特征库的过程,训练所用的人脸库所准备的人脸越多越充分,所能提取到的特征就会越多,训练出来的特征库用于识别时的效果就会越好。

(2)搜索部分,这一部分是指用人脸检测提取待识别图像中的人脸,接着用人脸识别算法提取检测人脸的特征,把提取到的特征在特征库中搜索匹配是否存在相同特征,最终给出搜索验证结果的过程。

从人脸识别的流程可以看出,一个能满足需求的人脸识别效果主要受到三个因素的影响。第一个因素是人脸库因素,人脸识别流程中的搜索部分是把提取到的特征在特征库中搜索匹配,因此训练用的人脸库中包含的样本越多越充分,其训练得到的特征库对于人脸的识别效果就会越精确。第二个因素是人脸识别算法因素,人脸识别在推广的过程中,遇到了很多问题,比如光照、人脸尺寸、人脸姿态、噪点等诸多因素干扰识别效果[5],针对不同的问题衍生出了不同的人脸识别算法。第三个因素是人脸检测算法因素,人脸识别流程中的搜索部分是在人脸检测所检测到的人脸上进行操作,所以人脸检测效果的好坏直接影响到人脸识别的效果。

3.1 基于人脸检测优化的Eigenfaces人脸识别方法

Eigenfaces(特征脸)是指用于机器视觉领域中的人脸识别问题的一组特征向量,基于特征脸的人脸识别可分为以下两个部分:

图3:基于特征脸的人脸识别流程图

图4:矩阵转换图

(1)训练部分,这一过程主要是把人脸库中所有人脸转换变成一个特征向量集,即把所有人脸的协方差矩阵进行特征值分解,得到对应的特征向量,每个特征向量是对人脸之间的一种特征的描述。因此,特征向量集里面特征向量的线性组合可以表示每一个人的人脸。

图5:特征脸识别效果图

(2)搜索部分,也称识别过程,其是通过改进之后的人脸检测算法快速、高效地检测出待识别图像所包含的人脸,把检测到的人脸投影到特征脸子空间,在这个子空间中同一个人的人脸离得会更近,不同人的人脸会离得较远;因此可以通过待识别人脸在子空间的投影点位置和投影线的长度来进行识别判断。

基于上述分析讨论,现有的相关研究与实践在图书馆服务和推动“一带一路”建设方面已取得一定成果,但仍缺乏战略性思维和高度。本文将在数字人文、文化遗产、信息素养及知识扶贫等方面,进一步论述“一带一路”背景下图书馆的发展策略,作为对现有研究的补充。

特征脸本质是一种基于PCA 降维的人脸识别方法。从上述流程可以看出,特征脸需要把人脸库中所有人脸的协方差矩阵分解成特征向量,而当人脸的尺寸较大时,如一个尺寸是200*200 大小的人脸图像,其人脸的特征维度就是40000;整个人脸库求解过程中的运算量就会非常大。所以特征脸还使用了PCA 降维技术,大大降低了运算量。基于人脸检测优化的特征脸人脸识别流程如图3所示。

3.2 基于人脸检测优化的Eigenfaces人脸识别实现

Eigenfaces(特征脸)识别算法是一种使用PCA 进行降维的算法[6],其主要的实现具体可分为以下步骤:

(1)读取训练数据和进行维度转换。这一步是先从人脸库读入人脸数据,读入的每一张人脸数据一般是一个N*N 的矩阵;接着把每一张人脸数据从N*N 的矩阵转为N2的矩阵,如图4所示。

(2)计算平均脸。假设有人脸库包含M 张人脸图像,则经过步骤1 后,M 张人脸数据变成了N2行M 列的矩阵数据Q,即一列表示一张人脸的数据。接着把所有人脸在对应维度加起来,即把每一行的数据加起来,然后求平均得到N2行1 列的平均脸数据P,计算公式如下:

(3)将每个人脸图像的数据减去平均脸矩阵数据得到差值矩阵W,计算公式如下:

(5)计算特征值和特征向量。因为协方差矩阵C 的数据量会是维度的4 次方,如对于一个120*120 维的人脸,其协方差矩阵大小为14400*14400;所以当人脸维数较大时,直接求解数据量如此巨大的协方差矩阵C 的特征值和特征向量需要花费巨大的计算量以及较长的计算时间。因此,计算特征值和特征向量主要有两种方法,第一种是当M ≥N2,即训练人脸个数比人脸维数大时,直接通过协方差矩阵C 求解。第二种是当M

①第一种

②第二种

(6)PCA 降维。找到最大的前K 个特征值所对应的特征向量,并组成K 维的矩阵H。将差值矩阵W 投影到矩阵H 构成的新空间,即差值矩阵W 乘以K 维矩阵,实现降维。计算公式如下:

(7)以K 维矩阵H 构造特征空间。

(8)读入待识别图像,按照第2 小节改进之后的人脸检测算法进行人脸检测。

(9)把检测得到的人脸数据,按步骤1 方式进行维度转换得到矩阵S。

(10)投影。待识别人脸数据与平均脸数据(参照步骤2)的差值矩阵在特征空间的投影O,计算公式如下:

(11)计算阈值,计算公式如下:

(12)计算O 与Ω 中每个人脸特征向量的欧式距离,计算公式如下:

(13)识别。如果εi<θ,则待识别人脸是第i 个人脸,否则人脸库中不存在该人脸。

3.3 基于人脸检测优化的Eigenfaces识别效果

综上所述,对基于人脸检测优化的特征脸识别结合实际情况进行了代码实现,识别效果如图5所示。

4 结论

人脸检测是人脸识别的关键步骤之一,其检测效果的好坏直接影响到人脸识别的效率。因此,本文通过对检测范围、检测时间、检测结果进行改进优化,使得人脸检测算法的耗时更短、检测结果更准确、检测范围更广。图2 实验结果表明,改进之后的人脸检测算法性能有一定的提升,对正脸、侧脸、低头脸、仰头脸、遮挡脸等不同姿态的人脸都能在较短时间能检测到。图5 的实验结果表明,结合改进之后的人脸检测算法和特征脸算法所设计和实现的人脸识别具有更高的效率,在识别时间和识别范围均有一定程度的性能提升。但是本文实验中用来测试的人脸图像数据量相对较少,下一步将针对含有丰富姿态、大数据量人脸图像进行研究,进一步提高其效率。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!