基于python及神经网络的人脸识别系统

收藏和点赞,您的关注是我创作的动力

概要

  随着计算机技术的发展,传统的身份识别方法已面临着很多前所未有的挑战,人们逐渐把目光转向了人脸识别等生物识别技术。本文针对了人脸识别这一问题,设计出一个基于python及神经网络的人脸识别系统,该系统对出现在摄像头前的人脸进行身份识别。本系统运行在Windows操作系统下,使用了Pycharm开发平台,使用MySQL数据库存放用户资料,借助图像处理的开源框架Opencv采集和处理人脸照片,利用Dlib进行人脸检测与定位,通过卷积神经网络提取特征,然后利用Tensorflow框架进行人脸照片识别,最后使用QT designer为本系统编写用户使用界面。通过本系统,可以实现通过人脸对用户进行身份识别。

关键词:人脸识别;人脸检测;深度学习;卷积神经网络

一、研究背景与意义

  在当前,人脸识别已经渗入我们生活中的每个角落,手机人脸解锁、人脸支付、车站人脸验票等。现在人脸识别也已经成为了我们日常生活中不可缺少的一部分了,通过设计一个基于python及神经网络的人脸识别系统,增强学生对目前世界生物识别技术现状,前景,用处的了解,学习Python编程语言、数据库等知识以及熟练运用相应的编程软件,学习和了解当前主流的人脸识别方法和框架,增强同学对于代码的编写与项目能力。

二、人脸识别系统总体设计

3.1人脸识别系统概述

人脸识别是计算机视觉[7]和模式识别[7]中的一个重要分支,人脸识别技术其最大的作用就是利用人脸的特征性来区分个体身份。人脸识别技术主要完成人脸图像与数据库已存的所有图像的匹配过程,判断出“你”是谁,最终实现人脸识别。人脸识别应用场景大致可以分为两类:一是两张人脸照片进行比较,二是将一张人脸照片与多张人脸照片进行比较。前者通常是判断两张人脸照片是否为同一个人,通常应用在人脸匹配上。后者通常是在若干照片中找出与当前匹配成功的照片,随着N的增大,识别精确度与识别效率都会下降。
3.2人脸识别基本流程
(1)图像获取:通过摄像头、视频、文件等途径将照片采集下来。
(2)人脸检测与定位:通过(1)步骤采集的照片,检测照片内是否含有人脸以及定位人脸。
  (3)预处理:通过(2)步骤得出的人脸位置,截取出只有人脸的部分进行处理。从摄像头获取到的人脸照片可能受到各种各样的条件的限制和影响,需要对其进行图片大小变换、灰度变换、对比度与亮度的变换等操作。
  (4)特征提取:特征提取简而言之就是将人脸图像数字化,人脸特征就是人脸的一些关键特征或位置,利用特征点之间的欧式距离,曲率和角度提取特征分量,然后把相关的特征转化成一个一维特征向量。由于人脸照片中存在很多的干扰信息,如清晰度、光照、角度、距离等外部因素,眼镜、化妆、表情等本身因素。所以神经网络一般需要大量的训练数据,才能从原始的特征中提取出有用的信息。
  (5)人脸识别:通过摄像头采集待识别的人脸照片,然后经过步骤(2)(3)(4)得到待识别人员的人脸特征向量,然后人脸特征提取后进行人脸比对,最后输出预期结果。
  在这里插入图片描述

图3-1 人脸识别总流程图

3.3设计内容

3.3.1设计需求

(1)能够实现对计算机的摄像头调用;
(2)建立神经网络训练模型;
(3)使用数据库实现对人脸数据的录入和存储;
(4)能够对人脸进行识别;
(5)使用界面展示识别功能;
(6)设置管理员功能,能够显示和删除人脸信息。

3.3.2 预期目标或设计指标

(1)系统能够正常运行,以上各个模块规定功能基本达到。
(2)单次识别能够在1s之内完成。

3.4人脸识别系统各模块任务

   由上述设计要求可知,此系统主要实现对摄像头采集到的人脸照片进行身份识别。整个人脸识别系统主要涉及的模块有人脸照片采集与处理模块、人脸检测模块、卷积神经网络模块、人脸识别模块、管理员模块、界面显示模块。各模块关系图如图3-2。
在这里插入图片描述

