摘要:学生考勤签到是高校课堂比较重要的一个检验指标,传统的课堂考勤中,老师需要在课前花费较多的时间对学生进行点名考勤,往往很浪费时间,如果能通过教室监控摄像头实现智能的人脸识别考勤签到,则能节约师生们宝贵的课堂时间。
为了实现高效、准确地课堂无感人脸识别考勤签到,本文引入了Face_Recognition库,该库通过ResNet模型能计算得到128维人脸特征向量,然后将待识别人脸特征向量与已知人脸数据库中的人脸特征向量做比对,得到匹配信息实现人脸识别。最后再将考勤信息记录到数据库中,签到信息一目了然,还解决了传统打卡方式所存在的耗时、体验差等问题。
本文所使用的人脸数据集采集自所在班级所有学生的人脸正脸图像。在对每张人脸计算得到128维特征向量后,将其保存到人脸数据库中。然后利用教室前置监控摄像头,在课堂开始的指定时间段内,反复捕获课堂实时图像进行人脸识别,最终将签到信息记录到MySQL数据库中。经反复实验表明,本文应用中的人脸识别准确率有96.76%。
关键词:人脸识别;课堂考勤;Face_Recognition ;人脸特征向量
1 绪论
1.1研究背景和意义
通常在高校,学生上课的考勤签到是一种对高校课堂比较重要的检验指标,不论是对老师还是对学生都有着重要的意义。对老师而言,课堂的出勤率代表了该门课程的质量与学生对该门课的兴趣,而对学生而言,课堂的出勤率代表了该门课最后的总评成绩。因此不论是对老师还是对学生,考勤都较为重要。但是目前的传统的签到的形式、方法都存在着各种各样的问题,比如该门课程是一节100人的大课,老师没有办法确定是否所有人都已经出勤,或者有学生在老师抽点的情况下帮助同学带答,这种情况是无法避免的,如果老师将100个学生的名字都喊一遍的话,这样不仅会浪费课堂时间,还会降低学生对于课堂的兴趣。所以开发一款自动化签到系统是非常有必要的。
随着近年来计算机的飞速发展,人工智能的方法又重新回到大众的视野中,基于人工智能方法的检测技术如井喷式产出,人脸观测点检测的一个比较重要的下游任务是人脸识别,目前已经广泛的应用在了各个领域,如支付、解锁、和活体检测等等。采用人脸识别技术的签到系统相比于传统签到系统,其便捷性,智能化和高效性更胜一筹。目前人脸识别技术通常是应用在公司打卡签到中,但是如果使用这种商业化的打卡设备,势必会对高校带来很大的成本,同时由于课堂人员流动较大,每学期的学生都不一样,如果每学期都进行录入这样产生的成本也会非常大,所以开发一款便携的基于PC端的人脸识别应用非常有必要。将人脸识别和课堂考勤结合起来,不仅可以让教师在高校课堂中使用便捷,而且还能满足稳定性和确定性等专业技术指标的要求;不但可以有效提高课堂老师考勤的效率,同时可以防止同学们之间相互答到这种现象。
1.2研究现状
人脸识别技术早在上世纪七十年代就已经出现了,从这以后人脸识别技术的精度在不断被改善。从最初的传统的识别方法逐步发展到了现在采用神经网络的方式进行识别,相比于过去而言,现阶段的模型已经非常强大且更加精准,并且有的方法在某些特定的任务上已经超越人类识别的准确度。针对人脸识别的方法一般分为传统方法和人工智能方法。
1.传统方法
人脸识别的传统方法通常依靠手工划分特征,比如边缘纹理、图像颜色等等,再使用数学建模的方式构建一个模型进行拟合任务,比如采用传统机器学习技术中的主成分分析,支持向量机[1,2]和决策树[3]等。但是这种方法通常由很强的约束条件,并且构建模型也非常困难,针对某种特定的任务需要构建一个专门针对这种任务的模型,模型不具有泛化能力,比如在一个室内场景下模型的效果非常好,但是一旦处于室外进行人脸识别任务,可能会由于光照,环境等等因素的影响,使识别的精度大打折扣。此外,还有数据量的问题。
2.卷积神经网络
采用卷积神经网络进行人脸识别是近几年的一个热点,从2012年的AlexNet[4]到近几年的transformer[5,6],人脸识别的精度不断增加,误差已经远超人类水平。采用卷积神经网络的人脸识别方法,主要是通过有监督的方法进行训练网络,拟合出来一个合适的模型经行识别。更具体来说,图片数据集首先被分为训练集合测试集,其中用于训练的数据库的图片上带人工标注好的信息,比如如果是进行人脸关键点的检测,那么就使用人脸关键点的信息进行训练,当网络训练好后,在用测试的数据放在这个网络中进行测试,查看测试的数据和标签的信息差别有多大,这个差别就是精确度。图片首先被输入到网络中,网络会通过正向传播反向传播的方法自动学习卷积核进行特征提取,这一步替代了传统方法中人工提取特征的任务,之后这些数据会在逐渐被提取为底层语义信息,最后通过一个全连接层输出结果。Florian Schroff等人在2015年提出了FaceNet成功的将LFM数据集人脸识别的精准度提升到了99.63%[7]。Jiankang Deng等人在2019年提出了ArcFace成功的在野外人脸数据集上将精度提升到了99.83%[8]。虽然目前采用卷积神经网络的方法精确度特别高,但是我们无法像传统方法那样通过数学解释这个方法为什么好,这个方法目测存在什么缺陷,目前解释卷积神经网络是当前领域的一个研究热点。此外,transformer方法最先是被应用在自然语言处理这一领域,后来有研究人员成功的将这一方法应用在图像中,这使得这几年人脸识别的精度不断被提升。transformer方法通俗来讲就是卷积操作,只是transformer专注的是全局的信息,而卷积则关注的是图像的局部信息。由于transformer关注的是全局信息,所以在训练的过程中会丢失局部的细节信息,所以目前研究人员致力于设计一种将二者结合起来的方法。目前已经Yaoyao Zhong等人已经成功的将transformer应用到了人脸识别任务上[9]。本文使用Face_Recognition库进行人脸识别,face_recognition库通过使用一个名为triplet_loss的损失函数[15]来评估训练过程中样本的差距,在训练的过程中不断的输入正样本和负样本,让网络提高泛化能力,使其可以应用于不同的场景,如室内和室外。
1.3论文组织结构
本文第一章主要介绍课堂无感人脸识别考勤应用的研究背景,研究意义,研究内容以及国内外研究现状。
本文第二章主要介绍课堂无感人脸识别考勤应用的所使用的人脸识别的核心技术。
本文第三章主要针对课堂无感人脸识别考勤应用的具体实现,以流程图、实时显示画面以及相关代码展开。
本文第四章主要主要展示采集到的实验数据,测试其识别的准确率。
本文第五章对全文进行总结和展望。
1.4本章总结
本章简要的介绍课堂无感人脸识别考勤应用的研究背景、研究意义、研究内容和论文组织结构,分析了课堂无感人脸识别考勤应用在高校课堂相对于传统考勤方式的优势。
2无感人脸考勤应用相关技术
2.1深度卷积神经网络(DCNN)
本文采用Face_Recognition库识别人脸,该库主要采用深度卷积神经网络(DCNN)[10]进行人脸识别。DCNN是一种前馈神经网络,和普通的神经网络一样,该网络由多层网络堆叠而成,每层包含若干个神经元结点,每个神经元结点分别和前后层的神经元阶段连接起来。更具体地说,DCNN网络由多层卷积层和一层全连接层堆叠而成,再由这个结构反复堆叠。此外,在多层卷积层和一层全连接层中通常会插入激活函数以及池化操作,这种操作的主要作用是使网络逼近非线性函数从而达到回归或者分类的目的,再网络中卷积曾的运算操作主要用于处理网络中传输的数据。
卷积神经网络主要使用反向传播算法[11]进行权重参数的更新,从而达到训练网络的目的,如图所示,分别展示了传统神经网络和卷积神经网络结构图。
图2-1传统神经网络示意图
图2-2卷积神经网络示意图
2.2 ResNet
本文采用Face_Recognition库检测,该库主要采用ResNet[12]这一网络进作为骨干网络。 提出残差学习的思想。传统的卷积网络或者全连接网络在信息传递的时候或多或少会存在信息丢失,损耗等问题,同时还有导致梯度消失或者梯度爆炸,导致很深的网络无法训练。ResNet在一定程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络只需要学习输入、输出差别的那一部分,简化学习目标和难度。ResNet主要解决深度学习中梯度消失问题,主要的思想是在每个Residual模块上加入上一个模块的梯度,这一操作被称为Skip Connection,这样就可以让一个网络处于深层次训练时,不会因为累乘导致模型权重过小造成梯度消失这一问题。通常ResNet根据其堆叠Residual模块的数量不同所呈现出不同的网络结构,目前较为常用的是ResNet18,ResNet34,ResNet50,ResNet101以及ResNet152,本文提到的Face_Recognition库使用的是ResNet34,由于篇幅限制,在此处只展示ResNet50的网络结构,ResNet34的结构图如下所示。
图2-3 ResNet34结构图
2.3人脸识别技术
2.3.1Face_Recognition原理
Face_Recognition在人脸编码转换成128维的预测值过程中,用到的是ResNet,其采用深度卷积神经网络(CNN),学习将图像映射到欧式空间[14]。该方法使用欧式距离对人脸差异度进行评判,如果欧式距离很近,说明人脸差异很小说明,反之说明人脸差距很大。采用这种方法进行人脸比对,从而达到人脸识别的目的。
ResNet是目前深度学习的一个非常重要的一个骨干网络,而face_recognition库通过使用一个名为triplet_loss的损失函数[15]来评估训练过程中样本的差距,在训练的过程中不断的输入正样本和负样本,让网络提高泛化能力,使其可以应用于不同的场景,如室内和室外。此外,使用OpenCV的图像反转,平移等操作,增强数据使网络拟合的更好。通过梯度下降算法,不断缩短自身所有样本的差距,同时尽可能拉大与负样本之间的差距,利用反向传播算法更新网络权重,最终达到一个最优的效果。通过这样训练,可以得到一个表达非线性函数的网络,该网络可以对人脸进行识别,判断,并且可以应用在不同的场景下。
triplet_loss:该方法主要是通过训练学习,拉近正样本和标签的距离,拉开负样本的距离。
图2-4triplet_loss示意图
此算法的目标是对任意构造的三元组,使得类内距离尽可能小,类间距离尽可能大,优化损失函数:
网络通过正向传播算法将数据传给整个网络,再利用反向传播算法求得梯度更新网络的权重。
采用了三元组损失函数的人脸识别系统,有更高的识别精度,并且运算复杂程度相对较低,运算效率较高,
同时它能最小化正例和负例分数分布的标准差。其架构包括先进人脸对比算法(三元损失函数)框架、主流深层神经网络(InceptionNet)的搭建及参数优化并且实现实时高识别率(90%以上)的人脸识别[16]。相比于传统人脸识别系统具有更高的识别精度,并且其运算的复杂性和效率相对较低。
2.3.2使用Face_Recognition库
1、人脸检测
Face_Recognition库封装了Dlib这一个C++图形库,通过借助Python语言将其封装成一个简单容实现的API库,在LFW(Labeled Faces in the Wild)[17]上的准确率高达99.38%,安装库之前需要编译好dlib,通过pip install face_cognition来安装相关包;face_recognition库进行人脸识别首先是先找出当前图片所有人脸,通过face_locations函数得到人脸的位置,这时候,会得到一个list,每个人脸由一个元组存储数据—其中
表示人脸框左上角的坐标,
表示人脸框右下角的坐标,一个人脸对应一个元组,出现多张人脸的时候会出现对应个元组,值得注意的点是,load_file_file读取的图片输出仍然是RGB顺序的,但OpenCV中的却是BGR;然后检测面部特征点,通过face_landmarks函数得到每个人脸特征点,且每个人脸都是一个字典,其中有nose_bridge、nose_tip、top_lip、bottom_lip、right_eyebrow、right_eye、chine、left_eyebrow、left_eye部分,这里面的每个部分又包含若干个特征点
加起来总共有68个特征点,再使用特征点校正人脸,将非正面脸转化成正脸。
2、人脸识别
在进行识别之前可以对图片进行预处理,比如缩放、降噪、仿射变换等操作;其他再根据人脸的面部特征点计算图片中面孔的特征值;最后根据与原数据集中的图片进行比对,计算两两人脸之间的相似度,known_image是最开始采集到的班级中得所有人脸,unknown则是当前图像画面中所得到的人脸,人脸图像使用Face_Recognition库中的face_encodings函数转换为一个向量,该向量为128维,每个人脸图像对应一个向量,最后进行识别的时候,使用向量的内积来计算两个向量的相似度,最后根据函数compare_faces来判断这两个向量是否为同一个人的人脸,如果视频中有多个人脸,那么重复上述操作仍然可以做到一一识别的功能,该方法需要使用函数compare_faces中的tolerance阈值参数,参数值越低人脸精度越高,识别难度也越大,所以选择一个合适的参数非常重要,默认参数是0.6;比较其特征值之间的距离face_distances,找到其中的最小值,从而对应到人名。
在进行识别时,使用已经存储好的转化为128维特征向量的人脸数据与当前识别到的人脸转化的128维特征向量计算他们之间的欧式距离,在整个数据库中欧式距离最短的那个就是当前人脸所匹配到的数据。本系统所计算欧式距离的公式如(2-5)所示。
2.4本章总结
本章主要介绍了本文所使用的人脸识别核心技术以及该技术所涉及的相关公式和模块的解释。
3无感人脸考勤应用的实现
3.1系统总架构
课堂无感人脸识别考勤应用的基本功能主要包括人脸数据集采集模块、人脸数据库组建模块、人脸识别考勤模块和数据库模块,系统整体架构如下图所示。其中人脸检测功能模块主要是通过Fast-RCNN对人脸进行捕捉将图片中的人脸接取下来,以便后续操作。人脸特征获取模块主要是将接取到图片中的人脸进行编码[18],然后在通过人脸识别模块进行检测,当检测匹配成功后,系统会将结构记录在数据库中。
图3-1 系统整体架构
3.2 系统运行流程
本文主要分为采集人脸信息、计算得到人脸向量特征、对比检测人脸、重复识别直到考勤结束、对比人脸失败则退出该次考勤、成功识别到人并将信息记录到Excel表中。程序一开始会使用Dlib提取学生面部特征,检测学生的脸部,采用锚框框出视频一帧的学生脸部。为了优化识别的准确性,本应用分别采集学生室内的照片和学生室外的照片,保证人脸识别的算法在不同场景都可以很好的识别,保证其基本的准确性。
为了能准确识别出当前图像中的人脸,通过使用基于Dlib的Face_Recognition库并且用OpenCV在原图像中绘制人脸锚框和特征关键点,再检测面部特征点,将侧脸转为正脸,然后根据面部特征点计算面孔的特征值,最后跟数据集里面的人脸作比对,计算当前识别的图片与已知的图片面孔的距离,距离最短即为最佳,从而获取人名。
具体流程如图所示。
图3–2功能流程图
当本应用开始运行之前,首先会让学生预先发送一张自拍,将每个学生的人脸图像转换为特征向量存到一个列表中,同时也会将文件中每张图片的名字存到列表中。当完成该部分工作后,就可以使用OpenCV中的VidioCapture函数打开电脑的摄像头实时捕捉画面,然后进行人脸检测。
在当电脑摄像头成功开启采集到了人脸图片后,首先处理数据,将当前帧的图像转换成数字图像,把每个图像分割成一个个像素,每个像素的亮度或灰度值用一个整数表示。然后使用OpenCV和Face_Recognition共同完成人脸检测和识别,用Opencv进行图片预处理,其自带执行PCA操作的cvEigenDecomposite()[19]函数,之后需要对图片进行分类和训练。首先是先找到人脸具体位置,画出人脸矩形框,其中rectangle函数将可以获取到画面左上角和右下角坐标,将图像中识别到的位置用两个矩形框画出来,上面的矩形框圈出人脸,下面连接着的小矩形框则是对应人的姓名,字体大小、字体颜色和线条粗细。随后更具图片中的人脸计算特征点,利用特征点再计算人脸的特征值,之后再进行图片比对,从而识别人脸。最后将签到识别的人员记录到数据库中。
该过程为一个循环,摄像头可以一直捕捉画面,每间隔几帧进行一次人脸匹配,这样可以保证签到记录不会重复记录到数据表中,只会保留一个人的一条记录,如果一个人停留过久,可能会重复记录,所以可以使用set函数记录图像中人,即使出现很多次,set集合里也只有一个元素,从而可以解决姓名重复的问题。
3.3 采集人脸信息
1.人脸检测
为了获取人脸信息,首先使用Dlib对人脸进行检测,并且使用锚框标记,只有成功的检测到了人脸,才可以把人脸转换为灰度图,再计算人脸的特征点,从而获得正确的特征向量。
人脸检测流程图如下所示。
图3-3人脸检测流程图
采集到的班级中所有人员的原始图片如下图所示。
图3-4人脸原始图
单人脸部分割矩形框图如下图所示。
图3-5单人脸部分割矩形框图
多人脸部分割矩形框图如下图所示。
图3-6多人脸部分割矩形框图
3.4 人脸特征获取
如果想要获取128维人脸特征首先需要将图像送入ResNet34中,再通过网络计算出人脸128维的具体特征值。在本程序中,需要通过已经提取到的人脸灰度图在去计算特征点。具体流程是先获取到灰度图像,将每个人的人脸信息转化为数字再存放在一个数组中,之后再获取每张图片的人脸特征点并添加到图片中,并将特征点在原图上显示出来,随后再将每个人的名字信息也加入进去,这样便于后续将名字和欧式距离做匹配,最后根据计算结构返回特征值。
人脸特征获取流程图如下所示。
图3-7人脸特征获取流程图
班级中每张人脸对应的128维向量值如下图所示。
图3-8人脸特征值
3.5人脸识别
本文使用Face_Recognition中的ResNet对人脸特征进行提取,最终可以得到128维特征向量,最后利用特征向量进行识别。实时显示图像中,出现多个人脸时,如果找到人脸,那么会让该人脸首先进行编码,再让其的人脸编码信息与图片库中的人脸编码做比较,如果比对成功,那么表明此人是该堂课的成员。这时需要将图片库中的姓名展示在人脸框的下方,如果为找到此人那么说明此人不是本堂课的成员,或者没有录入信息。
当系统取到当前图像中人脸的位置信息后,根据人脸的位置信息和当前图像图像中的人脸进行编码,传入ResNet这一模型,经过训练后,会生成128维的向量。将实时捕获到的每一帧图像里的人脸与之前采集到的班级中所有人的128个值去进行欧氏距离的计算,比如在这一帧率中,识别出多张人脸,这时就会识别出的每一张人脸跟之前的数据集中的人脸特征值做计算,计算得出的最小的欧式距离即为最匹配的脸,每次只会输出一个姓名,并且会把识别出的姓名添加到face_names列表中,即是说,出现了三张人脸,face_names列表中会有三个姓名与其对应。当超过规定的阈值时,表明系统识别不出当前图片中的人,可能不是班级中的人,或者没有录入,若存在多个人,则会一起识别出来,也会依次记录到数据表中。
图3-9比对欧氏距离图
根据下面的实验数据可以得出,每人脸识别成功一次,最小的欧式距离值不会超过0.6,当欧氏距离值达到1.0之后则会输出unknow,既是说非本班级人员;随着对欧氏距离的增大,既是说放宽识别条件之后,系统识别的误差率也会提高。
通过对班级中8个同学做样本,以其做十次实时识别,让其与数据库中的人脸进行比对,其中有3位不是班级成员,得到的实验数据如下:
表3-1 单人识别前十次的结果
欧氏距离 | 人数 | 人脸识别准确率 | 误报率 |
0.5 | 8 | 5/8=62.5% | 2/8=25% |
0.6 | 8 | 5/8=62.5% | 1/8=12.5% |
0.7 | 8 | 4/8=50% | 1/8=12.5% |
图3-10比对欧氏距离图
识别人脸流程图如下所示。
图3-11人脸特征获取流程图
核心代码如下所示。
图3-12核心代码图
3.6 数据库实现
随着计算机技术的发展,传统的采取文件存储数据的方式不再适用与现代计算机的需求,所以工程师设计了数据库来解决计算机数据存储的问题。数据库的出现,使计算机的发展迈进了一大步,有了良好的数据管理软件,计算机的程序免去了针对复杂数据的设计。
MySQL是一款目前较为流行的轻量级开
源的数据库软件,由于其免费的特性得到很多人的青睐,是目前使用人数最多的数据库。
在命令提示符下操作MySQL数据库的方式不太方便,所以本文使用的MySQL图形化管理工具是Navicat for MySQL,该工具界面清晰明了,操作相对简单,便于用户对数据库中的数据进行管理,它使用的图形化用户界面可以让用户使用和管理更为简洁和明了。
Mysql数据库可以以独立的进程运行,这使得程序员可以轻易的根据其所提供的接口进行数据操作。通常数据库接口采用驱动进行连接,这些驱动通常
由数据库厂商提供。在Python中支持MySQL的数据库模块有很多,本文使用的是PyMySQL,直接使用pip install PyMySQL进行安装
1、创建数据库
在本文中,数据库是记录同学们签到信息的一个媒介,用途也很多。虽然数据库的种类有很多,如SQLite、MySQL、Oracle等,但是其功能基本上都是一样的,为了对数据库实现统一的操作,Python提供了简单扼、标准的数据库接口(API)。
将识别到的同学名字记录到My
sql数据库,为保证记录的有效性和清晰明了,所以MySQL数据表中只记录最近时间的五条信息,而签到人员和未签到人员仍然会实时输出到代码的结果区域,该数据表的信息有课程序号、课程名、签到时间和签到人员姓名,其中一节课的时间是45分钟,休息时间是五分钟,所以课程序号每间隔50分钟重新签到一次,而整个时间段之内签到信息是不会重复记录到数据表中,会将签到和未签到的人员输出到代码结果区域,课程号也会随着增加1,课程名也会根据课程表信息依次录入,从而避免数据的重复。
本系统操作数据库的第一步是先连接数据库。连接了数据库才能进行其他添加、删除、查询操作。本文使用PyMySql操作数据库,首先使用connect函数连接数据库,再使用cursor函数和excute方法对数据库进行相应的操作,若表存在则将其删除并创建一个新的表,然后再使用excute创建表中的属性,包括id、name、login_time、class_id、class_name五个属性,并且设置键值递增,最后实用close方法将数据库关闭。
本文数据库ER图如下所示。
图3-13数据库ER图
本文数据库数据表详细字段如下所示。
表3-2签到表
序号 | 字段名 | 解释 | 类型 | 是否为空 |
1 | ID | 签到表ID | Int | 否、主键 |
2 | Name | 学生姓名 | Varchart | 否 |
3 | Login_time | 签到时间 | Timedata | 否 |
4 | Class_id | 课程ID | Int | 否 |
5 | Class_name | 课程名称 | Varchart | 否 |
表3-3学生表
序号 | 字段名 | 解释 | 类型 | 是否为空 |
1 | Student_ID | 学生ID | Int | 否、主键 |
2 | Student_Name | 学生姓名 | Varchart | 否 |
表3-4课程表
序号 | 字段名 | 解释 | 类型 | 是否为空 |
1 | Class_ID | 课程ID | Int | 否、主键 |
2 | Class_Name | 课程名 | Varchart | 否 |
2、数据库标签信息保存
首先还是用connect连接数据库,然后创建一个游标对象cursor,用strftime函数将时间信息转化成常见的格式,当数据有多条的时候,将name、login_time、class_id和class_name依次用excutemany的方法写入数据表中,最后用commit提交事务,当发生错误的时候用rollback回滚事务,将操作全部撤销,从而达到保护数据的效果。
其次再查询login表中的所有记录,用fetchall生成一个二维元组,再使用一个判断,将数据只保留五条即可:删除id=1的那一行,删除之后将id重新排列顺序,然后再用fetchall查询表中的数据,将其长度赋值给number,当number小于等于5时,不会进行删除,大于5时会进入while循环。最后关闭数据库。
保存数据库标签信息如下图所示。
图3-14签到成功图
3.7 本章总结
本章主要介绍了课堂无感人脸识别考勤应用的主要实现,包括程序主函数,数据预处理方法,人脸特征获取,人脸识别以及数据库的实现。
4系统测试
4.1 测试过程
本系统在Windows10 64位专业版上运行且只进行功能测试。测试主要针对本应用的功能模块测试。执行测试,准备搭建测试环境,并记录测试内容。提交并解决测试中的bug。
4.2 测试课堂无感人脸识别考勤应用用例
表4-1 测试用例执行情况
需求功能名称 | 测试用例名称 | 执行说明 | 执行情况 | 是否通过 |
人脸信息采集 | 人脸信息采集测试 | 用OpenCV和Face_Recogition检测人脸并捕捉画面,存入image文件夹中,并将灰度处理的图片放入faces文件夹中,准备好数据集 | 使用电脑自带的摄像头成功获取人脸照片 | 是 |
人脸特征点获取 | 人脸特征点获取测试 | face_landmarks获取人脸特征点,以便于后续的人脸检测 | 得到68个人脸特征点 | 是 |
人脸特征向量获取 | 人脸特征向量获取测试 | face_encodings将人脸特征转换成128维的特征向量 | 得到一个128维的数组 | 是 |
人脸识别 | 人脸识别测试 | face_locations可以显示每帧人脸所在的位置信息,无人脸出现便是空列表。 | 得到一个列表,列表中的元素是一个元(x1,y1,x2,y2),一个元组代表一张人脸 | 是 |
匹配人脸 | 匹配人脸测测试 | face_distance通过对人脸进行两两匹配,再通过检索得到该帧图像中人脸所对应的名字 | 得到一个numpyndarry
通过检索数组中欧式距离最小值匹配人脸 | 是 |
创建数据库 | 创建数据库测试 | 建立数据库连接,创建表格,属性对应序号、姓名、签到时间、课程id、课程名 | 生成签到考勤表 | 是 |
数据库的信息存储 | 数据库的信息存储测试 | 将签到人的姓名、签到时间和课程名全部存入数据库中 | 输出所有人员的签到信息 | 是 |
4.3 识别准确率的测试
表4-2 单人识别的准确率
人数 | 识别的次数 | 识别准确率 | 平均识别时间 |
1 | 1*1 | 100% | 0.8916 |
1*5 | 100% | 0.8776 | |
1*10 | 100% | 0.8667 | |
2 | 2*1 | 100% | 0.8766 |
2*5 | 100% | 0.8932 | |
2*10 | (2*10-1)/2*10=95% | 0.8812 | |
5 | 5*1 | 100% | 0.8762 |
5*5 | 100% | 0.8784 | |
10*5 | (10*5-1)/10*5=98% | 0.8876 | |
10 | 10*1 | 100% | 0.8515 |
10*5 | (10*5-1)/10*5=98% | 0.8624 | |
10*10 | (10*10-3)/10*10=97% | 0.8776 | |
68 | 68*1 | (68-1)/68=98.53% | 0.9016 |
68*5 | (68*5-9)/68*5=97.35% | 0.8876 | |
68*10 | (68*10-22)/68*10=96.76% | 0.8915 |
表4-3 同屏识别
同屏人数 | 识别的次数 | 识别的准确率 | 平均识别时间 |
2 | 2*1 | 100% | 0.8916 |
2*5 | 100% | 0.8866 | |
2*10 | (2*10-1)/2*10=95% | 0.8854 | |
3 | 3*1 | 100% | 0.8925 |
3*5 | (3*5-1)/3*5=93% | 0.8776 | |
3*10 | (3*10-2)/3*10=93% | 0.8776 | |
4 | 4*1 | (4*1-1)/4*1=75% | 0.8766 |
4*5 | (4*5-1)/4*5=95% | 0.8976 | |
4*10 | (4*10-4)/4*10=90% | 0.8732 |
表4-4 单人识别前十次的结果
姓名 | 第n次识别 | 识别结果
(1表成功,0表失败) | 识别准确率 | 识别时间 |
郑伟 | 1 | 1 | 100% | 0.8916 |
2 | 1 | 0.8866 | ||
3 | 1 | 0.8854 | ||
4 | 1 | 0.8778 | ||
5 | 1 | 0.8776 | ||
6 | 1 | 0.8776 | ||
7 | 1 | 0.8766 | ||
8 | 1 | 0.8776 | ||
9 | 1 | 0.8732 | ||
10 | 1 | 0.8787 |
表4-5 双人识别前十次的结果
姓名 | 第n次识别 | 识别结果
(1表成功,0表示失败) | 识别准确率 | 识别时间 |
郑伟,和治宇 | 1 | 1,1 | 95% | 0.8848 |
2 | 1,1 | 0.8822 | ||
3 | 1,1 | 0.8967 | ||
4 | 1,1 | 0.8787 | ||
5 | 1,1 | 0.8775 | ||
6 | 1,1 | 0.8776 | ||
7 | 1,1 | 0.8786 | ||
8 | 0,1 | 0.9776 | ||
9 | 1,1 | 0.8796 | ||
10 | 1,1 | 0.8789 |
图4-1签到结果图
图4-2课堂模拟签到图
图4-3课堂识别图
4.4本章总结
这个测试是为了测试堂无感人脸识别考勤应用的质量。这样做的目的是为了让用户能够顺利地使用系统,并确保每个功能都能正常运行。并评估整体的稳定性和可操作性,然后提出人们与系统交互方式的改变。例如发现环境和软件版本不支持,环境框架存在漏洞和用户与系统的交互效果不佳。然后再次开发和补充测试问题。
通过对单人的、双人、三人甚至四人同屏进行人脸识别,屏幕容不下那么多人,所以最多采用的四人同屏进行测试,其中单人测试的效果最佳,基本上在前十次实验中,通过每十秒进行一次识别,对于个人而言是不会出错的,丹斯不同的人的识别次数越多准确率也就降下来了,全班68个同学,每人每次做十次检测,准确率是96.76%,还有待提升的空间。
其次就是双人、三人和四人,识别10次的准确率分别是95%、93%和90%,同屏人数越多效果越差,我觉得可能出现的因素是人员在同一个屏幕中的人脸反而变小了,对于一些细节上的特征点的变化误差可能更大,对于单人而言,一个屏幕一个人,图像的清晰度也更好了,帧率也较于稳定,不会出现捕获一帧的图像有不清楚的情况,所以人脸展示出来,再将其于数据集中的数据做比对,更容易地识别出来个人。
本项目的识别是利用教室里的摄像头,去捕获人脸的信息,实时检测出的人脸图像的128维特征向量的值与全班数据集中的值进行比对,计算其欧氏距离,得出的最小值即为最佳匹配对象,再通过检索得到人名,填入矩形框的同时,也会记录到MySQL中;每次间隔五秒做一次识别,识别之后的记录输出并记录,实时考勤五分钟后,取每个人的识别结果取并集,得到最终的考勤结果。
未来打算在此基础上优化细节,比如识别过程中是否会有环境因素导致识别效率过低,还有就是可以采用更多的人脸数据集去优化模型,识别之前对人脸图片进行一些预处理可能也会提高识别率。
现在虽然用的人脸识别很基础,纰漏也有很多,但是我相信只有在基础上摸索,不断完善,循序渐进,才能更上一层楼。
5总结与展望
5.1 总结
经过两个月的努力琢磨,人脸识别在只能课堂中的应用也是终于完工了,在期间整个过程中,会出现很多的问题,例如代码跑不动、总是因为马马虎虎而出错等,最后都是在老师、同学们的帮助下顺利完成,当然自己也有好好钻研的,在这个过程中,我学到了很多,如今的网络便捷,资源也是很丰富的,遇到不懂得就可以在网上寻找答案。
总之,通过这次对项目的深入学习,我明白了对于一件事应该秉持着既来之则奋斗之的态度,得要有严谨缜密的逻辑,对于这个项目中所遇到的困难不要慌张,要适当放松下来,然后再谨小慎微地认真思考,耐心地寻找知识点然后去解决。同时我也深刻地意识到,对一个简单问题的深入研究也是的成长,不敷衍、严谨的态度是我项目能成功完成的必要条件。
本文采用人脸识别技术进行课堂签到可以有效解决老师课前点名不但浪费时间而且效率还低的问题。人脸采集对周围环境要求严苛,自然光或者灯光的亮度会影响对人脸的采集,从而影响最终识别效果。高效课堂采用人脸考勤将大大提高课堂教学质量,相比传统的签到方式或者手机APP签到,人脸识别的签到方式具有绝对优势,还具有不可替代性,人脸识别采集人脸的特征点包括个人的眉毛、眼角、上下嘴唇、鼻梁鼻尖等独一无二的特征,极大提高了识别准确率。
5.2 展望
本文还有很多不足,如只使用了单一的特征比对的方法进行人脸比对,所以只能针对数据量较小的情况。如果扩展到多个班的签到,有可能会造成精度下降问题。并且人脸在有遮挡的情况下和人脸不是正面的情况下都有可能会产生无法签到的情况。
在未来,我们可以采用以实时视频的方式进行人脸识别,可以采用卷积神经网络对视频中人脸特征提取,人脸关键点定位。考虑视频时序的关系,动态的调整进而提升整体的精度。采用视频的方式可能会造成模型运行效率低下,所以我们还可以对模型进行剪枝,或者采用分组卷积的方式来训练卷积神经网络,亦或者可以尝试减少卷积核的大小,修改网络结构来减少网络参数,最后达到加快训练速度,加快识别速的目的。此外,还可以使用transform模型获取全局信息,使用卷积神经网络获取局部信息,最后融合在一次提升精度。
参考文献
[1]蒋桂莲.粗糙集优化支持向量机算法在人脸识别中的应用[J].信息系统工程,2020(12):77-78.
[2]曹未丰.基于层次支持向量机和KICA的人脸识别[J].南京工程学院学报(自然科学版),2019,17(03):76-79.DOI:10.13960/j.issn.1672-2558.2019.03.014.
[3]钟伟,黄元亮.基于特征融合与决策树技术的表情识别方法[J].计算机工程与科学,2017,39(02):393-398.
[4] Krizhevsky A, Sutskever I, Hinton G E. ImageNet classification with deep convolutional neural networks[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2012:1097-1105.
[5] Dosovitskiy A, Beyer L, Kolesnikov A, et al. An image is worth 16×16 words: Transformers for image recognition at scale[J]. arXiv preprint arXiv:2010.11929, 2020.
[6] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[J]. Advances in neural information processing systems, 2017, 30.
[7] Schroff F, Kalenichenko D, Philbin J. ResNet: A unified embedding for face recognition and clustering[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 815-823.
[8] Deng J, Guo J, Xue N, et al. Arcface: Additive angular margin loss for deep face recognition[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2019: 4690-4699.
[9] Zhong Y, Deng W. Face transformer for recognition[J]. arXiv preprint arXiv:2103.14803, 2021.
[10] 程冠琦.深度学习人脸识别算法在课堂考勤中的应用研究[J].电脑知识与技术,2021,17(13):182-183+190.
[11] 易国欣. 基于MTCNN和ResNet的人脸识别课堂签到系统设计与实现[D].重庆师范大学,2020.
[12] 李瑛. 基于CNN的人脸识别技术在课堂考勤系统中的应用[D].中南民族大学,2019.
[13] 张其帆. 基于人脸识别的课堂考勤系统的设计与实现[D].重庆师范大学,2019.术:1-9[2021-09-01].https://doi.org/10.19708/j.ckjs.2021.02.204.
[14] 李朋,宋婉玉,宋双.基于人脸识别的实验室考勤系统[J].信息技术与信息化,2021(08):257-260.
[15] Wei Xin,Du Wei,Hu Xiaoping,Huang Jie,Min Weidong. GicoFace: A Deep Face Recognition Model Based on Global-Information Loss Function †[J]. Electronics,2021,10(19):
[16] 王一凡. 基于三元组损失函数的人脸识别[J]. 科学与财富,2021(21):14,150. DOI:10.12293/j.issn.1671-2226.2021.21.014.
[17] 隋欣.基于OpenCV和Python的人脸识别系统在课堂考勤中的应用分析[J].科学技术创新,2019(34):104-105.
[18] 卫洁. 基于人脸识别的课堂自动化考勤系统研究与设计[D].哈尔滨工业大学,2020.
[19]程冠琦.深度学习人脸识别算法在课堂考勤中的应用研究[J].电脑知识与技术,2021,17(13):182-183+190.
致谢
四年的光阴转瞬即逝,完成如今的论文将为我的大学生活画上完美一个完美的句号,回想起大学中的点点滴滴,结实新朋友,认识新室友,倾听各学科老师的谆谆教诲,为我的人生增添绚烂的阅历。
本论文是在老师的悉心指导下完成的,其中论文所涉及到的研究方法都是老师耐心讲解才让我豁然开朗。老师严肃地科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我,将会使我受益终身。老师不但在学习上时刻“监视”着我们,会不断催促论文的进程,随时让我们警醒着,而且在生活上无微不至地关怀,一句不经意的问候都深深地感动着我,在此谨向老师致以诚挚的谢意和崇高的敬意。最后还要感谢所有教过我的老师们,你们严谨的思路给予我无尽的启迪,这些都将为我今后的工作生活提供宝贵的经验。
另外,在这四年的学习中个,我收获到了许多,不仅仅是知识层面上的精神价值,更多的还是同学们相处融洽、共同学习和进步的快乐生活。感谢陪伴我成长的老师和同学!
1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。
2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。
原创文章,作者:1158,如若转载,请注明出处:https://www.447766.cn/chachong/161461.html,