《基于人脸识别动态识别签到系统设计与实现.docx》由会员分享,可在线阅读,更多相关《基于人脸识别动态识别签到系统设计与实现.docx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于人脸识别动态识别签到系统设计与实现 基于人脸识别的动态识别签到系统设计与实现 Design and Implementation of Dynamic Recognition Check-in System Based on Face Recognition 内容摘要 目标检测(Object Detection)是近年来计算机科学的探讨重点,他可以通过识别目标的几何特征,将困难的场景分割并针对特定的目标进行识别,关键点在于精确度以及实时性 。人脸识别(Face recognition)则是目标检测中,让人最为看重的一个子类。一旦我们的人脸识别技术足够成熟,意味着我们不再须要其他物理的钥匙或
2、者是数码的密钥,而是用一张脸,就可以满意日常生活中的一切。世界上可能有许多相像的人脸,但是肯定没有完全相同的两个人。当人脸识别技术足够成熟,我们完全可以将人脸识别作为身份分类的一个重要指标。 在深度学习的刺激下,人脸识别有了巨大突破,机器也变得会“思索”。这意味着人脸识别的平安等级将会提高,可以适用于更多平安要求更高的场景,同时人脸识别的探讨也可以推动更多神经网络、图像处理等的领域发展。 关键词: 目标检测 人脸识别 深度学习 Abstract Object detection is the research focus of Computer Science in recent years.
3、 It can recognize the geometric characteristics of the target, segment the complex scene and recognize the specific target. The key point is the accuracy and real-time. Face recognition is one of the most important sub categories in target detection. Once our face recognition technology is mature en
4、ough, it means that we no longer need other physical keys or digital keys, but with a face, we can meet everything in our daily life. There may be many similar faces in the world, but there are absolutely no two identical people. When face recognition technology is mature enough, we can take face re
5、cognition as an important index of identity classification. Under the stimulation of deep learning, face recognition has made a great breakthrough, and machines have become “thinking“. This means that the security level of face recognition will be improved, which can be applied to more scenes with h
6、igher security requirements. At the same time, the research of face recognition can also promote the development of more neural networks, image processing and other fields. Key words: object detection face recognition recognition speed 书目 第一章:绪 论 1 1.1探讨背景及意义 1 1.2人脸识别6种实现方式 1 1.2.1几何特征的人脸识别方法 2 1.2
7、.2基于特征脸(PCA)的人脸识别方法 2 1.2.3神经网络的人脸识别方法 2 1.2.4弹性图匹配的人脸识别方法 2 1.2.5线段Hausdorff 距离(LHD) 的人脸识别方法 2 1.2.6支持向量机(SVM) 的人脸识别方法 2 1.3本文的主要工作 3 其次章:人脸识别的新特性-深度学习 3 2.1 深度学习 3 2.2 深度学习与人脸识别的二次结合 4 2.2.1 VGG模型 5 2.2.2 优图祖母模型 6 2.3本章总结 7 第三章 :动态人脸识别签到系统实现 8 3.1实现思路 8 3.2算法实现 8 321 环境依靠 8 3.2.2 实现一般的人脸识别 9 3.3完善
8、动态人脸识别签到系统 12 3.3.1 从视频流中取帧进行识别 12 3.3.2 实现上传素材、导出签到表 15 3.3.3 运用演示 16 3.4本章小结 17 第四章:总结与展望 18 4.1论文总结 18 4.2展望 18 参 考 文 献 20 致谢 21 第一章:绪 论 1.1探讨背景及意义 传统的目标检测技术主要是通过几何特征对图像进行切割,进而对切割出的素材进行几何分析,依据特征将其分类。但是实际运用中,各种物品杂乱无章重叠摆放,部分物品特征会被覆盖导致目标检测精确率较低,好用型并不高。而人工智能的到来,为我们展示了不一样的世界。 目前,各种人工智能设备早已被大众所接受,各种IOT
9、设备也已经被量产。物联网完全可以凭借AI这杆利刃,更上一层楼。人工智能所带来的不仅仅是全新的人机交互体验,同时他也带来了更多技术工种的就业机会,人工智能可以跨越多行业相结合,也就意味着须要更多的人才去进行智能训练,人工智能就犹如当时的自动化革命一般为我们的社会注入新的血液。人脸识别技术早在几十年前的科幻电影中就已经出现,跟着机器学习的脚步,它也走出电影来到了我们的生活中。传统的物理密钥、密码都存在被盗取的风险,而人脸不一样,就算是双胞胎之间也不存在一摸一样的五官角度,因此人脸识别是我们进行身份管理最平安的一项技术。当人脸识别技术越来越普及,我们的数据集会越来越丰富,通过更多的训练,可以让机器更
10、加的智能,更好的适应我们的生活所需。在机器学习探讨前期,机器算法都比较简洁。在处理较为单一的场景下,有很优秀的表现。但当涉及到较为困难的数据衍变时,简洁的算法结构的输出结果精确率极低。例如处理自然信号。在1980年,深度学习出现了。它的概念是在对人工神经网络的过程中所提出的,它的设计动身点在于建立一个机器人脑,通过模拟人体大脑的工作过程,来研发出一整套神经网络来处理和解析获得的困难数据,例如影、视、音等。深度学习是通过对输入信号分解并组合低层次的特征,然后用来表示目标的特征或者是类别,并将特征输出。由于各种外界因素的影响,人脸识别的准度和精度还是不能满意全部场景的需求。人脸识别在二维上的发展可
11、能比较完善,但是我们还可以通过三维图像综合识别,也可以通过引入时间概念,通过对不同时间段的识别来确定识别对象的身份。因此,人脸识别的道路,还有很长。 1.2如何实现人脸识别 1.2.1基于几何特征的人脸识别 几何特征主要为五官的模型差距以及五官之间的距离以及几何关系。该算法在理论上简单理解,识别的速度快,原理简洁,所占用的内存相对较少,缺憾的是识别率较低,不够精确。 1.2.2 基于特征脸(PCA)的人脸识别方法 特征脸方法是基于K-LT所提出的人脸识别方法,K-LT全称是Karhunen-Love translation,他是一个最优正交变换,此前用于压缩图像文件。通过对N维图像进行K-LT
12、变换,获得到一组低次重量。在其中选取重要的重量,然后扩张为线性空间并进行投影,所投影出来空间的即为我们判定是否为相同人脸的一个特征量。特征脸方法的缺点在于它须要大量的训练样本,才能保证识别精度的一个精确性,并且完全是通过图像灰度对特征进行统计的。特征脸方法也有很多不同的版本,适应在不同要求的场景下,但大体上原理都是一样的。1.2.3神经网络的人脸识别方法 神经网络的特点在于输入变量类型更多,他会依据输入值的不同,通过不同的智能算法进行分析,不同于传统的识别方法一般都须要完整的人脸,但是神经网络可以通过部分人脸进行分析,并得出结论。当然,结论可能无法干脆利用,却可以筛选掉一些不符合的人,从而削减
13、我们投入的人工。同时,缺点也非常明显,须要较多的训练样原来对神经网络进行适应性学习,训练样本的数量跟识别的精准度是成正比的。1.2.4弹性图匹配的人脸识别方法 弹性图匹配的思路是从生物学的角度动身,定义基本脸型,通过二维拓扑表现出来。同时,该拓扑上图像全部顶点都作为该脸图的特征量,可以用来表示该点四周的线性关系。其中弹性二字的意思是,允许图像对比时具有肯定的弹性变法,这样可以克服微表情改变所带来的识别障碍。通过几何因素与灰度化特征相结合,弹性图匹配被广泛应用在流式处理的在线识别产品上。更重要的是,它并不须要大量的训练样品进行适应性训练。1.2.5 LHD的人脸识别方法 LHD是一群心理学家所提
14、出的识别方法,他们认为人类对于轮廓线条的识别精准度以及速度上并不差,因此他们提出了LHD。它从灰度化的人脸图中,提取其中的轮廓线,用LDH来表示不同线条之间的距离关系。更重要的是,LDH没有建议两个线段之间的唯一对应关系,因此它可以从多个方面验证单一线段是否发生了某种可容忍的改变,用来表示对不同人脸之间的相像程度。从结果来看,LHD绕过了光照条件以及姿态改变,因此在这方面他显示了较良好的识别性能,但是由于轮廓无法体现人脸表情,因此它在表情处理方面识别效果并不如人所意。1.2.6 SVM的人脸识别方法 SVM中文名是支持向量机,在近几年,他也进入了智能识别领域的探讨者眼中。通过支持向量机,用学习
15、机的泛化实力换取更高的计算性能。SVM在识别过程中可以帮助我们将识别人脸分解为多个特征变量,进而依据特征变量来对人脸特征进行比对得出人脸识别的结果。通过SVM可以提高人脸识别的识别率,但同大多数识别方法一样,SVM须要大量的训练样本,而在实际应用中训练样本数量往往不足。并且SVM的训练过程耗时长,算法种类也有各有千秋,因此该方法并没有一个统一的定论。1.3本文的主要工作 本文从目标检测动身,针对人脸识别进行探讨,讲解并描述了人脸识别的探讨意义以及发展方向。着重介绍了深度学习对于人脸识别探讨的巨大帮助,深度学习让人脸识别能够更加智能的识别,增加识别的速度以及精度。人脸识别目前已经广泛应用在企业打
16、卡签到以及部分智能家居产品上了,但部分特别的场景还是没有采纳人脸识别,而是利用更精密的识别手段诸如瞳孔或者物理密钥这种形式。这主要是由于人脸识别的缺点比较自不待言,它存在被欺瞒的可能性。同时,针对脸部丰富的表情改变以及外界环境光照等不行预见的因素,人脸识别可能会受到影响、或许是识别速度过慢或者是无法正常识别等问题。 本文简洁地实现了一个动态人脸识别的签到系统,识别流程大抵是先对素材库中的人脸预处理,以包含人脸特征的二维数组这种形式缓存下来,在打开摄像头进行识别的时候提取关键帧的人脸并处理为测试数据,将其与缓存中的素材集进行对比,依据相对应的阈值找到素材库中对应的人名,保存在签到名单中。当摄像头
17、关闭时将签到名单保存为TXT在项目根书目中。对于预处理素材库中的素材这一步,被处理过的素材会缓存在内存中,因此当素材过多时对内存资源要求较高。 本文一共分为四个章节: 第一章:绪论,针对人脸识别与深度学习的结合,人脸识别焕发了活力,介绍了人脸识别的多种方式及其效率以及人脸识别对科技生活的巨大帮助。其次章:拥有深度学习新特性的人脸识别与传统的人脸识别相比的优势所在。第三章:通过face_ recognition实现了一个动态的人脸识别签到系统,拥有在线添加素材、实时人脸识别、导出签到人员表等功能。第四章:如何突破现在人脸识别效率与精确率无法并取的现状。第五章:结论与展望。其次章:人脸识别的新特性
18、-深度学习 2.1 深度学习 我们将深度学习分为“深度”“学习”两个过程来理解:学习的词义说明是指通过阅读、听讲、思索、探讨、实践等途径获得学问或技能的过程。在深度学习中,其实也差不多,只是我们的输入值不再是通过听讲、思索等动作,而是换成了机器能够读取的一个个数据集。而深度的意思是,从输入值到输出值这个过程中,所要经验的各个计算过程,它们各自联系,由浅入深,最终输出我们想要的数据。而这个计算过程,有好有坏,有的效率高输出值缺不精确;有的效率低,输出值却精确。因此,我们可以形象的称这个过程为“学习策略”,好的学习策略虽然须要花费大量时间去规划,但是他的结果是足够精确的;不好的学习策略会导致错误,
19、会让学习过程走更多的弯路。学术界尝试模拟人脑,完成一套计算机能够理解的学习策略,他被称之为“神经网络”。在人的大脑皮层中,是由一个一个神经元所组成的一个大的神经网,所以神经网络也是仿照这个概念去设计。 如图中的输入值,x1、x2、x3,在经过包括输入层的四层结构之后,输出了我们所期望看到的结果,这就是一个简洁的神经网络。其中L1跟l4分别是输入层和输出层,l2、l3则是隐藏的处理层,越是困难的运算,所须要的处理层就越多,同时每个处理层所包含的参数也就越多,因此也就导致整个神经网络的规模呈现一个非线性的扩大。 总结一下,深度学习就是是通过多层次的计算以及分析,通过由浅入深,获得所须要的输出值的过
20、程。而神经网络,则是我们通过分析整个运算,所规划的由各种参数与处理层所组成的一个大型的计算网络,我们可以通过这个计算网络实现输入值到输出值的一个转变。 2.2 深度学习与人脸识别的二次结合 传统的人脸识别模型一般为图2-2,通过对比提取到的cnn特征作为推断的依据,而当深度学习与人脸识别二次结合,人脸识别走出了另一条全新的道路。深度学习可以在通过多次训练后,训练出一种类人脑的一种思维方式,只要样本数足够多的,理论上可以像大脑一般精确分析思索。他会依据多个数据集的结果,微调每个数据对于最终结果的判定占比。如图2-2-2,图像之间的数值就是欧式空间中的距离,该数据越低,证明两张照片为同个人的可能性
21、越高,训练的样本数越高,照片之间的距离参数也会变更,趋近于真相。 图2-2-1 图2-2-2 2.2.1 VGG模型 最初VGG并不是用作为图像分类识别训练的神经网络,它是由牛津高校科学工程系发布,用来探究图像分类过程中网络深度是如何影响识别的精确率以及精度的。最初的VGG-16(VGG-Very-Deep-16 CNN),从全称中我们也可以看动身布者对于VGG-16的探讨深度标准之高, VGG不同于传统的卷积网络模型,他的卷积层与池化层并不是一一对应的关系,规定整个模型中有5个池化层,他们分别与一部分卷积层相关联,可以从图2-2-3中看到池化层的安排关系。VGG按卷积层的数量划分命名,最少的
22、由3个全连接层+8个卷积层组成,命名为VGG11;最多则由3个全连接层+16个卷积层组成,命名为VGG19。 图2-2-3 当然,作为一个曾在ImageNet上大放光彩的模型,它并没有那么简洁。它的结构设计也并不是一成不变,我们完全可以用全卷积网络的概念对他进行改造,将首个全连接层改为7x7其余的全连接层改为1x1。在VGG之前,没有其他的神经网络模型能够做到在突破10层的状况下,保证效果良好,不受影响。VGG虽然突破了网络深度,却没有彻底解决网络深度所带来的一系列问题。当网络层数过多以后,同样会出现梯度性能下降等问题。总的来说VGG在刚提出的时候也是受到推崇,但是随着时间的消逝,越来越多的更
23、加优秀的训练模型被提出,VGG也就不那么刺眼了。 2.2.2 优图祖母模型 祖母模型提出之初,就已经确定了要成为一个百宝箱,它并不特殊指代一种深层的神经网络模型,它是一个具有相同结构特征的神经网络模型的集合。在不同的应用场景下,优图祖母模型可以供应不同的神经网络模型,完成所须要实现的效果。因此,也有人叫它优图祖母模型族。目前,最流行的深层神经网络模型(图2-2-4)从结构上划分一共有三种:1.单支型(如AlexNet,VGGNet);2.双分支型(如ResNet);3.多分支型(如GoogleNet)。直线型结构设计最为简洁,但当网络深度过深会出现性能爆炸或性能消退等问题,同时由于结构单一,他
24、也缺乏改造性。局部多分支型具有较强的计算实力和较高的计算效率,但其设计也最为困难,设计所耗费的人力物力较多。结合以上两点,祖优图最终采纳双分支型这种折中的架构来构建祖母模型族。双分支型本身具有很强的学习实力,也有很多采纳该结构的训练集在竞赛中获奖;其次他的结构设计较为简洁,前期人力消耗可控,最大的特点之一就是识别实力与神经网络的深度是一个正相关的一个关系,这意味着我们在针对不同的应用场景的多个模型进行识别训练的时候,完全可以通过限制网络深度来应对不同的需求。为了满意用户的识别需求,一般会要求获得用户最大的数据集进行训练,以保证神经网络模型的可用性。 图2-2-4 祖母模型在近期也在识别流程上进
25、行了一次较大的变动: 流程的变更主要是由于迁移学习的提出,迁移学习是人工智能领域所提出,用来解决不同的处理场景下训练时长过长的问题,而神经网络模型完全可以通过迁移学习,削减训练所花费的时间。简洁点来讲,就是将整个训练过程分为:1、预训练(pre-train);2、精细化调整(fine-tune)。 针对人脸识别场景,咱们只要将已被训练完成的优图祖母模型针对新场景上的新数据进行精细化调整,就满意新场景的一个识别需求。2.3本章总结 本章介绍了VGG以及优图祖母模型两种人脸识别模型, VGG和优图祖母模型。VGG是由牛津高校科学工程系发布,用来探究图像分类过程中网络深度是如何影响识别的精确率以及精
26、度的。在探讨过程中,人们用其进行识别训练,凭借着VGG结构清楚简洁的优点,取得了不错的成效。同时,通过运用多个小型滤波器代替正常的滤波器,获得了更好的性能,这也就印证了:通过不断加深网络结构可以提升性能。但是VGG对计算资源的要求是特别高的,由于运用了大量的参数,它比其他的深度学习模型须要占用更多内存。其中,大部分参数来自全连接层。但是,依据部分试验结果的效果看来,就算去除掉全部的全连接层,他的性能也没有太大的影响,这样就显著的降低了参数的数量。优图提出的祖母模型在我看来,是将来深度学习的一个主流。优图祖母模型的核心,就是通过大量的,各种各样的样本,来训练出一个浩大的数据集集合。该集合可以用于
27、多处运用(如人脸识别、目标检测、动态跟踪、自动驾驶等),并且近年迁移学习提出让祖母模型族成型的可能性大大提升,进行基础模型的预训练,在特定任务上对模型进行精细化调整。这样一来,大大优化了祖母模型对于特定场景训练的流程,削减训练时长,可以完成更多的训练。目前,优图祖母模型也已经投入应用中,并且取得了不错的成果,我们可以在腾讯云的AI人脸识别产品中对第三代优图祖母模型进行测试。第三章 :动态人脸识别签到系统实现 3.1实现思路 首先,一个可以上线的签到系统最少要有以下三个功能: 1、人像素材上传 2、通过摄像头设备对比素材库进行识别 3、保存签到胜利的人像名单 其中1、3我通过Python的一些自
28、带库实现了,核心的识别功能我选择了github上的一个开源项目Face Recognition,通过对其进行二次开发实现了动态人脸识别签到系统实现。 3.2算法实现 321 环境依靠 依据Face Recognition的开发文档,该项目的运行环境支持linux/树莓派,但是我的设备系统环境为win10,通过查找资料后,我找到了一个可以在win10上运行的安装方式: 1、安装Anaconda 2、通过Anaconda安装CMake 3、安装dilb 4、胜利安装face recognition 3.2.2 实现一般的人脸识别 想实现人脸识别,首先要解决的就是如何找到画面上的全部人脸。在人脸识别
29、的初期,这个问题是第一个被提出的,一时间有出现了很多识别的算法。 依据不同的学问体系动身,大抵上可以分为人工智能、神经网络、图像处理、模式识别等多种识别方法,虽然动身点并不一样,但最终都是采纳了特征脸方法来实现人脸识别。 特征脸方法利用分析法,将人脸图像分解并提取特征样本。它事实上就相当于将人脸化为一组组向量,然后将提取的特征样本与参考库中所提取的特征样本进行比对,依据匹配的特征样本数取最高来找到识别度最高的人脸。由于特征样本在返回时,还具有人脸的肯定特征,因此我们也叫特征样本为“特征脸”。 图3-2-1 从图3-2-1中我们可以看到,我们可以将一副人脸图像分解成一组权值向量,然后利用向量为单
30、位找到距离最小对应的人脸图像的身份作为测试人脸图像的身份。这犹如派出所运用的素描画嫌疑人画像的过程,以一个基础脸型为动身点,然后画出不同的眼睛、嘴巴等五官给目击者确认,渐渐拼凑出一张疑似嫌疑人的一张图像。电脑实现的过程大抵是一样的,只是他的五官是以特征样本的抽象形式体现的。 而在face Recognition中,通过load_image_file()函数,可以把实现图片导入,而后只须要把导入的图片数据传入face_locations()识别图片中的人脸的位置,该函数的返回值为一个列表,其包含多个元组,代表着人脸的位置信息。接下来,我将展示演示所用到的图片素材: 素材3.2.1 实现的代码如下
31、: import face_recognition image = face_recognition.load_image_file(“素材3.2.1.jpg“) face_locations = face_recognition.face_locations(image) print (face_locations) 让我们来看下执行的结果: 我们可以视察到,执行结果返回了六个元组,每个元组中的数据代表的正是每张脸的位置信息,四个像素级的位置点把人脸圈起来了。这样一样,我们也就胜利的找到了全部的人脸。 接下来的问题,就在于如何进行人脸比对。而人脸识别的实现则是依靠“弹性图匹配”这种方法。弹性
32、图匹配的思路是忽视人与人之间五官特征的角度和长度,更多的将关注点放在图像变换后的不变性,所以它还有另一个名字“橡皮泥几何学”。它以一个人脸拓扑概括全部的人脸,依据这个拓扑结构划分基准点。 图3-2-2 每次进行识别,我们须要对识别图像人脸进行拓扑建模,获得特征向量。同时,读取素材库中已有的人脸所对应的特征向量进行比对,找到相像程度最高的一张图。然后以此图建立拓扑,进行更多特征向量的比对,进而找到测试人脸的身份。 在 face Recognition中,只须要将须要对比的两张照片所对应的编码作为参数传入face_pare_faces(),该函数会返回值的类型为boolean,该值为TRUE则证明
33、也许率为同个人,为FALSE则也许率不是同一个人。该函数的判定阙值可以在传入编码时运用tolerance关键字加上阙值限制作为第三个参数进行修改,目前合理的阙值也许为0.73左右,可以尽可能的做出精确的推断。接下来,我展示下演示所用的素材: 实现的代码如下: import face_recognition known_image = face_recognition.load_image_file(“素材3.2.2.jpg“) known_image = face_recognition.load_image_file(“unknown.jpg“) unknown2_image = face_
34、recognition.load_image_file(“unknown2.jpg“) lhf_encoding = face_recognition.face_encodings(known_image)0 unknown_encoding = face_recognition.face_encodings(unknown_image)0 unknown2_encoding = face_recognition.face_encodings(unknown2_image)0 results = face_pare_faces(lhf_encoding, unknown_encoding) r
35、esults2 = face_pare_faces(lhf_encoding, unknown2_encoding) print(results) print(results2) 执行的结果如下: 我们可以看到,第一次对比的结果集为TRUE素材的选取一张为我高二时的相片、一张为我大三时的照片,经过五年时间的成长,照旧可以识别胜利;而其次次对比的结果集为FALSE,素材的选取为明星吴彦祖,对比的结果也是正确的。 至此,已经胜利实现了静态的人脸检测、识别的功能。 3.3完善动态人脸识别签到系统 3.3.1 从视频流中取帧进行识别 在这个方面,我选用了opencv处理视频流流,之后通过获得视频流的每
36、一帧通过3.2中的人脸识别相关代码进行识别,在原帧中圈出检测到的人脸并且在框中标出识别的结果,详细实现的代码如下: def action(): video_capture = cv2.VideoCapture(0) # 引用素材库生成流 addpeople.Reading() addpeople.change() # 测试依据list生成流 known_face_encodings = addpeople.known_face_encodings # 赋值 known_face_names = addpeople.known_face_names # 赋值 # Initialize some
37、variables face_locations = face_encodings = face_names = process_this_frame = True s = set() arrivename = while True: # Grab a single frame of video ret, frame = video_capture.read() # Resize frame of video to 1/4 size for faster face recognition processing small_frame = cv2.resize(frame, (0, 0), fx
38、=0.25, fy=0.25) # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses) rgb_small_frame = small_frame:, :, :-1 # Only process every other frame of video to save time if process_this_frame: # Find all the faces and face encodings in the current frame of video
39、 face_locations = face_recognition.face_locations(rgb_small_frame) face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations) face_names = for face_encoding in face_encodings: # 阙值设置在这里 matches = face_pare_faces(known_face_encodings, face_encoding, tolerance=0.75) name = “Unkn
40、own“ if True in matches: first_match_index = matches.index(True) name = known_face_namesfirst_match_index face_names.append(name) process_this_frame = not process_this_frame # Display the results for (top, right, bottom, left), name in zip(face_locations, face_names): # Scale back up face locations
41、since the frame we detected in was scaled to 1/4 size top *= 4 right *= 4 bottom *= 4 left *= 4 # List identifiedq if name != “Unknown“: s.add(name) arrivename.append(name) else: pass # Draw a box around the face cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) # Draw a label with
42、a name below the face cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1) # Display the resulting image cv2.imshow(Video, frame) # 按Q推出 if cv2.waitKey(1) 0xF
43、F = ord(q): print(s) savelist.save(arrivename) break # Release handle to the webcam video_capture.release() cv2.destroyAllWindows() 实现的效果如下: 其中lhf为我上传的图片名,通过扫描素材库文件名获得。3.3.2 实现上传素材、导出签到表 通过selectPath读取素材的路径之后通过提交按钮对原素材进行素材提交,相关代码如下: def submit(): str = path.get() addr2 = str.replace(/,r) print(addr2
44、) f = open(addr2, rb) f_str = base64.b64encode(f.read() f.close() str = f_str file_str = open(Material bank%s.jpg%TEXT.get(), wb) file_str.write(base64.b64decode(str) file_str.close() 将识别的列表进行去重之后保存在TXT文件中,实现了签到表的导出,相关代码如下: def save(arrivename): arrivename2 = list(set(arrivename) data = open(“text.t
45、xt“, w+) print(arrivename2, file=data) data.close() 3.3.3 运用演示 运行项目,我们可以看到运用的UI界面(图3-3-1),填写完上传的资料后,可以通过路径选择按钮对想要上传的原图像进行上传(图3-3-2),上传的新文件的名字为资料的名字,后缀为JPG格式,完成素材上传后,点击打开摄像头后即可起先签到过程,需在摄像头前等待12s后在人像脸上标注出名字后(图3-3-3),完成签到。等到全部成员完成签到后,按“Q”退出摄像头界面后,系统会将胜利签到的人员列表存放在根书目中,名字为text.txt(图3-3-4),至此整个程序的演示结束。 图3
46、-3-1 图3-3-2 图3-3-3 图3-3-4 3.4本章小结 本章主要展示了我在开发过程中的思路以及所利用的一些demo测试,并最终实现了一个简洁的人脸识别项目。程序是利用python进行开发,运用了face recognition项目。从最初的环境搭建到整个开发过程中,所遇到的一些问题以及解决方案都在本章中有体现。在视屏处理方面,我运用的是opencv,利用截取关键帧来实现从视屏流到人脸截图这种形式的转变,最终利用人脸图进行识别并返回结果,标出人脸身份。整个流程思路好还是比较清楚的,最终实现的效果比较简陋,但基础的功能也还可以。由于素材库缓存的缘由,该程序对内存资源有肯定的要求,因此假如有复现的需求,须要保证内存在8G,并且素材库素材不行过多;假如有大型应用场景,建议采纳分布式的架构,将素材分布于不同的节点上,这样既能保证性能又能满意运用的需求。 目前,市面上的大型IT企业都有自己的人脸识别产品,并且已经投入运用了。我的程序无法与他们同日而语,但是对于初学者来说,可以经由这个项目入手,对于理解人脸识