1.1 研究的背景人脸识别是一种生物识别技术,可根据人的面部特征自动执行身份识别,也称为面部识别。它开始于20世纪60年代,计算机技术和光学成像技术日益蓬勃发展起来,促使人脸识别技术得到了改进和提高,并于20世纪90年代开始得到初步的应用...
- 1 研究的背景
人脸识别是一种生物识别技术,可根据人的面部特征自动执行身份识别,也称为面部识别。它开始于20世纪60年代,计算机技术和光学成像技术日益蓬勃发展起来,促使人脸识别技术得到了改进和提高,并于20世纪90年代开始得到初步的应用。人脸识别技术运用了人工智能、机器学习、机器识别、模型理论、视频图像处理等多项专业技术,同时需要计算得出的特征值,这是生物特征识别技术的最新应用。人脸识别使用摄像机或摄像头来获取包含人面部的图像或视频,并会进行自动检测和跟踪图像中的人脸,最后,对检测到的人的面部进行特征化定位、身份识别确认和搜索。
- 2 研究现状
- 2.1 国外研究现状及其发展
科技飞速发展,从二十世纪六十年代开始,很多国家就已经开始研究人脸识别技术,西方的很多国家因为计算机技术的发达,人脸识别方面的研究已经有了显著的成果。这些国家主要是美国、欧洲国家、日本等发达国家。其中最著名的研究机构有:美国MIT的Media lab,AI lab,CMU的Human-ComputerInterface Institute, Microsoft Research,英国的 Department of Engineering in University of Cambridge。
从上世纪九十年代开始,计算机技术在人脸识别方面有了突破性的进展,从开始的半人工半自动到现在已经实现机器自动识别人脸。在全世界,主要有以下几种人脸识别的方法:
人脸识别就是将获取到的图像进行系统的处理,而想要处理图像有很多的方法,我们实现不同的功能就要用到不同的方法。
人的脸部是及其复杂的,我们想要获取人的脸部特征,需要使用肤色提取的方法,肤色提取是将图像中人脸的颜色进行区分,不同的颜色进行标记。肤色提取是比较可靠的提取方法,成功率很高,提取的速度也很快。
图像的亮度变化,因为使用环境的不同,亮度也会相应做出改变。识别时因为亮度不同,会对识别结果有所影响。此时,将亮度调整至正常状态就尤为重要,一般都是光线太暗导致识别失败,我们可以增加亮度来实现识别。
灰度变换,为了减轻计算机的计算负担,我们要对彩色图像进行灰度处理,处理时,要保留图像的基本信息。
对比度增强,将图像中的人脸与周围环境之间拉开对比度,使人脸更加明显,主要通过像素的聚集来实现。
- 1.1 操作可行性
我们使用的是Windows10、Python3.7.4、PyCharm2019.2.3 X64、PyQt5-5.14.2、OpenCV3.4.7、pip20.0.2。此外,还需要有摄像头可以随时进行拍照和识别。用户需要Microsoft Windows 10、8的64位版本,最低2 GB RAM,建议8 GB RAM,2.5 GB硬盘空间,建议使用SSD(固态硬盘),最低1024x768屏幕分辨率,Python 2.7或Python 3.5或更高版本,只要可以安装以上软件和包,即可进行人脸识别。
- 基于几何特征的人脸识别方法。
- 基于模板匹配的人脸识别方法。
- 基于K-L变换的特征脸的方法。
- 基于隐马尔科夫模型的方法。
- 神经网络识别的方法。
- 基于动态链接结构的弹性图匹配方法。
- 利用运动和颜色信息对动态图像序列进行人脸识别的方法。
- 2.2 国内研究现状及其发展
中国因为计算机技术的限制,人脸识别的研究开始的比较晚,在上世纪八十年代,中国的一些高校和科学院才开始研究人脸识别技术。其中清华大学、哈尔滨工业大学、中国科学院计算所、中国科学院自动化研究所、复旦大学、北京科技大学等好几所高校和研究所已经有了初步的研究成果。我国在研究方向上与西方国家有所不同,我们分别从基于几何特征的人脸正面自动识别方法、基于代数特征的人脸正面自动识别方法和基于连接机制的人脸正面自动识别方法这三种方法入手,进行人脸识别的研究和开发。
- 3 研究意义
人们之所以要对人脸识别进行研究,最本质的原因是因为要对人类的眼睛进行研究,了解人脸眼睛辨别事物的本质是什么。同时,人脸识别属于人工智能的一个分支,研究人脸识别也是推动人工智能的应用。人脸识别系统的最终目的是要建立机器自动智能识别人脸。人脸识别系统这么受欢迎是它具有和两个显著的优点:应用领域广和应用前景好。现在市面上的识别系统有:指纹识别、DNA、虹膜检测等,这些识别虽然也能识别人的身份,但是也拥有需要与人接触、价格昂贵、识别时间久等缺点,而人脸识别系统就可以完美的解决这些问题。首先,人脸识别技术不需要与被检测者的身体接触,并且是不具备侵犯性的;其次,成本低廉且易于安装,只要有摄像头、照相机、手机,用户就不需要专门的安装;最后,整个检测过程是没有人为的参与的,计算机可以根据预设自动进行。
人脸识别技术是从弱人工智能到强人工智能的转变的标志,现已被广泛应用于多个领域,包括政府、军队、银行、社会保障、安全防护等,现在的技术已经越来越成熟,社会大众对人脸识别这一技术也是越来越熟知,我相信人脸识别技术将在更多领域得到广泛应用。
- 4 研究的目标与内容
通过OpenCV自带的LBPH人脸识别算法,使用python平台设计了一个门禁系统,主要用到的就是人脸识别。
要进行人脸识别首先要做的就是人脸图像的采集,把不同的人脸通过摄像头采集下来,要在一张图像中找到人脸,就要用到人脸检测,要把术语人脸识别和人脸检测区分开,检测是在一张照片中定位人脸;人脸识别是将待识别的人脸与人脸数据库中的人脸进行比较,找出与待识别人脸对应的人脸,这是区分人脸与人脸之间差异的过程。
然后进行图像的预处理。因为采集到的图像大多会因为外部因素的影响,不能直接使用,必须对图像进行灰度转化、噪声过滤等步骤。
识别之前的最后一步是对处理后的图像进行特征的提取,能在面部识别系统中使用的特征通常分为视觉特征、像素统计特征、面部图像变换系数特征和面部图像代数特征。人脸特征的提取包括在面部的某些特征上执行面部特征的提取。人脸特征提取(也称为人脸表征)是人脸的特征建模过程。人脸特征提取方法可以分为两类:一类是基于知识的表征方法;另一类是基于代数特征或统计学习的表征方法。
在识别过程中,每个人的脸都被构建为一个模型,不同的人脸属于不同的模型,识别过程是与现有模型进行比较,然后将人脸归到对应的模型中去。人脸识别细分为两大类:辨认和确认。辨认是指计算机回答“我是谁”的问题,在很多人的图片中辨认出每个人都是谁;而确认是指计算机识别出照片或视频中的人“是不是我”,是一对一的进行图像对比。所以辨认模式的识别对算法运算速度的要求明显要高于确认 。
- 5 人脸识别技术的优势与难点
- 5.1 优势
人脸识别技术作为现在主流的身份识别技术,有着其他识别技术所不具备的天然优势。
首先,人脸识别技术可以自动识别人脸,通过人脸的生物特征来识别人的身份,就像人识别人脸一样,这种拟人化的方式是指纹识别和虹膜识别所不具备的。
其次,人脸识别技术识别人脸不易被被测个体所察觉,在不知不觉之间,你的信息就已经被计算机所熟知。
最后,人脸识别技术不需要机器和人相互接触,不会引起被测人的反感,而且可以在很多场合下进行人脸的检测与识别。
- 5.2 缺点
但是人脸作为世界上最复杂的视觉特征,想要让机器自动识别出来是相当困难的。因为人脸的复杂多变,所以给机器识别造成了很大的困难。
首先,一开始检测到的人脸可能是有胡子,不带眼镜的,把这个录入到人脸库中后,下次识别时,该人剃了胡子、带上眼镜、换了发型,这些因素可能会导致识别失败。而且人还存在双胞胎的情况,这种情况下,人脸识别几乎是不可能识别成功的。
同时,检测采集和识别时的场景不同,所导致的光线,环境,装饰也会不同,这些也会使人脸识别的失误率上升。
此外,人随着时间的推移,年龄的不断增长,也会使面部发生改变。对于青少年,这种变化尤为明显。
所以,人脸识别技术还面临着很大的难关。
1 人脸识别系统的相关理论与技术概述
- 1 OpenCV概述
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数可以高效的实现计算机视觉算法。它是由C和C++开发的,同时还有Python、Java、MATLAB 等其他语言的接口。它可以在Windows、Linux、Mac OS、Android、iOS 等操作系统上运行。OpenCV的应用领域非常的广泛在图像处理、人机交互、人脸识别等方面都有涉及。OpenCV强调高效实时的应用开发。
OpenCV是开源且免费的视觉库,这就意味着无论是科学研究或者商业目的,都可以使用OpenCV,而且,可以看到源代码并去修改它。如果OpenCV中的某个函数缺少一些你想到的功能,你就可以去修改函数,添加功能。OpenCV这个函数库的宗旨就是促进科研和商用。
OpenCV分为四层,最底层是对硬件进行优化,上一层是OpenCV的核心,是大多数高级函数和由开发人员所贡献的代码,再上一层语言绑定和示例应用程序,最上层是和操作系统的交互。
- 2 LBPH人脸识别算法概述
- 2.1 LBPH人脸识别算法的原理
- 加载数据
将图像数据与图像对应标签分别储存。
- 训练数据
(1)参数初始化
将半径(radius=1),邻域大小(neighbors=8),宽度方向和高度方向格子数,直方图距离阈值(threshold=DBL_MAX)进行初始化。
将标签数组初始化。
(2)LBP编码
计算LBPi,大小为

