于tensorflow的人脸识别签到系统_第1页
于tensorflow的人脸识别签到系统_第2页
于tensorflow的人脸识别签到系统_第3页
于tensorflow的人脸识别签到系统_第4页
于tensorflow的人脸识别签到系统_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本科毕业设计(论文) 基于tensorflow的人脸识别签到系统 Registration of Face recognition System on TensorFlow 毕业设计(论文)原创性声明本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行的设计(研究)工作及取得的成果,论文中引用他人的文献、数据、图件、资料均已明确标注出,论文中的结论和结果为本人独立完成,不包含他人已经发表或撰写的作品及成果。对本文的研究作出贡献的个人和集体,均已在论文中作了明确的说明。本人完全意识到本声明的法律结果由本人承担。毕业论文作者(签字): 签字日期: 年 月 日成绩评定成绩项论文

2、成绩(百分制)折合比例实得成绩(折合分)指导教师成绩30%评阅教师成绩20%答辩成绩50%总评成绩注:毕业设计(论文)成绩按百分制评定。答辩成绩不及格的(评分低于60分的),则该毕业设计(论文)总评成绩为答辩成绩。摘 要随着机器视觉技术对人们日常生活运作越来越明显,人脸识别技术也凭借着其便捷友好的特性出现,并在医疗、安全和通信等邻域都有着应用,而其中较为常用的人脸识别签到也在各组织使用着,并且开始逐渐代替传统的签到手法。为了了解人脸识别签到技术,本项目通过运用深度学习中的TensorFlow框架来搭建卷积神经网络,将训练好的模型实现对特定人脸的识别进行签到,再添加录入信息模块,签到界面模块,出

3、勤信息模块这三个模块来完成实现整个人脸识别签到系统。我们可以通过本系统对成员信息的录入,再运用录入的数据来训练模型进行对人脸识别签到,最后可以在出勤信息表中了解成员出勤状况,在整个实现过程中也能大致了解到人脸识别签到的技术,这就是这个项目的意义所在。关键字:机器视觉技术 卷积神经网络TensorFlow 人脸识别AbstractWith the machine vision technology is becoming more and more obvious to peoples daily life, face recognition technology also appears wi

4、th its convenient and friendly characteristics, and has applications in medical treatment, security and communication. Among them, the more commonly used face recognition sign-in is also used in various organizations, and has gradually replaced the traditional sign-in method. In order to understand

5、the face recognition check-in technology, this project uses the TensorFlow framework in depth learning to build a convolution neural network, and the trained model is used to realize the check-in of specific face recognition. Then, the three modules of input information module, check-in interface mo

6、dule and attendance information module are added to complete the realization of the whole Registration of Face recognition System.We can input member information through this system, and then use the input data to train the model to sign in for face recognition. Finally, we can understand the attend

7、ance status of members in the attendance information table, and we can also roughly understand the face recognition sign-in technology in the whole implementation process. This is the significance of this project.Key words:Machine Vision Technology、CNN、TensorFlow、Face recognition目录1.绪论11.1 开发背景11.1.

8、1机器视觉技术的发展11.1.2日常工作签到形式的现状情况11.2 开发意义21.3 开发目标21.4 本文章节安排22.卷积神经网络理论介绍32.1人工神经网络简介32.2卷积神经网络简介32.2.1卷积和池化42.2.2激活函数52.3 TensorFlow框架简介73.开发工具的安装与神经网络搭建83.1 开发环境83.1.1 开发工具83.1.2 硬件环境83.2 开发工具安装与环境搭建83.2.1 安装开发工具83.2.2 搭建TensorFlow实验环境93.2.2.1 安装TensorFlow93.2.2.2 实验所需重要库103.3 卷积神经网络搭建测试113.3.1 获取人脸

9、照片数据集113.3.2搭建卷积神经网络133.3.3模型训练与结果143.3.4模型测试164.系统分析194.1 系统需求分析194.1.1 系统可行性分析194.1.2 可行性分析结论194.2 系统总体分析194.2.1录入学生信息模块204.2.2签到主界面模块204.2.3出勤信息模块214.3数据库设计214.4系统设计总流程225.人脸识别签到系统的设计与实现235.1界面UI设计235.1.1主界面设计235.1.2录入信息界面设计245.1.3识别人脸签到界面设计255.1.4出勤记录信息界面设计265.2系统运行使用流程275.3系统识别测试316.总结346.1工作总结

