基于Python的人脸识别系统的设计.docx
摘要人脸识别是本世纪的一个热门技术话题之一。随着科技飞速发展。人脸识别技术已渗透进社会中的各个领域,例如:军事、医疗、教育、娱乐等。类似于人脸识别支付、人脸识别登陆、人脸识别认证等功能,我们几乎每天都在使用。本设计主要运用Python语言、Opencv(计算机视觉库)、Tkinter(Python的Tk GUI工具包)制作的一个含有人脸识别的一个信息系统。其工作原理为:以含有人脸的图片为素材,从图片中提取人脸数据的特征值作为识别的标准后,与人脸系统库中人脸比对,从而识别出图片中的人物,并执行与该人物相关的一系列功能。关键词:人脸识别 Opencv GUI 检测AbstractFace recognition is one of the hot technical topics in this century. With the rapid development of technology, Face recognition technology has been in various fields in society, such as military, medical, education, entertainment, etc.Similar to face recognition payment, face recognition login, face recognition authentication and other functions, we use it almost every day.This design mainly uses the Python language, Opencv (The vision library of computer), and Tkinter (Python Tk GUI toolkit) to design an information system containing face recognition.Working principle: It uses the picture containing the face as the material, extracts the feature value of the face data in the picture as the recognition standard, and then compares it with the face in the face system library.Thus, the person in the picture is recognized, and perform a series of functions related to the character.Key words: Face recognition Opencv GUI Detection广东东软学院本科生毕业设计(论文)目录第一章 绪言11.1选题目的与意义11.2研究现状21.3主要内容3第二章 人脸识别的相关理论和技术42.1脸部识别原理42.1.1采集人脸图像42.1.2人脸检测52.1.3人脸信息对比(人脸识别)52.2人脸识别算法62.2.1几何特征识别法62.2.2特征脸识别法(PCA)82.2.3线段Hausdorff距离识别法(LHD)92.2.4支持向量机(SVM)的识别法92.3本章小结9第三章 人脸识别系统的软件设计103.1人脸识别的算法设计103.2软件功能的设计123.3软件功能的实现133.4本章小结16第四章 功能测试和系统调试174.1人脸识别系统的功能测试与结果174.2实验结果测试与对比18总结与展望20课题工作总结20未来展望20参考文献21致谢22附录23 广东东软学院本科生毕业设计(论文)第一章 绪言1.1选题目的与意义 如今时代发展飞速,从汽车到火车,再从飞机到火箭,科技的进步令人瞠目结舌。从农耕社会到现在的信息社会,我们的生活也逐步迈向小康。但凡事都有其两面性。在科技进步下,带来了信息化的社会,但就是在这个信息化的社会下,防止信息的泄露也演变成了国际性的难题之一。据不完全统计,全世界80%以上的人,他们的个人信息都保存在服务器中;92%以上的企业信息都保存在服务器主机内。出于安全性的考虑,国家机密资料更是有很大一部分都需要用加密硬盘进行保存。这些数据可充分体现出人们对信息安全性的重视。如今,人们都喜欢使用电子设备存储信息。第一、现在的电子设备越来越小巧,可随身携带;第二、电子设备体积虽小却能装载下大容量的东西;第三、电子设备不仅存储空间大,其存储的内容更是多种多样,不但可以存储文本、图片、视频,还可以存储三维模型、软件等。真因为电子设备的存在,同时也大大提高了信息在人与人之间传递的速率。从另一个方位思考,可发现这些信息同时也蕴含了极高的价值,例如个人的隐私信息、公司的机密信息、国家的机密信息等,所以,人们都很希望这些信息得到严密的保护,希望信息能够层层加密,就像是保险箱一样。也正因人们的需求太大,大大促进了如今的信息技术行业。如今的加密方式的种类也很多,我们使用得最多的就是密码加密,这是利用了混淆技术原理8,把一些可识别的信息经过某些手段处理后,变成无法识别的信息。这种密码加密方式仅适用于一些使用率较少的秘密信息,对于一些使用率较高的秘密就显得不太合适,因为这些秘密每天都要被使用,所以这样每天反复的输入密码,会显得十分繁琐,同时还加剧密码泄露风险。总而言之,类似于密码保护等身份识别工具已经无法满足社会的要求15,研究新的身份识别工具是一个必然的趋势。本次毕业设计选择了人脸识别,以保证用户的真实性,从而进一步提高管理效率以及管理水平。人脸识别技术早在20世纪60年代已有很多科学家在研究了。但是碍于当时的计算机处理速度,人脸识别这一技术才没办法发挥它的真正的“实力”。在80年代后,计算机的硬件方面大大提高,其处理速度方面也大大提升,人脸识别技术又被广大科学家重新研究,因此,人脸识别有了重大突破,进入真正的自动识别阶段。这一技术经过一段时间的成长后,在90年代后期,便涉及到各个领域,例如军事、教育、医学等。从人脸识别的发展历程上可以看出,人脸识别技术的发展饱经风雨,但是也影响不了它飞速发展的速度。从20世纪60年代至今不过就是几十年的时间,人脸识别技术已从简单的二维平面模型识别到现在的三维立体模型识别、多姿态识别等。人脸识别技术在学术上的解释是:人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术。为什么能通过人脸识别某个人的身份呢?是因为每个人脸都有一个共性都是由眼、鼻、口组成,并且它们的大致位置是不变的。但是在这些共性中又存在许多的不同点。例如:有些人是双眼皮有些人,是单眼皮;每个人的瞳距不一样;每个人嘴巴大小不一样;每个人鼻子的大小不一样等。就算是双胞胎都是会存在些许差别。人脸识别技术就是根据这些共性与差异辨别出身份的。1.2研究现状 人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术16。并且已涉及生活的各个领域,例如:军事、教育、购物等。其发展具有很大的潜力,就算在这个技术还未成熟的时候,在一些科技电影中就对这一项技术描述得淋漓尽致,也对其进行“华丽的预言”。正因这一技术的潜力极大,所以,我国也出台了许多相关政策支持这一技术的研发。2015年以来,我国相继出台了安全防范视频监控人脸识别系统技术要求、信息安全技术网络人脸识别认证系统安全技术要求等法律法规,为人脸识别技术在社会的发展,以及在各个领域的普及奠定了非常重要的基础1。在2017年的人工智能被写入全国政府报告的同年7月,国务院发布了新一代人工智能发展规划,同年的12月,工信部出台了促进新一代人工智能产业发展三年行动计划(2018-2020年)1。由于人脸识别也属于人工智能的一部分,所以在这几个出台的规划中,也对人脸识别的有效检出率以及正确识别率作出了一些标准规定。显而易见,人脸识别的发展是必然的,是这个时代的选择。人脸识别最早在20世纪60年代就已有科学家在研究了,只不过是受制于当时的科技技术不够先进,计算机处理速度缓慢,才导致人脸识别这一技术迟迟无法面向社会。后来计算机的发展渐渐有了起色,人类也因此进入了计算机的信息时代,计算机的各个方面都突飞猛进地增长,有了良好的硬件基础后,人脸识别这一技术也伴随着计算机的增长而逐渐走向成熟。人脸识别的整个发展过程可以分为五个阶段,它们分别是机械识别阶段、半自动化识别阶段、非接触式识别阶段及互联网应用阶段。与其他生物识别方式相比,人脸识别优势在于更具有自然性、具有不被察觉性等特点16。但与此同时人脸识别的研究难度也会比其它生物识别方式高。第一、人的脸部异变性比较大,换句话说就是外形的容易变化,容易影响识别的准确率。第二、环境的光度也会影响识别的准确率,由于如今的人脸识别大多数还是使用图像处理的方式识别,光的角度对于图像人脸的识别精确度的会有一定的影响。第三、人脸包含了许多姿态,例如开心、难过、憔悴、笑等,也给人脸识别造成了更大的研究难度。人脸识别其优势虽明显,未来必将会成为生物识别的主导技术之一,但其对于技术的要求也非常高。如果人脸识别在精度问题上能够得到有力的解决的话,人脸识别估计会替代指纹识别,成为市场应用规模最大的生物识别技术之一。从申请专利数量来看,2007-2017年,我国人脸识别专利申请数量总体上呈上升的趋势,尤其是2014年后,计算机人脸识别专利申请数量大幅增多,到2017年,人脸识别专利申请数量达到2847项。从公开专利数量来看,2007-2017年,我国人脸识别专利公开数量总体上呈稳定趋势。2017年,我国人脸识别专利公开数量为2698项,达到近年来最大值;截至2018年7月,专利公开数量为2163项。从专利数据上可知,人脸识别技术的发展趋势一直在快速增长。同时也说明了,人脸识别技术还可能继续成为下一个世纪的热门技术之一。在市面上的与人脸识别技术相关的书籍、文献、资料也不少,所以当前人脸识别技术的研究现状是非常不错的。1.3主要内容 本文将以设计人脸识别系统为主,对人脸识别技术进行深度的研究、学习。在设计开展之前,首先介绍一下人脸识别的相关知识、具体原理、以及算法知识。人脸识别算法有许多种,本文将不一一具体说明。在人脸识别算法知识中,会以阐述几何特征人脸识别算法为主。几何特征人脸识别算法也是本次设计的核心。除此之外,本文还会着重对以下几点进行了较为深入的探讨:(1)采集人脸图像过程(2)人脸检测过程(3)人脸信息对比过程27 第二章 人脸识别的相关理论和技术2.1脸部识别原理计算机识别人脸与人识别人脸的方式存在很大的差异。人是通过肉眼的视觉影像获取到这个人物的脸部信息,进而识别出这个人的身份信息。如果是个双胞胎的话,还可以通过这个人的肢体动作感知来区分。但对于计算机而言,就会显得相对困难,因为计算机不像人一样有感知,计算机需要将这些信息转化成数据,再对这些数据进行一系列的处理后,才能达到识别的效果。所以,人脸识别会涉及许多领域的知识点,其中最主要的就是图像处理。计算机需要通过大量数据才能识别出一个人脸。在这个地球上一共有70多亿人,因此一个精确的人脸识别背后需要大数据的支撑。在人脸识别算法中,有一个基于卷积神经网络人脸上识别算法,它拥有极其庞大的人脸库,涉及到大数据、深度学习、以及人工智能等相关知识。经过多重考察后,最后选用了Opencv作为设计的工具。因为利用Opencv对图像操作非常方便。Opencv可对图像进行剪辑、加载、拷贝等操作,还可以对图像进行基本的处理、例如去噪点、色彩处理等。不仅如此Opencv里还有摄像头的功能,方便本次设计制作以视频流为基准的人脸识别。而且OpenCV还可以进行一些线性代数上的计算,以内置函数模块实现计算特征值、特征向量、特征矩阵等。OpenCV 还提供了图像连通域、霍夫变换、图像轮廓处理、连通分支的分析、多项式的逼近、图像的模板匹配、曲线拟合、狄劳尼三角化等目标识别,以及多种特征提取方法、HMM模型4。人脸识别的过程主要分为采集人脸图像、人脸检测、人脸信息比对三个过程。2.1.1采集人脸图像采集人脸图像的渠道有很多种(下面列举三种常用的):利用电子机器摄像头拍摄互相网上的人脸识别库扫描仪采集对象是一些含有人脸的2D图像、3D图像、视频等。不同的类型的图像,识别的方式也会有所不同。例如:3D人脸图像识别就有两种,一种是在三维的基础上,另一种则是在2D图像的基础上。3D图像识别之所以可以在2D图像识别的基础上识别,是因为3D图像只是比2D多出一个维度的数据,所以可以通过处理2D图像再加上一个深度数据的方式来识别3D的人脸图像。以目前的调查数据显示,3D的人脸识别准确度会比2D的人脸识别准确度会更精准。2.1.2人脸检测人脸检测是人脸识别的前提和基础12。这个过程主要检测的是图像中是否含有人脸。由于人的脸部器官之间大致位置关系是固定的,并且这些脸部器官也会有所差异,例如瞳距、大小、角度等。可以通过这些共性与非共性的集合,在人脸图像寻找出一个特征点,通过这些能够标识人脸的的特征点数据追踪到人脸图像中的人脸位置,人脸图像是由多个像素点组合而成,计算机一般会用数据去记录每个像素点,对这些像素点进行分析之后就可以得到人脸数据特征矩阵,从而得到特征值与特征向量等数据。如今的人脸识别技术已成熟,所以市面上已有不少人脸检测工具,Opencv就是其中之一,在人脸检测这一模块可以使用OpenCV中的人脸模型去定位人脸位置之后再对人脸进行进一步的解析。但需要注意,在图像检测中,一般会先使用灰度处理过图像后,再进行人脸检测,因为这样能够提高人脸识别的性能。当然,彩色也是可以的。本次设计将使用的是灰度处理过的图像进行识别。人脸检测这一部分主要有图像的预处理、特征提取与选择两部分。预处理影响图像的因素会有很多,例如:光线亮度、拍摄角度等。当图像被影响了之后就容易产生许多噪点,这些噪点会影响我们人脸识别的各种检测。所以图像处理是很有必要的。一般是把图像中的噪点去除掉,还有把图像灰度化。特征提取特征提取是整个人脸识别里面很关键的一部分。很多识别方法都是以特征点为参照的基准才能达到检测/识别的效果。在OpenCV里,含有许多器官的特征值,利用这些特征值可以定位出图像中是否含有人脸,如果含有人脸的话,就会返回给系统其上下左右四个点的位置。再利用这四个点就找出人脸的具体位置了。2.1.3人脸信息对比(人脸识别)仅仅识别出人脸还不够,还需要识别出具体的人物。所以就需要人脸信息对比。人脸识别肯定离不开脸部识别算法。在开发设计过程中,可以自己去设计属于自己的人脸识别算法,但这样设计难度也会随之增加,也可以利用开源的人脸识别库,调用其中的脸部算法函数,这样会方便自己的初次学习,而且自己写的脸部识别算法还可能不如别人的算法好,导致系统设计缺陷多。而且人脸识别的算法质量对人脸识别的准确率会有一定的影响。人脸识别的算法有很多,主要的就是几何特征识别、以统计学为原理的PCA识别算法、神经网络识别算法、局部特征算法、弹性匹配算法等。本次人脸识别设计采用的算法是几何特征识别算法,利用OpenCV与face_recognition的结合制作的人脸识别系统。这部分主要检测图像中的人脸到底是谁。如果要应用在市场应用上,在这个过程中需要建立一个人脸数据库。在图像检测完毕后,将图像中的人脸与人脸数据库的人脸进行比对,从而识别出这个人脸。一般人脸信息相似度不会设置为百分之100,脸部表情也会影响人的脸部的相似度,一般设置相似度为60%左右。2.2人脸识别算法在众多人脸识别算法中,特征分析也是人脸识别的核心之一。经过多个的人脸模型的训练后,所有的特征点组合起来后就能建立出人的脸部模型。通过这个脸部模型就可以定位到人脸图像中的人脸位置。但是还不能识别出这个人脸到底属于谁,还需要对识别出来的人脸作进一步再分析,以某一相似值为标准,与人脸库中的人脸信息作对比。其中,主要的识别算法有:几何特征识别法、局部特征识别法、特征脸识别法(PCA)、神经网络识别法(CNN)、弹性匹配识别方法、线段Hausdorff距离(LHD)识别法、支持向量机(SVM)的识别法2。2.2.1几何特征识别法基于几何特征的提取方法主要是人脸的主要器官进行定位3。由于脸部器官的结构、大小等的不同,所以可以对脸部以几何进行描述,构成脸部的几何特征。这些几何特征主要包括特征点的位置、特征点之间的距离、特征点之间的角度等3。通过对这些特征点进行解析,利用特征点与特征点之间的距离构造出特征向量16,再利用该特征向量进行人脸识别1115。本次设计的特征值提取是基于灰度图像的一个特征值提取。假设输入的图像g(x,y), 其大小为e * f。图像g在点(x,y)的灰度值I(x,y)。那么,该图像的V (x)垂直积分投影函数,H(y)平积分投影函数如下5: (公式2-1) (公式2-2)垂直积分投影函数是指输入图像的一个垂直区域的灰度值之和,它表示图像的灰度值在垂直方向上的变化。水平积分投影函数则是指输入图像水平区域的灰度值之和,表示图像的灰度值在水平方向上的变化。这是一个经过灰度处理后的人脸图像(如图2.1):图2.1 灰度处理后的人脸图像其垂直积分投影函数如下图所示:图2.2 垂直积分投影函数其水平积分投影函数如下图所示:图2.3 水平积分投影函数像素点越暗,其灰度值就越低。相反,像素点越亮,其灰度值越高。根据垂直积分投影函数与水平积分投影函数,可以定位出人脸部的眼睛位置。因为人的眼睛一共有两个,并且具有对称性,所以在水平积分投影函数的两个波谷就是眼睛的位置的。紧接着就是定位出鼻子的位置,鼻子在两个眼睛的中间,并且灰度值比较高,也就是灰度值最大的那个点,就是脸部的鼻子的特征点。紧接着就能定位出嘴巴的位置,就是在积分函数投影的灰度值比较小,并且在眼睛附近的地方。每个脸部器官都取3个特征点,共12个,并且构造出其标准特征向量。2.2.2特征脸识别法(PCA)PCA(Principal Component Analysis)方法也就是主成分分析法。该方法是一种以K-L 变换为基础的统计分析方法5。每一个人脸都是由许多成分组成的,例如:痘痘,皮肤,黑色素等,在这些成分中有些成分是主要的,例如:眼睛形状,嘴巴的形状等,并且这些主成分组合起来可以唯一标识出特定的人,在这种情况下,就可以不加以考虑除了主成分之外的元素,这样可以大大减少程序的运算量。在识别人脸的过程中,首先要把主要人脸部分截取出来,再进行识别。截取出来的人脸图像可以看作一个高维度数据的产物,通过对这个高维数据进行分析得到一个低维数据,方便程序计算。虽然在这个过程中图像存在细微的亏损,但是其主成分是不发生改变的。利用这些主成分特征值与现在的人脸对比,进而达到识别的效果。在这一算法中,图像训练是这一算法中很重要的一部分。多个低维数据,可以反推出一个标准的新的人脸图像(如图2.4),根据这个图像就能准确得识别出当前人脸对应人脸库中的哪个人脸,进而达到识别的效果。图2.4 反推的新的人脸图像PCA的主要步骤如下: (1) 先把人脸数据样本截取出来。(2) 将人脸图像的高维图像矩阵进行排序、计算,得出低维的数据矩阵。计算公式如下5: (公式2-3)(3) 紧接着计算出其协方差矩阵,公式如下5: (公式2-4)(4) 将计算出来的K个最大特征值与其对应的特征向量进行组合,变成新的变换矩阵,接着采用 K-L 变换式对计算出来的变换矩阵进行计算,就可以得到该图像的低维特征向量。 (5) 最后利用这些低维数据反推出新的图像投影到子空间中,就可以得到该人脸的人脸模型,利用这个模型的数据就可以达到人脸识别的目的。 2.2.3线段Hausdorff距离识别法(LHD)心理学研究表明,人在识别类似素描的边缘图上的速度和准确度丝毫不比识别灰度图的能力差13。LHD识别就是基于人脸图像的灰度图轮廓,识别的是两个线段集合之间的距离,通过计算Hausdorff距离进行识别两张人脸之间的相似度14,再根据相似度的大小来判断是否为同一个人。由于线段集之间的线段不存在对应关系,所以,LHD识别对微小变化的处理远比其他识别算法要好,但是其缺点是在大表情下的处理会存在较大的缺陷。在本次设计中没有用到此算法。2.2.4支持向量机(SVM)的识别法支持向量机(Support Vector Machine, SVM)目前是 Corinna Cortes 和 Vapnik 等人在研究统计学习理论的基础上提出的新的方法610。SVM 算法主要分为线性与非线性两种方法,在进行识别时基本上不受样本的质量与数量的影响9。通过在训练集合里提取出特征向量值,结合一定的算法得到结果。在本次设计中没有用到此算法。2.3本章小结本章主要概述了人脸识别的具体过程和不同人脸识别算法的原理。人脸检测是所有算法的前提、基础。一般情况下,都是检测出人脸位置,以该图像区域为基础进行人脸识别。不同的人脸算法的依据也是不一样的,例如:PCA识别是依据统计学的,线段Hausdorff距离识别是依据心理学的某些原理。不仅如此,由于原理的改变,其运算的时长也不一样,所需的空间也会不一样。综上所述,要想设计出一个性能较好的人脸识别系统,必须完善其人脸识别算法,可通过研究不一样的算法,综合其优点改善。第三章 人脸识别系统的软件设计3.1人脸识别的算法设计本次设计尝试了2种人脸识别方法。一种是PAC算法,另一种几何特征算法,这两种算法都有其优点和缺点,最后经过多次考量之后,决定选择用简单的几何特征算法。因为PAC需要训练大量的人脸图像训练样本,经过统计、分析之后,得到一个人脸模型,再由这个人脸模型与当前人脸对比,才识别出人脸。这个过程相对复杂,导致最后在嵌入进窗口界面的时候,容易出现卡顿严重,所以最后选用的是几何特征识别的方式。本次人脸识别系统设计是主要基于Opencv、face_recognition两个库。几何特征识别流程(如图3.1):图3.1 几何特征识别流程PCA算法识别流程:在用PCA识别算法中,可使用sklearn模块进行计算,这样会大大提高识别的效率。降维过程(如图3.2):图3.2 降维过程训练与识别流程(如图3.3):在用PCA识别算法的时候,可使用sklearn模块进行计算,这样可以大大提高识别的效率。图3.3 训练与识别流程(1)PCA识别样本训练的部分代码:# 获取训练集train_face, train_face_number, test_face, test_face_number =loadDataSet(3)# PCA训练训练集,用pca将数据降到30维pca = PCA(n_components=30).fit(train_face)# 返回测试集和训练集降维后的数据集x_train_pca = pca.transform(train_face)x_test_pca = pca.transform(test_face)# 逻辑回归训练classirfier = LogisticRegression()lr = classirfier.fit(x_train_pca, train_face_number)# 保存模型joblib.dump(lr, 'lr.model')# 计算精确度和召回率accuray = classirfier.score(x_test_pca, test_face_number)recall = accuray * 0.7(2)PCA识别的部分代码:# 预测的人脸predict = img2vector(string)# 加载模型LR = joblib.load('lr.model')predict_people = LR.predict(pca.transform(predict)string1 = str("编号:%s 精确度:%f 召回率:%f" % (predict_people, accuray, recall)3.2软件功能的设计本次人脸识别系统的功能主要以登陆为主,分为密码登陆与人脸登陆两个部分。密码登陆部分流程(如图3.4):图3.4 密码登陆部分流程人脸登陆部分流程(如图3.5):图3.5 人脸登陆部分流程3.3软件功能的实现详细代码见附录。第一步:环境配置下载PyCharm,配置好python3.6的环境。安装opencv库、tkinter库、face_recognition这些库的环境安装相对复杂,需要的时间会比较长。第二步:各个子模块准备(人脸定位、人脸识别、界面设计、摄像头)人脸定位子模块:利用opencv库加载一张含有人脸的图像,将图像里的成分进行解析,利用人脸器官的特征值,定位出人脸的大致位置后,对图像进行标记,最后显示标记过的人脸图像,达到人脸定位的效果,具体的人脸定位过程(如图3.6)。图3.6 人脸定位过程人脸定位的部分代码与注释:#1.加载人脸模型face = cv2.CascadeClassifier('alt.xml') #2.调整图片灰度(灰度可以提高性能)gary = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)#3.检查人脸faces = face.detectMultiScale(gary)#标记人脸for(x,y,w,h) in faces: #里面有四个参数1.写图片2.坐标原点3.识别大小4.颜色/线宽 img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),10)运行效果(如图3.7):图3.7 运行效果人脸识别子模块:将定位出的人脸图像进行解析,得出一个人脸编码数据,这些数据对应的是人脸的器官的特性,以数据的方式记录脸部器官的特性。定位出来的人脸与另外一张人脸图像的人脸信息进行匹配,由于各种外界因素,两张图片中的相似度不可能是100%,一般60%左右即可,为了确保识别的精确度,本次设计是70%。本次设计可以采用数据库的方式对人脸数据进行装载。人脸识别部分代码与注释:#对图片中人脸进行编码me_face_encoding = face_recognition.face_encodings(me)0he_face_encoding = face_recognition.face_encodings(he)0#准备人脸库的人脸编码know_face_encoding = me_face_encoding,he_face_encoding#准备人脸库中人脸对应姓名# know_face_names = 'me','he'#发现图片中当前图像中的人脸位置locations = face_recognition.face_locations(img)face_encodings = face_recognition.face_encodings(img,locations)for(top,right,bottom,left),face_encoding in zip(locations,face_encodings):#比较人脸matchs = face_pare_faces(know_face_encoding,face_encoding)name = 'unknow'for match , know_name in zip(matchs,know_face_names):if match:name = know_name运行效果(如图3.8):图3.8 运行效果界面设计子模块:利用tkinter库设计登陆界面、人脸识别界面、以及软件主界面。摄像头子模块:利用摄像头捕获图像,把每一帧图像都进行人脸识别处理。子模块组合摄像头子模块+人脸识别界面:在这个过程中,识别的算法越复杂,视频的流畅度就会越低。根窗口与子窗口之间的关系处理不当,容易造成视频模块无法嵌入。摄像头子模块+人脸识别界面+人脸识别:本次设计采用的是几何特征人脸识别,这一算法的识别运算量虽少,但是也会降低了视频的流畅性。运行效果(如图3.9):图3.9 运行效果3.4本章小结本章主要通过具体流程,生动形象地阐述人脸系统设计开发的全过程,在设计开发期间,针对不同的模块进行了合理的改善。特别在子模块的组合过程中,由于嵌入在一起会出现卡顿严重、某些模块无法嵌入到界面等问题,寻找了各种各样的解决办法才得以解决。所以在设计过程中需要特别注意。第四章 功能测试和系统调试4.1人脸识别系统的功能测试与结果密码登陆功能测试:账号不存在运行效果(如图4.1):图4.1 账号不存在运行效果账号存在、密码错误运行效果(如图4.2):图4.2 账号存在、密码错误运行效果账号存在、密码正确运行效果(如图4.3):图4.3账号存在、密码正确运行效果 人脸登陆功能测试:人脸登陆界面(如图4.4)图4.4人脸登陆界面人脸登陆测试(如图4.5):图4.5人脸登陆测试4.2实验结果测试与对比经过多次的测试对比,该人脸识别功能已达到实现的效果,但是识别的精度还有待提高。经过研究多种人脸识别发现是人脸识别算法的问题。若想达到更精确的效果,可尝试换一种新的人脸识别方式。在测试过程中,资源释放不到位、电脑配置不够高,导致程序的人脸识别部分的运转时长不高。该程序还有提高的空间。总结与展望课题工作总结本次论文主要详细描述了人脸识别的过程,以及人脸识别的两种算法,几何特征识别与PCA识别。本想在设计中加入数据库,由于时间流逝的速度之快,已经到了毕业设计的期限的尾声,就没有加入进去了。在这两个多月的学习制作中,本人从中学习到了许多知识,特别是对于人脸识别这一模块学习。在这段时间里,阅读、研究过许许多多的文献、书籍,备受感触。人脸识别实现起来的难度并没有想象中那么大,但这仅仅是因为本次设计采用的是简单的识别方式,这样的识别效果特别差,达不到提高安全性的效果,离研究目标还有一定距离。本次设计的成品并不成熟,还需要加以完善。要想利用人脸数据保护资料,对人脸识别算法的学习还需要更深一步。虽然完成了本次毕业设计的制作,但是对于本次作品本人并不满意,无论是美观上、还是功能上,还存在很大的漏洞。对人脸识别的算法学习还未达到预期的效果,对数据处理、分析的能力还不足。所以人脸识别算法还需要继续花费时间研究,本次作品还需要进行改善。在这段时光里,遇到了非常多的难题。例如环境搭建不成功、界面模块嵌入不成功、识别失误等。本次设计所用到的环境要求比较高,每个工具依赖的环境也比较复杂,在搭建环境这个过程中,花费了大量的时间。在制作界面的过程中也困难重重,本次作品是本人用python做的第一个项目,许多东西都是边学边做的,但很幸运的是,本人的导师、师兄都很热心地协助,并解决了问题,也正是因为有他们的在背后默默的支持,本人才更加有热情、动力去学习。未来展望 在未来的一段时间里,本人将继续对人脸识别进行更深一步的学习。在这段时间里,已对人脸识别这一技术花费了大量的时间才有一定的了解。并不想就此放弃之前的努力,继续坚持学习下去,或许能被本人发现彩虹呢!无论以后的学习有多困难,都要坚持学习下去,让自己每天进步一小步。古人云:滴水成河、粒米成箩。就算如今的知识量薄弱,但经过时间的洗涤,一定能得到很大的进步。参 考 文 献1李夏风.人脸识别市场的发展现状与变化J.中国安防,2020(Z1):39-42.2艾英山,张德贤.人脸识别方法的综述与展望J.计算机与数字工程,2005(10):24-27.3曹海燕. 基于几何特征的人脸识别算法研究D.曲阜师范大学,2015.4卜秋月. 基于OpenCV的人脸识别系统的设计与实现D. 吉林大学.5黄泉龙. 基于PCA的人脸识别研究D.西安电子科技大学,2012.6李艳;张琛;倪丽萍;何畏;潘莉. 基于分形维数权重的大学生心理资本分类研究.合肥工业大学.20157汪勉;赵景秀;韩君君;程洁;赵娟;曹曼曼. 基于快速Hough变换检测圆的人眼精确定位方法的研究.电子技术杂志,20088卢开澄. 计算机密码学M. 清华大学出版社, 1990.9徐金梧.冶金生产过程质量监控理论与方法.北京冶金工业出版社 , 2015.0510李振龙;韩建龙;赵晓华;朱明浩;董文会。基于K近邻和支持向量机的醉酒驾驶识别方法的对比分析。交通运输系统工程与信息 。201511邹国锋,傅桂霞,李海涛,高明亮,王科俊.多姿态人脸识别综述J.模式识别与人工智能,2015,28(07):613-625.12廖广军. 复杂条件下的人脸检测与识别应用研究D.华南理工大学,2014.13杜成,苏光大,林行刚,顾华.改进的线段Hausdorff距离人脸识别方法J.光电子·激光,2005(01):89-93.14李嵩,刘党辉,沈兰荪.基于ASM和线段Hausdorff距离的人脸识别J.计算机应用,2008(05):1217-1220.15郭雅楠. 基于SVM和ELM的人脸识别方法D.太原理工大学,2015.16刘婷.基于局部特征分析的人脸识别方法J.信息与电脑(,2019,31(21):114-115+118.致谢本次毕业设计工作能够完成,特别需要感谢本人的导师佟向坤老师。在她的悉心教导下,本次的毕业设计才得以完成。在大学的四年的学习过程中,佟老师对本人的关心和指导,让本人受益匪浅。特别值得一提的是,每次在找不到问题的解决方式的时候,与佟老师沟通一下,这一问题就很神奇地莫名其妙地解开了。除此之外,还要感谢在这段时间陪伴在身边的家人们、朋友们、师兄师姐们。他们就像荧幕前背后的柱子,每当荧幕快要倒下的时候,都提醒荧幕要坚持下去。在危难之际,幸亏有他们伸出援助之手,。在这个满是荆棘的人生道路上,正因为有这些良师益友,本人才能奋力前进、坚持不懈。他们的支持是本人的精神支柱、以及前进的动力。附录import tkinterfrom tkinter import *import tkinter.messageboximport cv2import osimport timefrom PIL impor