《基于tensorflow的人脸识别签到系统.docx》由会员分享,可在线阅读,更多相关《基于tensorflow的人脸识别签到系统.docx(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、摘 要随着机器视觉技术对人们日常生活运作越来越明显,人脸识别技术也凭借着其便捷友好的特性出现,并在医疗、安全和通信等邻域都有着应用,而其中较为常用的人脸识别签到也在各组织使用着,并且开始逐渐代替传统的签到手法。为了了解人脸识别签到技术,本项目通过运用深度学习中的TensorFlow框架来搭建卷积神经网络,将训练好的模型实现对特定人脸的识别进行签到,再添加录入信息模块,签到界面模块,出勤信息模块这三个模块来完成实现整个人脸识别签到系统。我们可以通过本系统对成员信息的录入,再运用录入的数据来训练模型进行对人脸识别签到,最后可以在出勤信息表中了解成员出勤状况,在整个实现过程中也能大致了解到人脸识别签
2、到的技术,这就是这个项目的意义所在。关键字:机器视觉技术 卷积神经网络TensorFlow 人脸识别AbstractWith the machine vision technology is becoming more and more obvious to peoples daily life, face recognition technology also appears with its convenient and friendly characteristics, and has applications in medical treatment, security and com
3、munication. 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 the face recognition check-in technology, this project uses the TensorFlow framework in depth learning to b
4、uild 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 module and attendance information module are added to complete the realization of the whole Registration of F
5、ace 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 attendance status of members in the attendance information table, and we can also roughly understand the face rec
6、ognition 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.1机器视觉技术的发展11.1.2日常工作签到形式的现状情况11.2 开发意义21.3 开发目标21.4 本文章节安排22.卷积神经网络理论介绍32.1人工神经网络简介32.2卷积神经网络简介32.2.1卷积和池化4
7、2.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 获取人脸照片数据集113.3.2搭建卷积神经网络133.3.3模型训练与结果143.3.4模型测试164.系统分析194.1 系统需求分析194.1.1 系统可行性分析194.1.2 可行性分析结论194.2 系统总体分析
8、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工作总结346.2展望与不足34参考文献35致谢36广东东软学院本科生毕业设计(论文)1. 绪论1.1 开发背景1.1.1机器视觉技术的发展从二十世纪下半叶起,人类渐渐朝着机器视觉技术发展慢慢发展前进,从而使得有关机器视觉
9、技术的软硬件技术在人类生活中得以广泛使用,其中机器视觉技术中的数字图像处理逐渐成为了当代社会信息来源的重要构建因素,其中产生了各种各样的数字图像分析与处理的需求和应用,进而对该技术的发展和革新不断促进着,该技术广泛应用于人机交互、智能安检、数字图像检索等领域中来,但其中较为突出的还是人脸识别的领域中1。其中作用于实现人脸识别的TensorFlow框架和OpenCV图像处理算法有着一定程度的优势。其中TensorFlow则作为深度学习而出现的一种神经网络框架,是谷歌的第二代人工智能学习系统,由DistBelief所研发,在它的名字中出现的张量Tenaor代表着N维数组,流Flow则代表着基于数据
10、流图中的计算,TensorFlow其作用就是为了使张量从图像一端流动到另一端的计算过程,这也是它的名字TensorFlow的由来。由于TensorFlow能够将复杂的数据结构传输到人工设计的智能神经网络中进行分析和处理2,从而使得我们就能大大降低深度学习的开发难度和开发成本,从而更容易训练出深度神经网络模型,所以TensorFlow凭借着它擅长训练神经网络的优势无可厚非的成为神经网络最好使用的库之一。而OpenCV则是一个计算机视觉库,它可用于实时处理图像,进行图像和视频等载入、保存采集的常规操作,作为一个开源的库,能够更好的让人们去使用优化3,所以当TensorFlow和OpenCV两者结合
11、时,便可作用于基础的图像识别领域中。1.1.2日常工作签到形式的现状情况随着机器视觉技术对社会日常运作的作用越来越明显,人脸识别对于大家来说也并不陌生了,日常生活中的地铁或客运站等的安检,还有便利的支付宝人脸支付系统,更到手机锁屏的脸部识别解锁,可以看出人脸识别早已慢慢融入到了人类的社会中来。它凭借着非侵略性、便捷性、友好性、非接触性、可扩展性等优势得到人们的认可,也因此有着广泛的应用前景。也正因为这些优势人脸识别签到也就开始代替手动签到从而出现在各种组织公司中,传统的手工签到会耗费大量时间来进行统计、也无法识别是否有人来假冒工作人员,而且就算是指纹或是刷卡签到也会出现效率低下而不易统计、代替
12、他人打卡和维护成本高等不利的情况出现,因此人脸识别签到就出现了。1.2 开发意义 人脸识别的签到系统是为了代替现代生活中手工签到和刷卡签到等签到方式所出现的。对于传体的签到方式,人脸识别有着更大的优势和方便性,它不会像手工签到一般需要大量的人力物力来统计识别所到的人员,也不会像一般的二维码或是打卡签到等需要外物签到且需要排队等待的不方便,更重要的是以上传体的签到方式会出现漏签代签的行为所造成组织或公司的损失,浪费人力物力,且会出现错误造成损失等不便的因素,那为什么不用更好的人脸识别来签到呢?人脸识别签到,不需要人工手签,也不需要排队等待,实时签到等方便性,但对于人脸识别最重要的还是其对人脸识别
13、的准确率,所以本次实验研究更着重于人脸识别的准确率,提高准确率才能更好更准确的识别对应的人,才能减少出勤的错误。1.3 开发目标录入人脸信息:调用摄像头对人脸进行采集,并保存在对应的文件夹中。设计神经网络训练模型:对卷积神经网络各个层次进行设计编辑,从而获得一个准确率较高的训练模型。输出对录入人脸进行识别并完成签到:运用训练好的模型对实时摄像中的人进行识别,成功识别后进行签到信息的登记。系统UI的基本功能:录入人脸信息,在签到界面进行签到,相应的签到成功人员表和缺勤人员表。1.4 本文章节安排第一章:绪论。本章节主要介绍所做课题的开发社会中的背景,还有对其开发的意义和所要完成的目标。简单叙述了
14、本文要研究的主要内容。第二章:对卷积神经网络进行理论性介绍。本章节是对卷积神经网络内部结构的简单介绍,并对时下的流行的深度学习框架TensorFlow进行分析。第三章:开发工具的安装与神经网络搭建。主要介绍了开发所需要的工具和重点对卷积神经网络设计分析。第四章:系统分析。对系统的可行性等进行分析并对系统功能划分模块。第五章:人脸识别签到系统的设计与实现。本章节将设计好的各个功能模块,进而将训练好的人脸识别模型整合在一起,使得整个系统设计得以完成。第六章:工作总结。本章节对整个实验进行总结,简述整个实验过程并对其不足之处和能够改进的地方进行简单的描述。2. 卷积神经网络理论介绍2.1人工神经网络
15、简介人工神经网络(Artificial Neural Network,ANN)作为20世纪80年代来人工智能领域中所兴起的研究热点,人工神经网络主要就是模仿人类脑中的神经元网络从而构建实现的一个模型,即对数据信息进行提取、分析、处理,然后再将处理后的数据进行分类的一个过程,而人们把这整个过程构建成为一个模型,所以人工神经网络其实就是对各种各样的数据进行分类识别的一种模型4。人工神经网络主要的架构是由神经元、层、网络这三个部分所组成,其中作为人工神经网络中最基本的单元神经元,它以层的方式相组成,然后每一层中的神经元和前后层的神经元相连接,从而分为输入层、输出层和隐含层,而这三层相互连接就形成一个
16、神经网络。(1)输入层:由输入单元组成,接收来自外部环境所传进来的信息,进而这些输入单元可以接收输入数据样本中各种不同的特征信息。(2)隐含层:介于输入层和输出层之间,这层的作用是对输入数据进行分析,其函数联系着输入层和输出层的变量,使其更配适合数据。(3)输出层:这一层是对最终结果的生成,每一个输出单元对应着某一特定的分类,为整个网络送出外部系统的结果值。图2-1生物神经元与神经元网络进十多年来,人们对人工神经网络ANN的研究不断深入,触及到了各行各业的邻域中来,其中在生物学、医学和智能机器人等各方面的领域里,解决了大量难以解决的实际问题,从而人工神经网络表现出了它具有良好的智能特性,为人类
17、社会造福。2.2卷积神经网络简介卷积神经网络(Convolutional Neural Network,CNN) 是一种包含卷积运算且结构复杂的前馈神经网络。卷积神经网络中的人工神经元能够在局部覆盖范围内对周围单元做出响应,因此在图像处理方面具有优越性。卷积神经网络作为人工神经网络中的一种,与其结构大同小异,几乎都是有若干个卷积层和全连接层所组成,但与其它人工神经网络相比,卷积神经网络能够更好的对图像进行分析处理5。卷积神经网络CNN的主要分层结构一般包括以下四层6:卷积层(Convolutional layer):在卷积神经网络中,每层的卷积层都是由多个卷积单元组成,每个卷积单元的参数通过反
18、向传播算法来进行自身优化,简单来说就是从输入层中提取到输入信息中的不同特征,假如整个网络中存在着多层卷积层,就可以从低级特征中反复迭代出更为复杂的特征。线性整流层(Rectified Linear Units layer,Relu layer):绝大多数卷积神经网络都会使用线性整流函数f(x)=max(0,x)用来作为该层的激励函数,它的作用是通过该函数增强整个神经网络的非线性特性和判断函数,而不改变卷积层本身。除了Relu函数外还有其他能增强网络的非线性特性的函数,例如Sigmoid函数f(x)=(1+e-x)-1、双曲正切函数f(x)=tanh(x),f(x)=|tanh(x)|等,但是R
19、elu函数使用更多7,这大概是因为它在将神经网络训练速度提升数倍的同时,而不会对模型的泛化准确度造成较大影响。池化层(Pooling Layer):在经过多次数据集特征训练后,会产生一些无用的参数,从而导致训练效率下降,这时候就需要池化来将冗余的参数去除来提高模型训练效率。损失函数层(loss layer):该层用于确定训练过程如何“惩罚”网络中的预测结果和实际结果间的差异,它通常也是作为网络结构中的最后一层8。图2-2 经典CNN结构示意图2.2.1卷积和池化卷积(Convolution)是分析数学的一种运算,其公式为:-f()g(x-)d它大致的运用就是将图像用一块设计好大小的模板进行卷积
20、,使图像中的每一个点与模板上的原点进行重合并且使其点对点相乘,最后再进行相加从而得到该点的卷积值。图2-3卷积过程示意图如图2-3所示中,最左边的是那一副原始图像,而中间的是模板即卷积层,最后输出的是卷积结果。池化(Pooling):它又被称为欠采样或下采样,它主要的作用是对模型特征进行降维,压缩数据和参数的个数,进而减少训练模型的过拟合现象,同时也提高了模型的容错性。池化主要包括最大池化和平均池化9。图2-4 max pooling和average pooling的区别由图2-4所示可以看出最大池化和平均池化的区别,一个可以提取到特征纹理,另一个更好的来保留背景的信息。2.2.2激活函数激活
21、函数(activation function):通过激活函数可以使模型避免正确和错误间徘徊不定时,能更好的将模型偏向于正确的那一边。同时它对于模型的非线性处理能力有着促进作用,而且还能加速模型收敛10。常见的激活函数有以下:Sigmoid函数,其公式为:fx=11+e-x图2-5 Sigmoid函数Sigmoid函数是最早被人们所广泛使用的函数,它在分类任务输出层中有着丰富的经验,所以它在对数据进行分类的情况下使用较多。在图2-5中可以发现,Sigmoid函数的输入参数控制在区间0,-1中,通过其处理后数据也如同概率一般,这也是它从开始到现在都没有被人们淘汰的原因。Tanh函数,其公式为:ta
22、nhx=ex-e-xex+e-x图2-6 Tanh函数由图2-6所示,Tanh函数和Sigmoid函数在数轴上所形成的图形差不多一致,其区别就是在于Tanh函数的区间在于-1,1之间。Tanh函数它的中间值为0,在一定理解上可以说激活值在下层的正态分布输入了。Rule函数,其公式为:fx=max(0,x)图2-7 Rule函数Rule函数作为现阶段人们使用最多的函数,它解决了Sigmoid函数和Tanh函数中常见的梯度消失问题,同时也是计算梯度最快的激励函数。Rule函数能够解决梯度消失的方法就在于它能够将模型的梯度固定在0和1这两个值,所以能够解决梯度消失的问题。2.3 TensorFlow
23、框架简介TensorFlow作为深度学习而出现的一种神经网络框架,是谷歌的第二代人工智能学习系统,由DistBelief所研发,它同时也是基于python的开源框架。TensorFlow所拥有特性如下:1) 具有高度的灵活性:只要能将计算表示成为一个数据流图,就能使用到TensorFlow,并且在整个训练网络过程中,它可以让工作人员看到当前网络的表现情况。2) 可移植性:它可以在CPU和GPU上进行运算,并且可以运行在手机移动端和台式机等其他设备上。3) 支持多语言:python、C+4) 性能高度优化:作为一个开源框架,这就意味着会有许许多多的学者对其进行优化和完善。进行多项分析了解,毋庸置
24、疑TensorFlow是当前卷积神经网络中最为实用的框架,它善于对深度学习模型进行分析训练,这也是本次实验所使用它的原因。3. 开发工具的安装与神经网络搭建3.1 开发环境3.1.1 开发工具表3-1 软件和重要库基本信息表序号名称版本备注1Windows10家庭中文版64位操作系统2JetBrains PyCharm2017.3.6开发工具3Jupyter Notebook3.6开发工具4TensorFlow1.14.0CNN框架5OpenCV-python4.1.2.30图像处理工具库6PyMySQL0.9.3PyCharm内置数据库3.1.2 硬件环境表3-2 硬件信息表序号名称配置备注
25、1CPUIntel(R) Core(TM) i5-8300H CPU2.30GHz2存储4G内存+500G机械硬盘3.2 开发工具安装与环境搭建3.2.1 安装开发工具(一)PyCharm:作为JetBrains所构建的Python IDE有着一整套实用的工具,它可以帮助用户在用Python语言开发项目时提高效率,它有着IDE所具备的调试、项目管理、智能提示和单元测试等功能。PyCharm社区版是免费提供给开发者使用的,本次实验使用它的最大原因是能够用它来建立项目,这样一来就能对整个项目的每一个文件更好的编辑与管理。安装下载地址:(二)Jupyter Notebook:它的本质是一个Web应用
26、程序,它是为了方便开开发人员创建和共享文学化程序文档,它支持实时编码、markdown和可视化等,可用于数据的清洗和转换、机器学习和建立数学模型等,所以本次实验使用Jupyter是为了方便设计对特定人脸识别的TensorFlow框架模型,我们可以在Jupyter里看得到每一步代码的实现是否出错,还能多次对比训练出的模型的准确率,得到出所想要的模型。安装:Windows下直接cmd中pip安装,语句pip install jupyter。3.2.2 搭建TensorFlow实验环境从最基础的卷积神经网络进行研究,在解决问题的开始,我们需要了解深度学习的基本方法,其中要重点对卷积神经网络结构中的卷
27、积层和池化层进行研究,搭建好TensorFlow的实验平台并且要好好理解其工作的原理以及框架结构,这是实验的基础也是重中之重的要点11。所以本章节为对实验平台的搭建,以TensorFlow框架为基础,通过其训练模型,从而达到实验目的,训练出准确率较高的模型。3.2.2.1 安装TensorFlowPip安装:在python中的模块库都可以通过使用pip进行安装,它的安装就类似于Linux中的命令语句,特别的方便。由于pip是依赖python做存在的,所以在windows上需要安装python,在官网下下载python3后配置好环境变量即可使用pip下载安装python的库。本次实验环境是基于p
28、ython3的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、Python等语言的接口,实现了图像处理和计算机视觉中许多的通用算法12。因为它有着出色的图像处理能力,所以本次实验会使用到它来对人脸图像进行处理,它也可以运用pip进行
29、下载安装,本次用到的版本是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 重要库基本信息表序号名称版本作用1Numpy1.16.0存储和处理矩阵,管理大量输入数据2Matplotlib3.0.32D绘图工具3PyQt55.13.0Designe
30、r界面编辑器,可以用来绘制系统界面4PyMySQL0.9.3Python中操作MySQL的模块,也是作为本次实验的数据库5Scikit-learn0.22.1获取数据、处理数据、特征工程、设计模型、模型评估、应用6Tensorflow1.14.0本次实验的模型框架7Opencv-python4.1.2.30提供图像处理和计算机视觉处理通用算法算法3.3 卷积神经网络搭建测试3.3.1 获取人脸照片数据集作为训练模型基础的数据集,越是拥有丰富数据且标签准确则越是有助于帮助提高模型的训练结果。想要对不同人脸识别提供更加可靠的特征和信息,用来提升模型的识别准确率,则必须要有多个以上的人提供照片,从而
31、来丰富数据量的数据集。(1)基本数据集获取。首先我们先获取最初的未经过处理的数据集,我找来了五个人进行拍摄正面照,每人100张,共500张正面照,由于人工一张一张拍过于麻烦,我们会通过代码调动计算机摄像头进行拍照,并且整理好放入个人文件夹中,这一步在之后的系统实现也会用得到。图3-4实现拍摄100张照片的部分代码通过代码实现控制摄像头拍摄100张个人照片,如图3-4所示:图3-5个人文件夹中100张照片(2)数据集预处理。每张照片大小都是640*480,由于每个人的照片存在着大量特征,在网络中不断的训练同时又会不断产生特征,进而出现大量冗余无用的数据,降低了整个模型的准确率,所以在初期每个人照
32、片数据中会先去除一些无用的特征,例如背景、衣服和发型等特征,而留下每个人的五官脸部数据,这个时候我们需要识别每张照片中人脸的位置,会用到别人训练好的人脸部位识别的模型(haarcascade_frontalface_default.xml),然后将其采集裁剪为大小64*64的人脸图,最后将其灰度化转换成灰度图,之后可直接运用其进行模型的训练。图3-6裁剪人脸和人脸照片灰度化部分代码图3-7裁剪灰度化处理图3-8灰度化处理后裁剪的人脸照片3.3.2搭建卷积神经网络经过数据的预处理后,我们就得到了可以用来训练和测试的数据集,之后就到了最重要的这一步,搭建卷积神经网络。本次实验的网络结构为三层卷积池
33、化层,两层全连接层,在这基础上我们又在输出层增加了一层1*1*1的卷积层,为的是使输入增加非线性的表示、加深网络且提升模型的表达能力,同时基本不增加计算量13,而且在本次实验中为防止某些权重更新,导致过拟合现象出现,从而在卷积层和全连接层中加入了随机失效Dropout。使用的激活函数为Rule函数。本次实验的数据为原始像素64*64的灰度图数据集。设置了4层Convolution layer,ksize分别是1*1,3*3,8*8。每层池化层都采用最大池化,大小都是1*2。每一层都使用了Dropout。具体如下表所示:表3-4卷积神经网络模型结构种类核大小输入通道输出通道Dropout输入64
34、*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参数有两个,分别是优化器(optimizer)和损失函数(loss)。(1)优化器:对于深度学习的目的就是不断的对网络中的参数进行调整,使得参数能够对输入做出各种非线性变换,从而拟合输出,它的本质就是通过函数寻
35、找出最优的解法14,因此怎样去更新参数是作为深度学习研究中的重点,而更新这参数的算法通常被称之为优化器,在本次实验中所使用的优化器优化算法为adam。学习率(Learning rate)作为优化器中的一个重要参数,它决定了目标函数是否可以在适当的节点上压缩到指定范围内的最小值。当学习率设置得偏高时,梯度可能在最小值的附近来回震荡从而无法收敛,而当学习率设置偏低时,就会降低模型的收敛速率。对于本次实验为了初始训练时更快改变改变权重,所以我将学习率设置为0.01。(2)损失函数:在模型训练学习中,损失函数可以简单明了分析出算法好坏,提供了方便性。由于本次实验模型用的激活函数是softmax函数,所
36、以损失函数则使用了分类交叉熵函数(categorical cross_entropy)。图3-9 优化器和损失函数代码设计好卷积神经网络各个层和keras框架后就开始训练模型了,依据训练样本的模型输出和样本实际值进行模型训练后,设置了精度阈值为0.98,当训练的精度大于设置的精度阈值时就会停止实验,防止模型出现过拟合现象,导致准确度下降且浪费时间的情况。经过多次的尝试,选择了每轮训练的样本数(batch_size)为64,迭代次数为296。表3-5卷积神经网络模型训练batch_size3264128256Epoch8888Train Epoch371894Test Epoch371894迭代
37、的次数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_size大小为64的准确率比较高,而整个训练过程也对于其他的比较平滑。图中batch_size为128和256的折线也可以看出在迭代次数50左右时出现向上波动的趋势,如果
38、继续迭代下去,其准确率还会有所增长,这样完成的模型也是比较好的,但是对比其他batch_size来说,它需要耗费更多时间来训练才能提高准确率,所以这也是不选择128和256大小的原因,所以最终选择batch_size大小为64的测试模型,其训练准确率大致为0.95。通过折线图可以看出每条折线都有毛躁尖刺,不够平滑,这可能是出现的过拟合现象,发生过拟合的主要原因大致有三种:(1) 数据有噪声,其中要发生在对数据预处理开始,我们可以通过预处理对数据进行降噪,从而减少数据噪声,但本次实验开始就对数据进行裁剪灰度化处理,也达到降噪作用,数据集处理合理。(2) 训练测试数据不足,解决方法很简单,就是继续
39、添加大量数据再进行模型训练,这也是本实验主要原因,数据准备得不充足。(3) 训练模型过度导致模型非常复杂,可以通过调整参数或是减少卷积层数来解决出现得这个问题。虽然模型大致时训练出来了,但是还是有些不足,需要提高的地方,训练集数据的不足,卷积神经网络结构参数仍可以调整或是增加更多层次,硬件性能原因,模型训练学习时间短暂等等。3.3.4模型测试运用训练完成后所生成的模型文件train-mode对导入图片进行人脸识别并得出对应的人名。在此过程中会使用rectangle函数对导入图像进行检测,并在图像脸部生成一个框框,再使用putText函数将获取的人名打印再框边上,这便查看预测结果,其部分代码如下
40、图:图3-12人脸识别结果处理部分代码运行后生成图片result.jpg,可在当前文件下进行查看,可直观查看结果的预测,如下图3-12所示:图3-13生成预测图片result.jpg为测试模型是否会出现错误,所以对整组图片进行循环测试,分别进行了循环十次、五十次和一百次的测试,结果得出下表:表3-6模型识别循环次数/次1050100正确识别图/张104795错误识别图/张035图3-14循环十次生成图片情况图3-15其中识别出现错误情况由各种情况可以得出训练出的模型对人脸识别还是较为准确的,虽然出现极少数出错的情况,大致可以忽略不记,其主要原因可能是单方面数据集较少的原因,因为每个人所做的预处
41、理只有对人脸裁剪并灰度化导致数据集不足,其实可以在预处理数据后对图片进行旋转、平移、对称处理等操作来对数据集的扩充,从而解决数据集不足的情况,这样训练出的模型也可以进一步完善,但对应整体准确率测试情况下来看,预测结果也是良好的。4. 系统分析4.1 系统需求分析4.1.1 系统可行性分析(1)经济可行性:本人脸识别签到系统是我的毕业设计项目,且整个项目都是在本人笔记本电脑上通过开发工具和网上查找资料后所开发制作的,成本上基本为零。(2)技术可行性分析:系统所使用的技术和框架都是现阶段社会比较流行的,比如python语言、卷积神经网络、TensorFlow框架等。4.1.2 可行性分析结论人脸识
42、别签到系统的设计与开发是为了提高企业或是组织签到的效率,它为了减少人力物力,并且能够准确的识别签到人员,大大方便了人们日常生活的签到流程。从经济上,系统开发成本几乎为零,在技术上来看,所使用的技术都是现阶段比较流行的技术框架。所以根据上诉分析,本人脸识别签到系统开发条件满足,实施方案可行。4.2 系统总体分析在本次实验研究人脸识别签到系统中,从实践生活学习的实际角度出发,设计主要涵盖以下功能模块:录入学生信息模块、签到主界面模块、出勤信息模块。如下图4-1所示:图4-1 系统设计分析4.2.1录入学生信息模块在录入学生模块实现中,我将完成以下功能,录入学生的基本信息,并打开摄像头拍下多张学生的
43、正面照作为训练的数据,最后在这个模块中可以直接进行模型的训练,将图像数据加入卷积神经网络中进行训练,得出一个全新的模型,用于签到主界面的模块中。图4-2 录入学生信息模块录入学生信息:学号、姓名、专业、班级和正面照,学号姓名专业班级会直接录入数据库中,而照片将加入训练模型作为新的数据集。训练模型:在已经设计好的卷积神经网络中,将所以录入的学生照片进行训练,得出可行的训练出对应人脸识别的模型,作用于后面的签到主界面模块中。4.2.2签到主界面模块作为本系统最主要的模块,我们将会在这个界面模块中进行学生的人脸识别,在这个界面将会打开摄像头对人脸进行一一识别,界面会将学生脸部框起来,在框框的上方会显
44、示学生名字,成功后会在界面下方显示学生签到成功并显示学生信息,在这个界面也可以查询到缺勤学生信息的名单,这就是签到主界面模块的所做到的功能。图4-3 签到主页面模块识别学生信息签到:通过所以学生照片信息训练出的模型进行对学生人脸的识别,从而达到人脸识别签到。缺勤学生信息名单:这个部分将打开出勤信息模块,查看缺勤学生的信息。4.2.3出勤信息模块这个出勤信息模块是较为简单的模块,在签到主界面模块中进行学生人脸识别后,后台将会和数据库信息进行对比,得出缺勤学生信息的名单,从而生成这个出勤信息模块中的出勤信息。图4-4 出勤信息模块出勤信息表:显示缺勤的学生信息,可以方便使用者们进行学生管理。4.3
45、数据库设计本次实验所使用到的数据库是在PyCharm内下载的插件DB Navigator,可以在PyCharm中FileSettingsPlugins,搜索DB Navigator,进行install即可下载安装,然后在导航栏中点击DB NavigatorSettingsConnection添加SQL数据库就能进入数据库的使用操作界面。本次所需要添加的数据库信息如下表:表4-1 数据库表列名中文名数据类型长度备注user_id学号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工作台如图5-1 Qt Designer工作台所示,