10、346.2展望与不足34参考文献35致谢361. 绪论1.1 开发背景1.1.1机器视觉技术的发展从二十世纪下半叶起,人类渐渐朝着机器视觉技术发展慢慢发展前进,从而使得有关机器视觉技术的软硬件技术在人类生活中得以广泛使用,其中机器视觉技术中的数字图像处理逐渐成为了当代社会信息来源的重要构建因素,其中产生了各种各样的数字图像分析与处理的需求和应用,进而对该技术的发展和革新不断促进着,该技术广泛应用于人机交互、智能安检、数字图像检索等领域中来,但其中较为突出的还是人脸识别的领域中1。其中作用于实现人脸识别的TensorFlow框架和OpenCV图像处理算法有着一定程度的优势。其中TensorFlo

11、w则作为深度学习而出现的一种神经网络框架,是谷歌的第二代人工智能学习系统,由DistBelief所研发,在它的名字中出现的张量Tenaor代表着N维数组,流Flow则代表着基于数据流图中的计算,TensorFlow其作用就是为了使张量从图像一端流动到另一端的计算过程,这也是它的名字TensorFlow的由来。由于TensorFlow能够将复杂的数据结构传输到人工设计的智能神经网络中进行分析和处理2,从而使得我们就能大大降低深度学习的开发难度和开发成本,从而更容易训练出深度神经网络模型,所以TensorFlow凭借着它擅长训练神经网络的优势无可厚非的成为神经网络最好使用的库之一。而OpenCV则

12、是一个计算机视觉库,它可用于实时处理图像,进行图像和视频等载入、保存采集的常规操作,作为一个开源的库,能够更好的让人们去使用优化3,所以当TensorFlow和OpenCV两者结合时,便可作用于基础的图像识别领域中。1.1.2日常工作签到形式的现状情况随着机器视觉技术对社会日常运作的作用越来越明显,人脸识别对于大家来说也并不陌生了,日常生活中的地铁或客运站等的安检,还有便利的支付宝人脸支付系统,更到手机锁屏的脸部识别解锁,可以看出人脸识别早已慢慢融入到了人类的社会中来。它凭借着非侵略性、便捷性、友好性、非接触性、可扩展性等优势得到人们的认可,也因此有着广泛的应用前景。也正因为这些优势人脸识别签

13、到也就开始代替手动签到从而出现在各种组织公司中,传统的手工签到会耗费大量时间来进行统计、也无法识别是否有人来假冒工作人员,而且就算是指纹或是刷卡签到也会出现效率低下而不易统计、代替他人打卡和维护成本高等不利的情况出现,因此人脸识别签到就出现了。1.2 开发意义 人脸识别的签到系统是为了代替现代生活中手工签到和刷卡签到等签到方式所出现的。对于传体的签到方式,人脸识别有着更大的优势和方便性,它不会像手工签到一般需要大量的人力物力来统计识别所到的人员,也不会像一般的二维码或是打卡签到等需要外物签到且需要排队等待的不方便,更重要的是以上传体的签到方式会出现漏签代签的行为所造成组织或公司的损失,浪费人力

14、物力,且会出现错误造成损失等不便的因素,那为什么不用更好的人脸识别来签到呢?人脸识别签到,不需要人工手签,也不需要排队等待,实时签到等方便性,但对于人脸识别最重要的还是其对人脸识别的准确率,所以本次实验研究更着重于人脸识别的准确率,提高准确率才能更好更准确的识别对应的人,才能减少出勤的错误。1.3 开发目标录入人脸信息:调用摄像头对人脸进行采集,并保存在对应的文件夹中。设计神经网络训练模型:对卷积神经网络各个层次进行设计编辑,从而获得一个准确率较高的训练模型。输出对录入人脸进行识别并完成签到:运用训练好的模型对实时摄像中的人进行识别,成功识别后进行签到信息的登记。系统UI的基本功能:录入人脸信

15、息,在签到界面进行签到,相应的签到成功人员表和缺勤人员表。1.4 本文章节安排第一章:绪论。本章节主要介绍所做课题的开发社会中的背景,还有对其开发的意义和所要完成的目标。简单叙述了本文要研究的主要内容。第二章:对卷积神经网络进行理论性介绍。本章节是对卷积神经网络内部结构的简单介绍,并对时下的流行的深度学习框架TensorFlow进行分析。第三章:开发工具的安装与神经网络搭建。主要介绍了开发所需要的工具和重点对卷积神经网络设计分析。第四章:系统分析。对系统的可行性等进行分析并对系统功能划分模块。第五章:人脸识别签到系统的设计与实现。本章节将设计好的各个功能模块,进而将训练好的人脸识别模型整合在一