图3-2 各模块关系图
人脸照片采集与处理模块主要完成以下3个任务:
(1)从摄像头采集带有人脸的图片。
(2)将人脸从采集到的照片中分割出来并进行预处理。
(3)将处理好的人脸照片存入指定文件夹和个人信息存入数据库。
人脸检测模块主要完成以下2个任务:
(1)检测照片内是否存在人脸。
(2)返回照片中人脸的位置。
卷积神经网络模块主要完成以下3个任务:
(1)对数据库中的人脸进行特征提取。
(2)通过训练找到最适合当前的卷积核参数。
(3)当训练模型精度达到要求,保存训练参数。
人脸识别模块主要完成以下3个任务:
(1)从摄像头采集带有人脸的图片并提取出人脸。
(2)调用保存的训练模型进行人脸预测。
(3)输出人脸预测结果。
管理员模块主要完成以下2个任务:
(1)能够对用户进行信息更新与删除。
(2)能够进行管理员注册。
界面显示模块主要完成以下2个任务:
(1)能够显示用户的相关信息
(2)在人脸识别过程中对相关照片和数据进行显示。

3.5.1人脸照片采集与处理模块

  人脸照片采集与处理模块是人脸识别系统最基础的模块。这个模块本系统主要采用OpenCV算法来控制电脑的摄像头、对采集到的人脸照片进行灰度化、亮度与对比度变化的处理、以及将人脸信息存入数据库。
  本模块运行流程:首先注册用户输入注册的名字、学号以及电话号码,再判断输入的学号是否合法,若不合法(学号已被注册、输入账号不全为数字),输入账号合法后就打开摄像头采集人脸照片,采集到的照片经过人脸检测模块裁剪出只有人脸的照片,再进行照片处理等工作,最后将人脸照片存入指定文件夹,将用户信息保存至数据库。

3.5.2人脸检测模块

人脸检测模块是人脸识别系统中比较重要的模块,本系统的人脸检测使用的是Dlib自带的人脸检测。Dlib的核心原理是使用了图像Hog特征来表示人脸,和其他特征提取算子相比,它对图像的几何和光学的形变都能保持很好的不变形。Dlib 实现的人脸检测方法便是基于图像的Hog特征,综合支持向量机算法实现的人脸检测功能[23]。

3.5.3卷积神经网络模块

卷积神经网络模块是本系统最重要的模块,卷积神经网络的功能是将人脸照片预测出一个最高可能性的结果。实际上这就是一个分类的问题,首先人脸照片经过卷积神经网络得到一个分类结果,如果结果与正确结果有误差,然后经过反向传播算法去调整卷积参数,然后在利用前向传播算法再次得到分类结果,如此往复,从而得到最优的卷积核参数。

三、人脸识别系统核心技术实现

5.1人脸识别系统主界面

当运行代码后,用户可根据主界面按钮选择对应功能系统,主界面如图5-1。开始:开启人脸识别系统进行人脸识别,注册:注册新用户,管理员登录:显示已注册人员信息、更新或删除用户信息、注册新管理员。
  在这里插入图片描述

图5-1 人脸识别系统主界面

5.2人脸注册界面

当用户选择人脸注册功能后,首先点新建打开摄像头,调整好人脸位置(整个人脸都出现在摄像头范围内),然后再输入学号、姓名、电话等信息,可开始注册,当系统判断输入信息合法后开始采集人脸头像,当人脸头像采集完成后,然后将人脸图像进行预处理后保存至指定文件夹,注册完成。人脸注册界面如图5-2。

在这里插入图片描述

图5-2 人脸注册主界面
在这里插入图片描述
图5-3(a) 人脸注册过程中 图5-3(b)人脸注册完成
  用户在注册时一共录入100张人脸头像,为了提高图像预处理鲜果,这些图像首先会进行人脸检测,若采集到的图像中有人脸,则裁剪出人脸位置,只对只有人脸信息的图像进行灰度化,对比度与亮度的变化。人脸注册时采集的照片如5-4,处理后的人脸照片如5-5,存入数据库的用户信息如图5-6。

在这里插入图片描述

图5-4 人脸注册采集的照片
在这里插入图片描述

图5-5 处理后的人脸照片
在这里插入图片描述

图5-6 数据库中保存的人员信息

5.3管理员界面

当要进行人员信息管理时,首先登录已注册的管理员账号,登录界面如图5-7。

在这里插入图片描述

图5-7管理员登录界面
  管理员登录成功后,进入用户信息显示界面,如图。在显示已注册用户信息的时候,系统中只参与训练,或者已被删除的人员信息不会显示,显示人员信息包括该人员的学号,姓名,电话,人脸保存位置。用户信息显示如图5-8所示。
  在这里插入图片描述

图5-8 用户信息显示界面
  在需要管理人员信息的时候,首先需要在输入框中输入需要删除或修改的人员的学号进行修改,输入后会展示出该人员的信息,然后可点修改或者删除按钮进行对人员信息的管理。用户信息管理界面如图5-9所示。
  在这里插入图片描述

图5-9 管理人员显示界面

5.4人脸识别界面