。
- 计算直方图
各LBPi图像对应直方图矩阵宽度为
,高度为
。
(1)计算格子的高度和宽度:
。
(2)直方图矩阵的每一行是每个格子内直方图的高度进行行序排列的,每个直方图的高度都除以
,最后将直方图矩阵转换为为1行列的向量矩阵。
(3)将所有人脸训练图像直方图矩阵插入到成员变量中,成员变量的行数为
列数为N。
- 更新模型
人脸不是一成不变的,当人脸发生变化时,我们就需要对人脸的模型进行更新。就是标签不变,图像数据进行更新。
- 预测
进行人脸识别时,先计算待识别图像的直方图矩阵,然后找出和训练模型中直方图距离最小的直方图,如果这个直方图的阈值比初始化时的阈值小,则这个人就是该直方图对应的人。
- 2.2 LBPH理论基础
将摄像头获取的图像用九宫格划分为九块,将最中间一块的像素值作为标准阈值,再计算周围八块像素的灰度值,然后与最中间的阈值做比较,如果周围像素的灰度值大于中间的阈值,就将这个像素的位置标记为1;如果小于或者等于中间的阈值,就将该像素的位置标记为0。这样,八个位置的位置标记就可以组成一个八位的二进制数,然后将这个二进制数转化为十进制,即LBP码。如此,就可以得到这个图像的LBP值,这个值就可以反应这个图像的特征。
- 3 PyQt5概述
PyQt5是由一系列Python模块组成的,它拥有超过620多个类和6000个函数。它是一个跨平台的工具包,可以运行在所有主流的操作系统上,包括Windows、Linux和Mac OS。PyQt5是python开发图形界面最流行的开发组件。
- 3.1 PyQt5主要类
(1) QApplication类
QApplication类是在制作图形用户界面时最重要的控制流和主要设置,它控制着图形用户界面的后台管理。只要用PyQt开发图形用户界面应用程序,那么就一定要用到QApplication对象。
要使用QApplication类就一定要对它进行初始化,通常放在Python脚本的if name == "main": 语句后面,类似于放在C的main函数里,作为主程序的入口。由于QApplication对象进行了大量初始化,因此必须在创建窗口之前创建它。
当对QApplication进行初始化后,整个程序就运行起来,通过事件响应函数将各个控件的事件进行响应。只有在调用退出函数sys.exit()时,整个应用程序才会结束。
(3)QWidget
QWidget是所有用户界面类的基类,它能接收所有的外设和其他系统窗口的事件。
(4)Qdialog
Qdialog是标准对话框的父类,它拥有很多子类,可以进行字号、字体、颜色的修改,以及文件的选择等。
(5)QMainWindow
QMainWindow(主窗口)是应用程序的“门面”,可以给主窗口添加按钮等控件。它可以被继承,这样就使得它上面的控件的封装变得很简单。
- 4 Haar级联
摄影作品可能包含很多令人愉悦的细节。但是,由于拍摄人员的不同,拍摄环境的变化以及摄像头抖动和数字噪声的变化,图像结果的提取变的很难。人在进行人脸识别时,不会受这些外部因素的影响,但对于机器来说,这将变的很难。
因此,只有提取出稳定的图像分类结果才能让辨认变得容易。提取出来的图像分类结果被称为特征。虽然任意像素都可以影响多个特征,但特征应该比像素少得多。可以通过两个图像的相应特征的欧式距离来测量两个图像的相似度。
Haar特征是用于实时面部跟踪的特征。每个Haar功能都描述了相邻图像区域的对比度模式。例如,边缘,顶点和细线都可以生成判别特征。 Haar特征分为四类:边缘特征,线性特征,中心特征和对角特征,这些特征已合并为特征模板。 Haar特征值反映了图像的黑白颜色深浅的变化。人脸的特征可以用矩形的颜色深浅来简单表示。例如,眼睛比脸颊的颜色要深,鼻子梁的侧面比鼻子梁深,而嘴部比周围颜色深。但是,矩形特征具有一定局限性,只能对一些简单图像进行特征提取。
1 人脸识别系统的相关理论与技术概述
- 1 OpenCV概述
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数可以高效的实现计算机视觉算法。它是由C和C++开发的,同时还有Python、Java、MATLAB 等其他语言的接口。它可以在Windows、Linux、Mac OS、Android、iOS 等操作系统上运行。OpenCV的应用领域非常的广泛在图像处理、人机交互、人脸识别等方面都有涉及。OpenCV强调高效实时的应用开发。
OpenCV是开源且免费的视觉库,这就意味着无论是科学研究或者商业目的,都可以使用OpenCV,而且,可以看到源代码并去修改它。如果OpenCV中的某个函数缺少一些你想到的功能,你就可以去修改函数,添加功能。OpenCV这个函数库的宗旨就是促进科研和商用。
OpenCV分为四层,最底层是对硬件进行优化,上一层是OpenCV的核心,是大多数高级函数和由开发人员所贡献的代码,再上一层语言绑定和示例应用程序,最上层是和操作系统的交互。
- 2 LBPH人脸识别算法概述
- 2.1 LBPH人脸识别算法的原理
- 加载数据
将图像数据与图像对应标签分别储存。
- 训练数据
(1)参数初始化
将半径(radius=1),邻域大小(neighbors=8),宽度方向和高度方向格子数,直方图距离阈值(threshold=DBL_MAX)进行初始化。
将标签数组初始化。
(2)LBP编码
计算LBPi,大小为
。
- 计算直方图
各LBPi图像对应直方图矩阵宽度为
,高度为
。
(1)计算格子的高度和宽度:
。
(2)直方图矩阵的每一行是每个格子内直方图的高度进行行序排列的,每个直方图的高度都除以
,最后将直方图矩阵转换为为1行列的向量矩阵。
(3)将所有人脸训练图像直方图矩阵插入到成员变量中,成员变量的行数为
列数为N。
- 更新模型
人脸不是一成不变的,当人脸发生变化时,我们就需要对人脸的模型进行更新。就是标签不变,图像数据进行更新。
- 预测
进行人脸识别时,先计算待识别图像的直方图矩阵,然后找出和训练模型中直方图距离最小的直方图,如果这个直方图的阈值比初始化时的阈值小,则这个人就是该直方图对应的人。
- 2.2 LBPH理论基础
将摄像头获取的图像用九宫格划分为九块,将最中间一块的像素值作为标准阈值,再计算周围八块像素的灰度值,然后与最中间的阈值做比较,如果周围像素的灰度值大于中间的阈值,就将这个像素的位置标记为1;如果小于或者等于中间的阈值,就将该像素的位置标记为0。这样,八个位置的位置标记就可以组成一个八位的二进制数,然后将这个二进制数转化为十进制,即LBP码。如此,就可以得到这个图像的LBP值,这个值就可以反应这个图像的特征。
- 3 PyQt5概述
PyQt5是由一系列Python模块组成的,它拥有超过620多个类和6000个函数。它是一个跨平台的工具包,可以运行在所有主流的操作系统上,包括Windows、Linux和Mac OS。PyQt5是python开发图形界面最流行的开发组件。
- 3.1 PyQt5主要类
(1) QApplication类
QApplication类是在制作图形用户界面时最重要的控制流和主要设置,它控制着图形用户界面的后台管理。只要用PyQt开发图形用户界面应用程序,那么就一定要用到QApplication对象。
要使用QApplication类就一定要对它进行初始化,通常放在Python脚本的if name == "main": 语句后面,类似于放在C的main函数里,作为主程序的入口。由于QApplication对象进行了大量初始化,因此必须在创建窗口之前创建它。
当对QApplication进行初始化后,整个程序就运行起来,通过事件响应函数将各个控件的事件进行响应。只有在调用退出函数sys.exit()时,整个应用程序才会结束。
(3)QWidget
QWidget是所有用户界面类的基类,它能接收所有的外设和其他系统窗口的事件。
(4)Qdialog
Qdialog是标准对话框的父类,它拥有很多子类,可以进行字号、字体、颜色的修改,以及文件的选择等。
(5)QMainWindow
QMainWindow(主窗口)是应用程序的“门面”,可以给主窗口添加按钮等控件。它可以被继承,这样就使得它上面的控件的封装变得很简单。
- 4 Haar级联
摄影作品可能包含很多令人愉悦的细节。但是,由于拍摄人员的不同,拍摄环境的变化以及摄像头抖动和数字噪声的变化,图像结果的提取变的很难。人在进行人脸识别时,不会受这些外部因素的影响,但对于机器来说,这将变的很难。
因此,只有提取出稳定的图像分类结果才能让辨认变得容易。提取出来的图像分类结果被称为特征。虽然任意像素都可以影响多个特征,但特征应该比像素少得多。可以通过两个图像的相应特征的欧式距离来测量两个图像的相似度。
Haar特征是用于实时面部跟踪的特征。每个Haar功能都描述了相邻图像区域的对比度模式。例如,边缘,顶点和细线都可以生成判别特征。 Haar特征分为四类:边缘特征,线性特征,中心特征和对角特征,这些特征已合并为特征模板。 Haar特征值反映了图像的黑白颜色深浅的变化。人脸的特征可以用矩形的颜色深浅来简单表示。例如,眼睛比脸颊的颜色要深,鼻子梁的侧面比鼻子梁深,而嘴部比周围颜色深。但是,矩形特征具有一定局限性,只能对一些简单图像进行特征提取。