16、起,使得整个系统设计得以完成。第六章:工作总结。本章节对整个实验进行总结,简述整个实验过程并对其不足之处和能够改进的地方进行简单的描述。2. 卷积神经网络理论介绍2.1人工神经网络简介人工神经网络(Artificial Neural Network,ANN)作为20世纪80年代来人工智能领域中所兴起的研究热点,人工神经网络主要就是模仿人类脑中的神经元网络从而构建实现的一个模型,即对数据信息进行提取、分析、处理,然后再将处理后的数据进行分类的一个过程,而人们把这整个过程构建成为一个模型,所以人工神经网络其实就是对各种各样的数据进行分类识别的一种模型4。人工神经网络主要的架构是由神经元、层、网络这

17、三个部分所组成,其中作为人工神经网络中最基本的单元神经元,它以层的方式相组成,然后每一层中的神经元和前后层的神经元相连接,从而分为输入层、输出层和隐含层,而这三层相互连接就形成一个神经网络。(1)输入层:由输入单元组成,接收来自外部环境所传进来的信息,进而这些输入单元可以接收输入数据样本中各种不同的特征信息。(2)隐含层:介于输入层和输出层之间,这层的作用是对输入数据进行分析,其函数联系着输入层和输出层的变量,使其更配适合数据。(3)输出层:这一层是对最终结果的生成,每一个输出单元对应着某一特定的分类,为整个网络送出外部系统的结果值。图2-1生物神经元与神经元网络进十多年来,人们对人工神经网络

18、ANN的研究不断深入,触及到了各行各业的邻域中来,其中在生物学、医学和智能机器人等各方面的领域里,解决了大量难以解决的实际问题,从而人工神经网络表现出了它具有良好的智能特性,为人类社会造福。2.2卷积神经网络简介卷积神经网络(Convolutional Neural Network,CNN) 是一种包含卷积运算且结构复杂的前馈神经网络。卷积神经网络中的人工神经元能够在局部覆盖范围内对周围单元做出响应,因此在图像处理方面具有优越性。卷积神经网络作为人工神经网络中的一种,与其结构大同小异,几乎都是有若干个卷积层和全连接层所组成,但与其它人工神经网络相比,卷积神经网络能够更好的对图像进行分析处理5。

19、卷积神经网络CNN的主要分层结构一般包括以下四层6:卷积层(Convolutional layer):在卷积神经网络中,每层的卷积层都是由多个卷积单元组成,每个卷积单元的参数通过反向传播算法来进行自身优化,简单来说就是从输入层中提取到输入信息中的不同特征,假如整个网络中存在着多层卷积层,就可以从低级特征中反复迭代出更为复杂的特征。线性整流层(Rectified Linear Units layer,Relu layer):绝大多数卷积神经网络都会使用线性整流函数f(x)=max(0,x)用来作为该层的激励函数,它的作用是通过该函数增强整个神经网络的非线性特性和判断函数,而不改变卷积层本身。除了

20、Relu函数外还有其他能增强网络的非线性特性的函数,例如Sigmoid函数f(x)=(1+e-x)-1、双曲正切函数f(x)=tanh(x),f(x)=|tanh(x)|等,但是Relu函数使用更多7,这大概是因为它在将神经网络训练速度提升数倍的同时,而不会对模型的泛化准确度造成较大影响。池化层(Pooling Layer):在经过多次数据集特征训练后,会产生一些无用的参数,从而导致训练效率下降,这时候就需要池化来将冗余的参数去除来提高模型训练效率。损失函数层(loss layer):该层用于确定训练过程如何“惩罚”网络中的预测结果和实际结果间的差异,它通常也是作为网络结构中的最后一层8。图2

21、-2 经典CNN结构示意图2.2.1卷积和池化卷积(Convolution)是分析数学的一种运算,其公式为:f()g(x)d它大致的运用就是将图像用一块设计好大小的模板进行卷积,使图像中的每一个点与模板上的原点进行重合并且使其点对点相乘,最后再进行相加从而得到该点的卷积值。图2-3卷积过程示意图如图2-3所示中,最左边的是那一副原始图像,而中间的是模板即卷积层,最后输出的是卷积结果。池化(Pooling):它又被称为欠采样或下采样,它主要的作用是对模型特征进行降维,压缩数据和参数的个数,进而减少训练模型的过拟合现象,同时也提高了模型的容错性。池化主要包括最大池化和平均池化9。图2-4 max