当注册新人脸后未训练,数据库中注册人员的state为3,当点击开始按钮后,首先就会检测数据库中是否存在注册state为3的人员,若不存在则开始进行人脸识别,若存在,则会提示先进行模型训练再进行人脸识别,如图5-13所示。
  在这里插入图片描述

图5-13 训练提示
  当开始人脸识别后,出现在摄像头的人脸都会进行人脸识别,若该人员已经注册,则系统会框出该人脸位置,并且显示出该人员注册时的输入的名称,如图5-14所示,若该人员未注册,人脸识别系统就会框出该人脸但但显示为“unknown”,如图15所示。

在这里插入图片描述

图5-14 人脸识别成功
在这里插入图片描述

图5-15 数据库中该用户信息

5.5卷积神经网络训练

利用已处理好的人脸照片做成数据集和对应的标签,然后将数据集分为训练集与验证集,然后进行模型训练,在精度达到自己设定的阈值时,训练结束,保存卷积核参数,让人脸识别模块在识别时来调用。训练效果如图5-16所示(前800次),训练过程中精确度变化如图5-17,损失度变化如图5-18。
  在这里插入图片描述

图5-16 利用神经网络训练模型

四、总结

  在开发本系统之前,对于没有接触过这些技术的我,总觉得人脸识别是一个非常“神奇”的技术,所以非常想去了解一些相关的知识。在选择了这个课题后,自己都不知道自己应该从哪里开始,在指导老师和学长的帮助下才找到开始的方向,了解了人脸识别的相关技术和应用,确定了系统的模块。
  在前期学习开发技术过程中,主要是通过网上的一些视频学习Python语言、人脸识别与数据库相关技术,虽然之前对Python语言和数据库有大概的了解,但是掌握的知识用来开发一套完整的系统是不够的,在学习过程中,如Opencv、pyqt5等相关知识,首先会去官方文档学习,然后会在Github上面找一些开源的代码进行修改调试。通过不断的修改和调试,最终在短时间内就能够将这些技术应用到本系统开发上。
  在系统开发过程中,遇到很多以前都没有见过的问题。但是在遇到问题的第一时间我都会将可能出现问题的代码改写成自己能够熟练应用的形式,若是还是解决不了就会通过谷歌或者百度去搜索相关问题的解决方案,在国内的CSDN、博客园等博客网站都有很多从事软件行业的技术人员在上面讨论一些技术上的问题,一般都能很快的找到答案,遇到网上解释不清楚的时候,我会和研究生学长进行讨论,最终确定解决方案。
  经历了本次毕业设计,我学习了很多人脸识别相关的算法知识,也在设计的过程中遇到了很多的问题,但是每个问题都在自己的努力下被解决,这也间接地提升了自己的代码与实践能力。

六、 目录

目 录
第一章 绪论1
1.1课题研究背景及意义1
1.1.1研究背景1
1.1.2 研究意义1
1.2 国内外研究现状1
1.3 研究内容2
1.4 本章小结2
第二章 关键技术与相关软件3
2.1 OpenCV简介3
2.2 TensorFlow简介3
2.3 Dlib简介3
2.4卷积神经网络简介3
2.5数据库介绍4
2.6 Pycharm简介4
2.7 QT designer简介5
2.8 本章小结5
第三章 人脸识别系统总体设计6
3.1人脸识别系统概述6
3.2人脸识别基本流程6
3.3设计内容7
3.3.1设计需求7
3.3.2 预期目标或设计指标7
3.4人脸识别系统各模块任务7
3.5 各模块原理8
3.5.1人脸照片采集与处理模块8
3.5.2人脸检测模块9
3.5.3卷积神经网络模块9
3.5.4人脸识别模块12
3.6可行性论证12
3.6.1技术可行性论证12
3.6.2经济可行性12
3.7本章小结12
第四章 人脸识别系统核心技术实现13
4.1数据库设置13
4.2人员注册模块13
4.3图像预处理模块14
4.4人员信息管理模块15
4.4.1用户信息显示模块15
4.4.2用户信息更新16
4.4.3用户删除16
4.5人脸检测17
4.6卷积神经网络17
4.7神经网络模型训练19
4.7.1损失函数20
4.7.2前向传播算法21
4.7.3反向传播算法22
4.7.4 Adam优化器23
4.8人脸识别模块24
4.9本章小结25
第五章 系统运行展示26
5.1人脸识别系统主界面26
5.2人脸注册界面26
5.3管理员界面29
5.4人脸识别界面31
5.5卷积神经网络训练33
5.6性能测试34
5.7本章小结35
总结36
致谢37

猜你喜欢

转载自blog.csdn.net/m0_73485263/article/details/133687176