基于python的人脸识别系统Word文档格式.docx
- 文档编号:17513202
- 上传时间:2022-12-06
- 格式:DOCX
- 页数:21
- 大小:764.59KB
基于python的人脸识别系统Word文档格式.docx
《基于python的人脸识别系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于python的人脸识别系统Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
虽然情节夸大了该项技术的应用,但实际上人脸识别技术早已被许多国家的大量运用在安防领域。
它并不是一项新出现的技术,只是缺乏在人们日常生活中的应用场景,使得人脸识别技术直到近几年随着智能化时代的到来才逐渐被大众熟知。
在国内,对该项技术的研究开始于1990年,目前主要应用在考勤、边检、运输、安防等领域。
1.2研究意义
随着人工智能在计算机技术领域的迅速发展,智能化产品逐渐渗透在人类社会生活中的各个方面,使得社会的运行效率大幅度的提升,人类也慢慢从体力劳动中解脱出来,将更多的时间放在技术创新创造上,而人脸识别作为人工智能中的重要技术之一,是富有应用意义和挑战性的研究课题之一。
相对于其他生物特征识别技术,人脸识别技术因为具有非侵扰性、非强制性、非接触性、便捷性等优点,符合人们对便捷生活方式的追求和对身份识别的快速、准确、安全的要求,使得它在身份识别、自动监控、人机交互等领域拥有巨大的发展潜力。
人脸识别技术覆盖了计算机视觉、模式识别、数字图像处理、数学等诸多领域学科内容,虽然对该项技术的研究已取得一些成果,但在实际应用中仍存在着不足和困难,比如人脸识别的背景环境,脸部表情、妆容、姿态、发型的变化,都会降低识别的准确性,给识别带来困难。
降低识别错误率、提高识别速度、实时性要求是人脸识别技术当前迫切需要解决的问题。
1.3国外研究现状
20世纪60年代,人脸识别技术便已经有人研究,但一直到80年代后期这段时间内人脸识别技术都只是作为一般性的问题研究,不能自动完成识别任务,没有发表具有代表性的理论研究成果。
直到90年代后随着计算机运算速度的提高,人脸识别技术发展迎来了重大突破,诞生了许多代表性的算法,“特征脸”法[1]、基于线性判别分析的Fisherface方法,“作差法”,弹性图匹配技术等等,使得人脸识别技术突飞猛进。
如今,人脸识别技术已被运用到许多公众场所,尤其是“911”事件后,国外很多大型公众场合已经应用这一技术。
美国等欧美国家在人脸识别技术有着较大的成就,早在90年代,美国军方就组织了FERET人脸识别算法测试,对人脸识别技术起到积极的推进。
2000年后,人脸识别技术逐渐从学术研究走向商业应用。
如今,经过几十年的发展,人脸识别技术已经被广泛应用到金融、安防等其他众多领域。
1.4国内研究现状
国内对于人脸识别技术的研究开始于上世纪80年代[2],但到90年代后期才被许多院校和机构普及,相比其他国家起步相对较晚,但是进展迅速且成绩斐然。
如苏光大教授提出的最佳二维人脸理论和MMP-PCA算法、李子青带领的研究团队提出了基于近红外的人脸识别技术、汤晓鸥实验室发表的DeepID系列算法等等,其中为08年奥运会安保[3][4]提供保障的人脸识别系统和智能视频监控系统就是李子青教授在中科院自动化所研发。
不只是在学术研究上,在商业上,也涌现了很多科技公司专注于这项技术的研究,如商汤科技、依图科技、旷视科技都是国内研究人脸识别技术的知名企业,且在该领域均取得不错的成绩,如依图科技分别在2017和2018的全球人脸识别挑战赛FRPC比赛中获得冠军,在2018年的比赛测试结果显示依图科技的识别算法在千万分之一的误报情况下识别准确率接近99%,达到接近极限水平。
而且根据NIST在2018年根据全球人脸识别算法测试情况发布的排名中,前五名中三名被中国公司包揽[5]。
这些数据表明我国的人脸识别技术在国际上名列前茅。
第二章需求分析
人脸识别技术是近几年人们的研究热点和讨论焦点,它能应用于许多领域,从一开始的安防到如今的金融、教育、考勤等,目前我国和其他国家有大量的学者在不断的深入研究。
2.1技术可行性分析
在着手开发之前,我查阅了大量资料,对比目前人脸识别技术的多种算法,卷积神经网络能对极少的预处理过的原始像素,快速识别出特征规律,因此选择卷积神经网络算法做人脸识别。
通过搭建一个多层网络模型,对模型输入人脸数据进行训练,使模型能够对实时视频流中出现的人脸进行准确识别。
训练模型需要准备数据集,利用摄像头收集身边人的脸部图片作为数据集,为了更好的验证模型,需要将数据集按照交叉验证原则划分训练集、验证集和测试集三部分。
采用交叉验证是因为手动划分数据集可能会使数据分布不均匀,导致训练出来的模型偏向于数据较多的,造成在测试或在实际预测时数据较少的分类不正确。
交叉验证法通过不同比例对样本进行划分,重复使用样本数据,能够得到多组不同的训练集和测试集,使模型训练效果更优。
许多机器学习算法不能直接对标签数据进行操作。
它们要求所有的输入变量和输出变量都为数字形式。
one-hot编码把分类数据转化为二进制格式,分类的输入和输出变量都是一样的,供机器学习使用。
图像是由像素组成,彩色图像由3个矩阵所构成,即红(R)、绿(G)、蓝(B)三个颜色通道,每个像素矩阵的取值都[0,255]区间内的整数,因此当训练数据的值较大时,会导致模型的训练时间增加,速度变慢。
因此需要将图片像素归一化,用于提升网络收敛速度,减少网络模型的训练时间。
2.2系统需求分析
2.2.1程序功能需求分析
整个程序的最终目的是能识别出人脸。
首先通过摄像头获取人脸图片,经过图像预处理后作为模型后期训练的数据,预处理模块的好坏直接影响着模型的识别准确率。
接着利用keras框架搭建卷积神经网络构建一个18层的卷积网络结构,并利用上述处理过的数据提供给模型进行训练,选择其中最优的模型。
这两个模块是实现人脸识别功能的基础。
所以本设计中所要完成的功能如下所述:
(1)人脸录入
这个模块是为了获取图片作为训练数据,主要通过开启摄像头后从视频流中截取人脸图片,并将截图的人脸图片独立保存在文件夹中,文件夹以该人的名字命名;
也可以直接导入人脸图片。
(2)图像预处理
该模块主要包括图像的尺寸比例调整、交叉验证、改变维度顺序、One-hot编码、归一化等。
(3)人脸检测
该模块采用OpenCV自带的人脸检测工具haarcascade_frontalface_alt2,检测摄像头的哪个区域为人脸,可用于检测静止图像,视频和摄像头所得到图像中的人脸。
(4)模型建立
该模块采用keras搭建CNN卷积神经网络框架,将预处理过的脸部图像数据作为训练数据,对搭建的神经网络进行模型训练,并评估模型的识别率,得到最终模型。
2.3开发环境需求
Anaconda是一个开源的集成各类python工具的集成平台,包含了pyqt等大量包,提供包管理与环境管理功能,能很方便的配置程序设计所需的环境。
程序设计采用Anaconda3作为开发工具,内置python版本为3.7,通过Anacondaprompt安装tensorflow,numpy,keras,sklearn等第三方库。
值得注意的是不同版本的tensorflow要搭配对应的python版本,安装前最好上网先查询二者对应版本搭配,否则会耗费大量时间在安装上。
第三章系统概要设计
本章节大致介绍了人脸识别系统的整体结构设计流程以及图像处理模块运用的原理。
(1)系统整体结构设计如图3.1所示
图3.1系统结构设计图
(2)图像预处理模块设计如图3.2。
图3.2图像预处理层次图
3.1各模块功能介绍
3.1.1人脸录入模块
人脸采集模块是为了获取人脸图片作为后期模型的训练数据,人脸图片可以从USB摄像头实时截取,也可以从视频中截取。
利用OpenCV的VideoCapture函数获取摄像头的视频流,利用OpenCV自带的人脸检测工具haarcascade_frontalface_alt2检测摄像头的哪个区域为人脸,进行长宽坐标获取后并截取人脸,将截取到的人脸写入到本地磁盘,作为训练数据。
3.1.2搭建模型模块
该模块的主要功能是进行图像数据处理并建立好模型,是实现人脸识别功能的重点,有以下两个子模块:
(1)数据预处理
主要进行图像数据预处理,通过调整图像的尺寸大小和比例缩放、划分数据集、独热编码标签向量化、像素归一化等一系列操作,将样本处理成为可以被卷积神经网络读取的数据类型。
(2)创建模型
采用keras框架搭建CNN卷积神经网络,搭建一个4层convl+2层maxpool+2层dropout+2层dense+1层Flatten的以softmax函数作为输出的多分类网络结构,采用预处理后的数据作为样本数据,对模型进行训练;
训练选择随机梯度下降法SGD+Momentum作为优化器,以损失函数categorical_crossentropy作为优化目标度量模型拟合程度,选出最优的模型参数,再对数据进行数据增强,通过图片变化扩充数据集,提供给fit_generator函数对模型进行训练,最终将训练后的模型保存在程序目录下。
3.1.3人脸识别模块
同样利用OpenCV的VideoCapture函数打开摄像头,用OpenCV的人脸检测工具haarcascade_frontalface_alt2,截取摄像头中出现的人脸图片,交予模型识别,并给出识别结果,将识别结果保存在对应的excel文件中。
第四章系统详细设计
本章节主要介绍图像预处理和建立模型这两方面进行详细介绍,对这两模块涉及到的相关原理算法进行叙述。
4.1整体运行流程图
图4.1系统运行流程图
4.2图像预处理设计
4.2.1调整图像尺寸
本程序设计的卷积神经网络中加入两层全连接层,全连接层的输入在网络配置时便固定维数,全连接层的核心操作就是矩阵向量乘积,即将输入的特征图矩阵和相应权值矩阵进行乘积运算,矩阵之间的点积运算要求两个矩阵的维数相同,因此固定输入数据的特征图矩阵维数,所以需要对图像数据进行尺寸、比例调整。
核心代码如下:
defresize_image(image,height=IMAGE_SIZE,width=IMAGE_SIZE):
top,bottom,left,right=(0,0,0,0)
h,w,_=image.shape#获取图像尺寸
longest_edge=max(h,w)#对于长宽不相等的图片,找到最长的一边
#计算短边需要增加多上像素宽度使其与长边等长
ifh<
longest_edge:
dh=longest_edge-h
top=dh//2
bottom=dh-top
elifw<
dw=longest_edge-w
left=dw//2
right=dw-left
else:
pass
BLACK=[0,0,0]#RGB颜色
#给图像短的两边增加边界成为正方形,cv2.BORDER_CONSTANT指定所加边界颜色为黑色
constant=cv2.copyMakeBorder(image,top,bottom,left,right,cv2.BORDER_CONSTANT,value=BLACK)
returncv2.resize(constant,(height,width))#调整图像大小并返回
图像大小的调整利用tensorflow库提供的resize()函数,然而如果直接对图像进行resize,会把图像拉变形(图4.3)。
为了使图像resize后仍然保持原始图片的宽高比,我们需要为图像较短的两边加黑框(图4.4),使图像变成正方形又不失真,最后再利用resize()函数进行图像比例缩放(图4.5)。
缩放成64*64的目的是为了减少计算量及内存占用,提升后续网络模型的训练速度。
图4.2200*300原始图片
图4.3300*300正方形图像
图4.4300*300正方形图像
图4.564*64正方形图像
4.2.2交叉验证法划分数据集
为了更充分利用有限的数据,采用交叉验证来分割数据集,它的基本思想是从现有的数据集中,拿出大部分样本(或者按比例)作为模型训练数据集,留小部分样本用于验证模型。
所谓“交叉”,是指这一次作为训练模型的样本,下次可能就是测试集的样本,验证结果会与验证集的真实值比较并计算出误差平方加和结果,这个过程会重复进行,反复的进行交叉验证,直至所有验证结果与真实值相同,验证结束。
train_test_split()是Sklearn库中交叉验证模块提供的用于划分数据集的函数,将数据的30%划分为验证集,70%划分为训练集,具体语句如下:
train_images,valid_images,train_labels,valid_labels=train_test_split(images,labels,
test_size=0.3,random_state=random.randint(0,100))
参数test_size=0.3表示数据划分的比例,参数random_state表示随机选取[1,100]区间内的整数,每次都随机从数据集中抽取数据建立训练集和验证集,导致每次训练的结果会有不同。
_,test_images,_,test_labels=train_test_split(images,labels,test_size=0.5,
random_state=random.randint(0,100))
测试集同样调用这个函数,只不过选择的比例为50%。
4.2.3数据标签one-hot编码
对标签进行独热编码(One-hot)的原因是因为卷积神经网络采用分类交叉熵(categorical_crossentropy)作为损失函数,它要求训练样本标签必须为one-hot编码形式。
One-hot编码又称为独热编码,它采用状态寄存器的组织方式对状态进行编码,用N位寄存器编码N个状态,即每个状态值对应一个寄存器位,且任意时刻仅有一位有效。
它先将每个分类值映射成整数值,整数值再表示成二进制形式,实际上就是将分类变量表示为二进制向量,使整数的索引设为1,其他全为0。
程序输入4张人脸,每张人脸为一类,一共4类,则用4个状态位来表示,类别状态为0,1,2,3;
0代表“archer”,1代表“miaor”,2代表“pangzi”,3代表“shouzi”。
one-hot编码会提供4个寄存器位保存这4个状态,对这四个标签进行One-hot编码后,结果如表4.1。
表4.1One-hot编码
标签
One-hot编码
[1000]
1
[0100]
2
[0010]
3
[0001]
即标签的1在第几位则代表第几位有效,简单的说,One-hot编码将数值变成了位置信息,使其向量化,方便卷积神经网络操作。
4.2.5像素归一化
归一化是为了简化计算,通过将数据统一处理为[0,1]之间的小数,达到减低计算量的目的。
周知图像是由像素组成,彩色图像由即红(R)、绿(G)、蓝(B)这3个像素矩阵所构成,每个像素矩阵的取值都为[0,255]之间的整数,因此当训练数据的值为较大整数值时,会使模型的训练速度变慢,即模型的训练时间增加,因此对图像数据进行归一化,目的就是为了提升网络速度,减少训练时间。
在整数形式的颜色空间中每个像素取值都是在[0,255]区间内的整数,而归一化后是小数形式的颜色空间,因此需要先将数据形式浮点化,再归一化。
像素的归一化用原始像素值除以所有原始像素值中的最大值来实现,最大像素值一般为255,最小值为0。
公式形式[6]如下:
(4-1)
这里的X_min为0。
是归一化后的值,
和
分别表示样本的最大最小值。
归一化后图像的像素处于0-1.0范围时,依然介于0-255之间,图像依旧有效的。
4.2.6补充说明
Keras是一个以tensorflow或theano作为后端引擎的模型库,只提供快速构建神经网络模型,不处理卷积和矩阵乘积等计算,而是把这些底层计算交给后端引擎来完成。
后端引擎系统决定了图像数据输入卷积神经网络时的维度顺序,而theano和tensorflow的维度顺序是不同的,theano是通道数、行数、列数,而tensorflow为行数、列数、通道数。
而不同版本的keras所支持的后端系统不一样,因此需要先确定当前安装的keras采用的后端系统,在进行图片预处理前把图像数据修改成对应后端引擎支持的维度顺序。
4.3卷积神经网络模型的设计
4.3.1卷积神经网络
卷积神经网络(ConvolutionalNeuralNetwork,简称CNN)是上世纪80年代科学家从对猫视觉皮层的研究受到启发而诞生的算法,它能够对数据进行有效分类,,普遍运用在语音、图像识别等领域。
通过多层卷积、池化的堆叠使得卷积神经网络相比传统神经网络具有参数少、模型训练难度和复杂度低等优点。
一个卷积神经网络主要由以下5类组成:
(1)卷积层
卷积层的作用是对图片进行局部特征提取,是CNN的核心层,作用是对图片进行局部特征提取。
具体指输出图像的每个像素值都由输入图像对应位置区域的像素通过加权所得,这个区域叫做局部感受野,区域的权值叫做卷积核,输入图像通过卷积运算后再加上偏置项,通过激活函数得到其特征图,卷积层的数学形式[7]如下:
)(4-2)
其中:
l为层数;
为卷积层l层的第j个特征图;
为输入层的感受野;
K为卷积核;
b为偏置;
f为神经元的激活函数。
在数学上来说卷积运算是对两个矩阵进行的。
如下图所示[8],用一个3*3的卷积核,卷积核内的点与图片上重合区域的每个像素值做乘积加和运算后再加上偏置,作为输出图片中的一个像素值。
图4.6图像矩阵与卷积核的点积运算
(2)池化层
图像经过卷积之后获得了多个特征图,但是与原始图像相比特征图的尺寸并没有改变,所以数据运算量依旧很大。
为了降低运算量,通常会在卷积层后加入下采样层。
下采样层也叫池化层,主要功能是对经过卷积层特征提取后的图像矩阵进行信息过滤,去除冗余信息,只保留主要特征,减少网络中的参数和计算次数,防止模型过拟合。
常见的池化操作方法有平均值池化(AveragePooling)和最大值池化(MaxPooling)。
AveragePooling保留图像的背景信息,它是通过计算覆盖区域的平均值作为池化后的值。
而MaxPooling能够保留图像的边缘和纹理信息,它是通过选取覆盖区域的最大值作为区域池化后的值。
图4.7最大池化法
图4.8平均池化法
虽然卷积层和池化层都是提取图像特征,但二者略有区别,卷积层是通过卷积核逐个像素滑动覆盖达到目的,而池化层则是按照池化窗口逐块覆盖特征图的方式提取该区域内的代表性特征。
(3)Dropout层
在神经网络模型训练过程中,如果提供给模型、的训练样本数太少,容易导致训练后模型泛化能力差,产生过拟合现象。
过拟合现象是指模型在训练集上预测效果比在未知数据集(测试集)上预测的效果好。
这种现象是模型过度依赖现有训练数据集的特征造成的。
为了防止过拟合现象发生,在神经网络中加入Dropout层,在诸多过拟合问题的解决方案中,Dropout以其具有简单性和效果良好而被广泛运用。
Dropout的关键思想[9]是在训练过程中从神经网络中随机删除单元以及它们的连接,即在训练过程中,以概率p舍弃神经元并让其它神经元以概率q=1-p保留,这样每一次数据训练都为一个网络结构,相当于训练多个不同结构的网络并集成一体,这样可以使模型的泛化能力更强,防止单一网络结构过拟合
图4.9Dropout前后神经元数对比图
(4)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 python 识别 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)