22、pooling和average pooling的区别由图2-4所示可以看出最大池化和平均池化的区别,一个可以提取到特征纹理,另一个更好的来保留背景的信息。2.2.2激活函数激活函数(activation function):通过激活函数可以使模型避免正确和错误间徘徊不定时,能更好的将模型偏向于正确的那一边。同时它对于模型的非线性处理能力有着促进作用,而且还能加速模型收敛10。常见的激活函数有以下:Sigmoid函数,其公式为:fx=11+ex图2-5 Sigmoid函数Sigmoid函数是最早被人们所广泛使用的函数,它在分类任务输出层中有着丰富的经验,所以它在对数据进行分类的情况下使用较多。在

23、图2-5中可以发现,Sigmoid函数的输入参数控制在区间0,-1中,通过其处理后数据也如同概率一般,这也是它从开始到现在都没有被人们淘汰的原因。Tanh函数,其公式为:tanhx=exexex+ex图2-6 Tanh函数由图2-6所示,Tanh函数和Sigmoid函数在数轴上所形成的图形差不多一致,其区别就是在于Tanh函数的区间在于-1,1之间。Tanh函数它的中间值为0,在一定理解上可以说激活值在下层的正态分布输入了。Rule函数,其公式为:fx=max(0,x)图2-7 Rule函数Rule函数作为现阶段人们使用最多的函数,它解决了Sigmoid函数和Tanh函数中常见的梯度消失问题,

24、同时也是计算梯度最快的激励函数。Rule函数能够解决梯度消失的方法就在于它能够将模型的梯度固定在0和1这两个值,所以能够解决梯度消失的问题。2.3 TensorFlow框架简介TensorFlow作为深度学习而出现的一种神经网络框架,是谷歌的第二代人工智能学习系统,由DistBelief所研发,它同时也是基于python的开源框架。TensorFlow所拥有特性如下:1) 具有高度的灵活性:只要能将计算表示成为一个数据流图,就能使用到TensorFlow,并且在整个训练网络过程中,它可以让工作人员看到当前网络的表现情况。2) 可移植性:它可以在CPU和GPU上进行运算,并且可以运行在手机移动端

25、和台式机等其他设备上。3) 支持多语言:python、C+4) 性能高度优化:作为一个开源框架,这就意味着会有许许多多的学者对其进行优化和完善。进行多项分析了解,毋庸置疑TensorFlow是当前卷积神经网络中最为实用的框架,它善于对深度学习模型进行分析训练,这也是本次实验所使用它的原因。3. 开发工具的安装与神经网络搭建3.1 开发环境3.1.1 开发工具表3-1 软件和重要库基本信息表序号名称版本备注1Windows10家庭中文版64位操作系统2JetBrains PyCharm2017.3.6开发工具3Jupyter Notebook3.6开发工具4TensorFlow1.14.0CNN

26、框架5OpenCV-python4.1.2.30图像处理工具库6PyMySQL0.9.3PyCharm内置数据库3.1.2 硬件环境表3-2 硬件信息表序号名称配置备注1CPUIntel(R) Core(TM) i5-8300H CPU2.30GHz2存储4G内存+500G机械硬盘3.2 开发工具安装与环境搭建3.2.1 安装开发工具(一)PyCharm:作为JetBrains所构建的Python IDE有着一整套实用的工具,它可以帮助用户在用Python语言开发项目时提高效率,它有着IDE所具备的调试、项目管理、智能提示和单元测试等功能。PyCharm社区版是免费提供给开发者使用的,本次实验

27、使用它的最大原因是能够用它来建立项目,这样一来就能对整个项目的每一个文件更好的编辑与管理。安装下载地址:(二)Jupyter Notebook:它的本质是一个Web应用程序,它是为了方便开开发人员创建和共享文学化程序文档,它支持实时编码、markdown和可视化等,可用于数据的清洗和转换、机器学习和建立数学模型等,所以本次实验使用Jupyter是为了方便设计对特定人脸识别的TensorFlow框架模型,我们可以在Jupyter里看得到每一步代码的实现是否出错,还能多次对比训练出的模型的准确率,得到出所想要的模型。安装:Windows下直接cmd中pip安装,语句pip install jupy

28、ter。3.2.2 搭建TensorFlow实验环境从最基础的卷积神经网络进行研究,在解决问题的开始,我们需要了解深度学习的基本方法,其中要重点对卷积神经网络结构中的卷积层和池化层进行研究,搭建好TensorFlow的实验平台并且要好好理解其工作的原理以及框架结构,这是实验的基础也是重中之重的要点11。所以本章节为对实验平台的搭建,以TensorFlow框架为基础,通过其训练模型,从而达到实验目的,训练出准确率较高的模型。3.2.2.1 安装TensorFlowPip安装:在python中的模块库都可以通过使用pip进行安装,它的安装就类似于Linux中的命令语句,特别的方便。由于pip是依赖

29、python做存在的,所以在windows上需要安装python,在官网下下载python3后配置好环境变量即可使用pip下载安装python的库。本次实验环境是基于python3的tensorflow-1.14.0版本,所以直接在windows下CMD中输入pip install tensorflow=1.14.0进行pip安装即可。图3-1 pip安装界面OpenCV(Open Source Computer Vision Library):OpenCV是适用于Windows、Linux等主流平台的开源库,它由着一系列C函数和少量C+类组成,且具有轻量级和高效性,同时提供着MATLAB、P

30、ython等语言的接口,实现了图像处理和计算机视觉中许多的通用算法12。因为它有着出色的图像处理能力,所以本次实验会使用到它来对人脸图像进行处理,它也可以运用pip进行下载安装,本次用到的版本是OpenCV-python-4.1.2.30版本。如果觉得用用命令行窗口下载比较麻烦的话,可以在PyCharm里面搜索下载,运行PyCharm“File Settings Project Project Interpreter+”,在图3-3内进行搜索所需要的库进行Install Package即可下载。图3-2 PyCharm内所安装的库图3-3搜索所需要的库3.2.2.2 实验所需重要库表3-3 重

31、要库基本信息表序号名称版本作用1Numpy1.16.0存储和处理矩阵,管理大量输入数据2Matplotlib3.0.32D绘图工具3PyQt55.13.0Designer界面编辑器,可以用来绘制系统界面4PyMySQL0.9.3Python中操作MySQL的模块,也是作为本次实验的数据库5Scikit-learn0.22.1获取数据、处理数据、特征工程、设计模型、模型评估、应用6Tensorflow1.14.0本次实验的模型框架7Opencv-python4.1.2.30提供图像处理和计算机视觉处理通用算法算法3.3 卷积神经网络搭建测试3.3.1 获取人脸照片数据集作为训练模型基础的数据集,

32、越是拥有丰富数据且标签准确则越是有助于帮助提高模型的训练结果。想要对不同人脸识别提供更加可靠的特征和信息,用来提升模型的识别准确率,则必须要有多个以上的人提供照片,从而来丰富数据量的数据集。(1)基本数据集获取。首先我们先获取最初的未经过处理的数据集,我找来了五个人进行拍摄正面照,每人100张,共500张正面照,由于人工一张一张拍过于麻烦,我们会通过代码调动计算机摄像头进行拍照,并且整理好放入个人文件夹中,这一步在之后的系统实现也会用得到。图3-4实现拍摄100张照片的部分代码通过代码实现控制摄像头拍摄100张个人照片,如图3-4所示:图3-5个人文件夹中100张照片(2)数据集预处理。每张照

33、片大小都是640*480,由于每个人的照片存在着大量特征,在网络中不断的训练同时又会不断产生特征,进而出现大量冗余无用的数据,降低了整个模型的准确率,所以在初期每个人照片数据中会先去除一些无用的特征,例如背景、衣服和发型等特征,而留下每个人的五官脸部数据,这个时候我们需要识别每张照片中人脸的位置,会用到别人训练好的人脸部位识别的模型(haarcascade_frontalface_default.xml),然后将其采集裁剪为大小64*64的人脸图,最后将其灰度化转换成灰度图,之后可直接运用其进行模型的训练。图3-6裁剪人脸和人脸照片灰度化部分代码图3-7裁剪灰度化处理图3-8灰度化处理后裁剪的

34、人脸照片3.3.2搭建卷积神经网络经过数据的预处理后,我们就得到了可以用来训练和测试的数据集,之后就到了最重要的这一步,搭建卷积神经网络。本次实验的网络结构为三层卷积池化层,两层全连接层,在这基础上我们又在输出层增加了一层1*1*1的卷积层,为的是使输入增加非线性的表示、加深网络且提升模型的表达能力,同时基本不增加计算量13,而且在本次实验中为防止某些权重更新,导致过拟合现象出现,从而在卷积层和全连接层中加入了随机失效Dropout。使用的激活函数为Rule函数。本次实验的数据为原始像素64*64的灰度图数据集。设置了4层Convolution layer,ksize分别是1*1,3*3,8*

35、8。每层池化层都采用最大池化,大小都是1*2。每一层都使用了Dropout。具体如下表所示:表3-4卷积神经网络模型结构种类核大小输入通道输出通道Dropout输入64*64卷积层11*1132卷积层23*31320.5池化层11*2232卷积层33*332640.5池化层21*2264卷积层43*364640.5池化层31*2264全连接层15120.75全连接层25120.753.3.3模型训练与结果本次模型训练使用的优化神经网络API是Keras框架,在使用前还有一个前置准备工作,即使用compile对训练过程调整一些学习条件,主要compile参数有两个,分别是优化器(optimize

36、r)和损失函数(loss)。(1)优化器:对于深度学习的目的就是不断的对网络中的参数进行调整,使得参数能够对输入做出各种非线性变换,从而拟合输出,它的本质就是通过函数寻找出最优的解法14,因此怎样去更新参数是作为深度学习研究中的重点,而更新这参数的算法通常被称之为优化器,在本次实验中所使用的优化器优化算法为adam。学习率(Learning rate)作为优化器中的一个重要参数,它决定了目标函数是否可以在适当的节点上压缩到指定范围内的最小值。当学习率设置得偏高时,梯度可能在最小值的附近来回震荡从而无法收敛,而当学习率设置偏低时,就会降低模型的收敛速率。对于本次实验为了初始训练时更快改变改变权重

37、,所以我将学习率设置为0.01。(2)损失函数:在模型训练学习中,损失函数可以简单明了分析出算法好坏,提供了方便性。由于本次实验模型用的激活函数是softmax函数,所以损失函数则使用了分类交叉熵函数(categorical cross_entropy)。图3-9 优化器和损失函数代码设计好卷积神经网络各个层和keras框架后就开始训练模型了,依据训练样本的模型输出和样本实际值进行模型训练后,设置了精度阈值为0.98,当训练的精度大于设置的精度阈值时就会停止实验,防止模型出现过拟合现象,导致准确度下降且浪费时间的情况。经过多次的尝试,选择了每轮训练的样本数(batch_size)为64,迭代次

38、数为296。表3-5卷积神经网络模型训练batch_size3264128256Epoch8888Train Epoch371894Test Epoch371894迭代的次数2961447232训练完成时间75.94s63.03s67.24s57.99sTrain accuracy0.843750.854260.500.5975Test accuracy0.937500.953120.523440.65234图3-10 Batch_size为32、64、128、256的训练结果图3-11 model accuracy折线图如图3-10所示,显而易见的看出在同等的训练条件的情况下,batch_s

39、ize大小为64的准确率比较高,而整个训练过程也对于其他的比较平滑。图中batch_size为128和256的折线也可以看出在迭代次数50左右时出现向上波动的趋势,如果继续迭代下去,其准确率还会有所增长,这样完成的模型也是比较好的,但是对比其他batch_size来说,它需要耗费更多时间来训练才能提高准确率,所以这也是不选择128和256大小的原因,所以最终选择batch_size大小为64的测试模型,其训练准确率大致为0.95。通过折线图可以看出每条折线都有毛躁尖刺,不够平滑,这可能是出现的过拟合现象,发生过拟合的主要原因大致有三种:(1) 数据有噪声,其中要发生在对数据预处理开始,我们可以

40、通过预处理对数据进行降噪,从而减少数据噪声,但本次实验开始就对数据进行裁剪灰度化处理,也达到降噪作用,数据集处理合理。(2) 训练测试数据不足,解决方法很简单,就是继续添加大量数据再进行模型训练,这也是本实验主要原因,数据准备得不充足。(3) 训练模型过度导致模型非常复杂,可以通过调整参数或是减少卷积层数来解决出现得这个问题。虽然模型大致时训练出来了,但是还是有些不足,需要提高的地方,训练集数据的不足,卷积神经网络结构参数仍可以调整或是增加更多层次,硬件性能原因,模型训练学习时间短暂等等。3.3.4模型测试运用训练完成后所生成的模型文件train-mode对导入图片进行人脸识别并得出对应的人名

41、。在此过程中会使用rectangle函数对导入图像进行检测,并在图像脸部生成一个框框,再使用putText函数将获取的人名打印再框边上,这便查看预测结果,其部分代码如下图:图3-12人脸识别结果处理部分代码运行后生成图片result.jpg,可在当前文件下进行查看,可直观查看结果的预测,如下图3-12所示:图3-13生成预测图片result.jpg为测试模型是否会出现错误,所以对整组图片进行循环测试,分别进行了循环十次、五十次和一百次的测试,结果得出下表:表3-6模型识别循环次数/次1050100正确识别图/张104795错误识别图/张035图3-14循环十次生成图片情况图3-15其中识别出现

42、错误情况由各种情况可以得出训练出的模型对人脸识别还是较为准确的,虽然出现极少数出错的情况,大致可以忽略不记,其主要原因可能是单方面数据集较少的原因,因为每个人所做的预处理只有对人脸裁剪并灰度化导致数据集不足,其实可以在预处理数据后对图片进行旋转、平移、对称处理等操作来对数据集的扩充,从而解决数据集不足的情况,这样训练出的模型也可以进一步完善,但对应整体准确率测试情况下来看,预测结果也是良好的。4. 系统分析4.1 系统需求分析4.1.1 系统可行性分析(1)经济可行性:本人脸识别签到系统是我的毕业设计项目,且整个项目都是在本人笔记本电脑上通过开发工具和网上查找资料后所开发制作的,成本上基本为零

43、。(2)技术可行性分析:系统所使用的技术和框架都是现阶段社会比较流行的,比如python语言、卷积神经网络、TensorFlow框架等。4.1.2 可行性分析结论人脸识别签到系统的设计与开发是为了提高企业或是组织签到的效率,它为了减少人力物力,并且能够准确的识别签到人员,大大方便了人们日常生活的签到流程。从经济上,系统开发成本几乎为零,在技术上来看,所使用的技术都是现阶段比较流行的技术框架。所以根据上诉分析,本人脸识别签到系统开发条件满足,实施方案可行。4.2 系统总体分析在本次实验研究人脸识别签到系统中,从实践生活学习的实际角度出发,设计主要涵盖以下功能模块:录入学生信息模块、签到主界面模块

44、、出勤信息模块。如下图4-1所示:图4-1 系统设计分析4.2.1录入学生信息模块在录入学生模块实现中,我将完成以下功能,录入学生的基本信息,并打开摄像头拍下多张学生的正面照作为训练的数据,最后在这个模块中可以直接进行模型的训练,将图像数据加入卷积神经网络中进行训练,得出一个全新的模型,用于签到主界面的模块中。图4-2 录入学生信息模块录入学生信息:学号、姓名、专业、班级和正面照,学号姓名专业班级会直接录入数据库中,而照片将加入训练模型作为新的数据集。训练模型:在已经设计好的卷积神经网络中,将所以录入的学生照片进行训练,得出可行的训练出对应人脸识别的模型,作用于后面的签到主界面模块中。4.2.

45、2签到主界面模块作为本系统最主要的模块,我们将会在这个界面模块中进行学生的人脸识别,在这个界面将会打开摄像头对人脸进行一一识别,界面会将学生脸部框起来,在框框的上方会显示学生名字,成功后会在界面下方显示学生签到成功并显示学生信息,在这个界面也可以查询到缺勤学生信息的名单,这就是签到主界面模块的所做到的功能。图4-3 签到主页面模块识别学生信息签到:通过所以学生照片信息训练出的模型进行对学生人脸的识别,从而达到人脸识别签到。缺勤学生信息名单:这个部分将打开出勤信息模块,查看缺勤学生的信息。4.2.3出勤信息模块这个出勤信息模块是较为简单的模块,在签到主界面模块中进行学生人脸识别后,后台将会和数据

46、库信息进行对比,得出缺勤学生信息的名单,从而生成这个出勤信息模块中的出勤信息。图4-4 出勤信息模块出勤信息表:显示缺勤的学生信息,可以方便使用者们进行学生管理。4.3数据库设计本次实验所使用到的数据库是在PyCharm内下载的插件DB Navigator,可以在PyCharm中FileSettingsPlugins,搜索DB Navigator,进行install即可下载安装,然后在导航栏中点击DB NavigatorSettingsConnection添加SQL数据库就能进入数据库的使用操作界面。本次所需要添加的数据库信息如下表:表4-1 数据库表列名中文名数据类型长度备注user_id学

47、号Int20user_name姓名Char20user_sp专业Char20user_class班级Int20state编号Char10图4-5 数据库ER图4.4系统设计总流程图4-6系统设计总流程结构图5. 人脸识别签到系统的设计与实现5.1界面UI设计我们可以在PyQt5中通过代码来编写UI界面,也可以在Qt Designer中来对UI界面的设计,它的特点是实现了视觉和逻辑的分离,不用通过代码来进行设计,而是用拖拽控件的方式来进行对UI界面的设计,能够随时查看控件效果可谓十分的方便,所以本次实验的UI界面都是通过Qt Designer进行设计实现15。图5-1 Qt Designer工作

48、台如图5-1 Qt Designer工作台所示,我们可以通过拖动左边工具栏中的控件进行对系统UI界面的设计。由于Qt Designer生成的是.ui文件,我们可以通过pyuic5工具进行转换成为.py文件,从而加以使用。5.1.1主界面设计在主界面中需要有一个标题“人脸识别签到系统”来标明系统名称,一旁还需要四个按钮来进行页面的跳转或是打开新页面,这四个按钮分别是开始签到、注册、缺勤名单、帮助按钮。在Qt Designer中则需要找到四个Push Button用来分别作为上诉四个按钮,然后再用Frame来分别作为标题窗口和提示窗口,从而得到基本的主界面,如图5-2所示:图5-2 主界面窗口设计

49、5.1.2录入信息界面设计在录入信息界面中,我们需要一个开启摄像头的主画面进行对人脸照片的获取,注册则需要输入到学生的学号和姓名,为了方便查看训练的进度,可以设计一个实时进度条来得到训练的程度,而这个界面的按钮则有新建、拍照、注册、模型训练按钮。本界面和主界面所用到的控件大致相同,需要增加的是输入学生姓名和学号的输入框Line Edit和进度条的Progress Bar控件,得到如图5-3的录入信息界面:图5-3 录入信息界面窗口设计5.1.3识别人脸签到界面设计本界面和主界面的设计大致相同,就是把标题的部分变成录入界面中的开启摄像头的实时获取人脸信息的摄像流框,从而通过这个界面进行对特定人脸

50、的识别,识别人脸界面如图5-4所示:图5-4 识别人脸签到界面窗口设计5.1.4出勤记录信息界面设计出勤记录信息界面就是个签到表,在这个界面可以显示缺勤成员的名单,显示各个成员的状态,所以整个界面大致有学生学号姓名状态作为信息内容,在Qt Designer中则用到Table Widget控件进行添加信息,整体设计如图5-5所示:图5-5出勤记录信息界面设计5.2系统运行使用流程首先运行控制项目组所有文件的主Python文件main.py,就可以开启人脸识别签到系统。图5-6主文件main.py部分代码运行main.py后进入系统的主要界面,由于主界面、签到界面等界面窗口的显示是通过不断进行页面

51、刷新才能显示在出来,所有需要通过Time函数来进行循环刷新,即图5-7中的代码:图5-7部分定义函数代码主界面窗口:图5-8系统主界面窗口点击注册按钮即可进入注册界面,在这个界面中我们可以对学生信息进行输入保存到数据库中,我们也可以直接点击模型训练按钮进行训练模型,训练完成后可以点击开始按钮进行签到测试。图5-9注册和训练模型界面窗口通过点击缺勤名单按钮即可对签到或是缺勤学生信息进行查询,也可以在签到表界面窗口进行重置信息,从而进行下一次签到。图5-10签到表界面窗口主界面的帮助按钮则是提示系统使用方法,方便其他人使用。图5-11帮助界面窗口签到界面进行签到测试,在主页面点击开始进行签到:图5

52、-12签到界面实时视频结果由于签到地点光线过暗,镜头识别灵敏度不高,在几次闪烁后才显示签到成功,但也能识别出镜头内的人并显示出姓名,表明实验测试成功,不过还有些有待提高的地方,之后总结中会有说明。5.3系统识别测试进入系统主界面后点击开始进行人脸识别签到,系统通过图5-13进行识别对比数据库姓名进行签到是否成功,当在较暗地方、脸上有其他东西时和遮挡部分脸的情况下测试系统识别是否成功。图5-13部分代码正常签到情况所得到效果如下图:图5-14正常签到当如果在较暗的环境下或是背光情况下则会出现签到失败的结果,因为识别不出是谁的脸所对应的名字,脸部框上的名字会一直变化,不能识别出所对应脸部,如下图所

53、示:图5-15较暗情况下签到结果如果是当脸部有其他东西比如眼镜或是杂物类物品的情况下,依旧脸部框上的名字会一直发生变化而显示识别失败,因为在录入数据图片时,脸上并没有对应的物品而进行了模型训练后,当实行开始签到时脸部又出现其他物品时,则会影响到识别的准确率,虽然有的时候会识别签到成功,但都是个别情况下,所以在签到时,脸部尽量与录入时照片保持一致,从而达到效果。图5-16脸部有遮挡物时签到结果 同理可得当遮挡住部分脸时也会是显示签到失败,所以对以上情况进行总结可得,签到时尽量在较亮的地方进行签到,签到时不能够挡住部分脸,而且同时想一下录入信息时是否带眼镜,从而避免签到失败的情况出现。6. 总结6.1工作总结本次实验开始的念头是处于好奇,因为在一次小学期实验做过猫狗识别,想到这是不同的物种,识别训练起来会比较简单,如果换做是不同的人呢?它是更难还是更简单呢?所有就想到了人脸识别,再想到平时都会常见的二维码签到方式,就

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论