—基于机器学习的人脸识别算法的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
—基于机器学习的人脸识别算法的设计与实现
基于机器学习的人脸识别算法的设计与实现承诺人签名:日
期:年月日基于机器学习的人脸识别算法的设计与实现摘要人脸识别技术是一种新型的生物特征认证技术。
人脸识别技术也是一个非常活跃的研究领域,涵盖了许多领域,例如数字图象处理。
随着人们对应用程序需求的增长,面部识别技术趋向于大量使用,使用微芯片和标准化。
人脸检测是快速准确识别人脸的先决条件。
其目的是检测图象背景下的人脸,并将其与数据中的人脸进行比较,以实现人脸识别。
本文以 python 为开辟技术,前端实时检测摄像头人脸,人脸识别主要是使用 mtcnn 做人脸提取,使用facenet 做人脸特征提取,通过余弦相似度分类进行人脸识别。
系统界面简洁、识别迅速、使用方便。
本文首先介绍了人脸识别系统的现状及其发展背景,然后讨论了系统设计目标,系统要求和总体设计计划,并详细讨论了人脸识别系统的详细设计和实现。
系统最后进行面部识别。
并对系统进行特定的测试。
人脸识别,顾名思义就是在图片和视频中检测有没有人脸。
当发现一个人的脸时,会获取其他面部特征(眼睛,嘴巴,鼻子等),并根据此信息将该人与已知人脸的数据库进行比较。
标识一个人的身份。
人脸检测是使用计算机确定输入图象中所有人脸的位置和大小的过程。
面部识别系统是由面部识别系统引入的,该系统可以包括面部图象,输出是面部和面部图象的存在之和,描述了位置,大小,参数化位置 Do 和方向信息[1]。
假定检测面部的问题始于识别面部的研究。
全自动面部识别系统包括与两项
主要技术的链接:面部检测和提取以及面部识别。
完成自动面部识别的第一个要求是确定一个人的面部。
人脸识别是自动人脸识别过程的第一步,
它基于自动人脸识别技术。
自动人脸识别系统的速度和准确性起着重要作用。
人脸识别系统可以应用于考勤、安全、金融等领域,应用广泛,大大提高了工作效率,提高了服务水平,身份认证变得更加科学、规范、系统、简单。
1.2 国内外研究现状面部识别的研究始于 1960 年代末和 1970 年代初。
第一个研究人员是布莱索,他建立了一个人脸识别系统,但这个系统是半自动的,识别的主要依据是坐位识别的主要特征,如人脸特征点的距离和比例。
20 世纪 90 年代,计算机软硬件发展迅速,人们对人脸识别的要求
越来越高,对人脸识别的鲁棒性也提出了更高的要求[2]。
许多学者开始
研究基于整体的识别方法,并成为当时人脸识别研究的趋势。
最具代表性的特征脸方法和弹性图匹配方法。
在 1990 年代中期,整体识别和成份分
析相结合的面部识别方式开始涌现。
研究人员也开始认识到,他们不仅必须充分利用来自各种面孔的面部识别信息,而且还必须融合诸如形状拓扑特征,局部灰度功能和全局比例分布之类的特征。
当时,许多新的算法开始浮现,但都是将一些原有的算法拼接在一起,对算法本身并没有提升和优化。
在 1990 年代后期,面部识别技术得到发
展并开始商业化,许多产品开始投放市场。
但是,由于算法的单一和落后,其识别的误差还是很大,并且运行速度还有待提高。
直到来到 2000 年,
才有所进步,但是与人们的需求相比存在一些差异,这主要是由于外部环境的影响,例如光照,姿式和距离的影响。
识别效果差。
当前,面部识别技术只能在不需要高识别精度的某些情况下使用。
总的来说,这项工作的面部识别涵盖了各个领域,例如计算机视觉,数字图象处理和人工智能,但是根据这项研究,无论实际计算机的类型如何,在现代网络和计算机通信中它都可以满足也需要快速的系统开辟。
从一种观点看,研究的价值很高。
随着计算机网络的扩散,诸如计算机信息的图片和视频之类的多媒体信息的比例不断增加,这项研究将不可避免地导致快速,长期的发展。
1.3 本课题主要工作本文主要分为五个章节,具体结构如下:第一章节为概述部份。
主要分析了该课题的研究背景以及研究意义。
了解了现阶段国内外的人脸识别的发展情况。
提出本文主要的工作内容。
第二章是对开辟的环境进行分析,以及对于采用的人脸识别方式进行分析第三章人脸识别开辟的可行性分析和对需求分析第四章是对人脸识别系统开辟流程的说明。
第五章对人脸识别功能实现的测试总结以及对后续改进的展望。
第二章系统开辟环境 2.1python 技术 Python 是一种开辟语言,一种用于计算机程序设计的开辟语言,并且允许面向对象的编程。
Python 由 GuidovanRoum 开辟。
Python 具有许多功能,例如简洁的语法,免费的源代码和种类不少的数据库和第三方库[5]。
由于这些优点,您可以非常快速地与其他语言结合以实现各种功能模块。
许多人都被昵称为“胶水”。
使用Python 快速编程的原型是许多程序员当前使用的一种方法。
在任何有特殊要求的地方固定都很方便。
PyQt 是一个工具包,主要可以创建带有图形界面的程序。
Qt 库是一个功能强大的库。
PyQt 实现了一组 Python 模块。
PyQt 受人青睐的原因是因为其拥有数据庞大的类和功能。
不仅如此,其跨平台开辟的特点也是其受青睐的原因,例如 UNI 某, Microoft,Apple。
此外, PyQt 具有双重证书,可提供跨平台性能。
在使用 Python 安装平台之前,用户必须设置环境变量以加载和运行
取决于另一个平台的不同版本运行。
Python 特点 1.阅读起来简单:由于 Python 代码简洁,而且定义也非常清晰,所以阅读起来更加简单。
2.维护起来方便: Python 的维护简单方便。
3.标准库多: Python 自身带有许多免费的,开源的,功能强大的数
据库。
4.具有方便的互动模式:有了互动模式的支持,开辟者可以从代码就可以看到结果,这样开辟者对程序的测试与调试,变的更方便。
5.可移植性好: Python 可以跨平台运行。
6.扩展性非常好的:如果有关键的代码,你可以用特殊的语言进行编写,也能够在系统中调试运行。
7.数据库接口多: Python 可以与市面上大多数的数据库连接。
8.可嵌入性强:为了提高实用性, Python 可以嵌入到多种语言中。
增强程序的合用能力。
2.2 图象检测简介图象检测,顾名思义,就是通过某种算法,把图象中的需要处理那部份图象进行定位与获取。
这也是图象识别的最重要的一
步。
普通都是采用图形分割技术,图形分割技术又与图形的特征提取和图像处理密不可分[4]。
图象检测的方法有不少种,这里简单介绍以下几种较常用的方
式: 1 基于直线检测的方法顾名思义,通过检测图象中的直线(通常是图象周围的所有边缘)来识别直线。
通常使用的检测方法是霍夫变化和其他方法。
原理是按形状查找图象。
但是,在实际应用中,许多因素都会影响定位效果,例如光线不均匀,灰尘和尘埃,图象含糊或者暴光过度。
固然,霍夫算法也有其缺点。
它仅检测直线,不考虑图象形状的将来变化。
同样,霍夫的空间不能一次匹配一个原始图象空间。
不能指定霍夫空间中的特征点。
图象轮廓的初始位置不能避免在直线上产生干扰的问题,并且在直线上存在干扰的情况下,无法提取帧[7]。
2 基于阈值化的方法这种方法的主要特点是可以对图象应用阈值,以获得具有单个字符和背景的二进制图象。
尽管目前提出了各种关键策略,但是简单算法对二值化的影响很小,但是复杂算法由于计算时间长和计算复杂性而限制了计算时间。
在现实生活中由于上述原因,这种方法没有取得太大的普及。
3 基于灰度边缘检测方法此类方法普通使用两种方式,一种方式是利用图象区域局部对照度明显,另一种方式为灰度有规律变化的纹理特征,通过这两种方式相结合来定位。
(1)基于灰度直方图的门限化边缘检测通过灰色直方图检测阈值极限是最常见和最简单的方法。
这种边缘检测方法的原理是搜索对象。
背景图象在被摄体上有很好的边缘。
该图象的灰度直方图为 2 个峰值。
(2)基于微分的边缘检测①一阶差分边缘检测人像的边缘点将显示像素灰度值急剧变化的特征,具有相对较大的差值。
当差值方向和边界方向相互垂直时,此时差值最大。
因此,只要对 f(i,j)的所有方向上的差值进行第二次阈值化,就可以通过处理来检测边缘像素点,从而获得边缘图象。
②二阶差分边缘检测与一阶差分边缘检测一样,人像的边缘点会表现出像素点灰度值急剧变化的特征。
图象的灰度值将用于沿着某,y 或者进行二次差分,然后通过差分后的一些属性来检测边缘。
③根据边缘的位置,图象的灰度值变化很大。
相对应的连续函数的坡度最大。
常用的算法有 Robert 运算符, Prewitt 运算符和 Sobel。
另一种更直观的方法是使用当前像素附近的一些像素值合成表面,并计算像素连续表面的斜率。
最大的梯度就是肖像的边缘。
2.3 人脸识别简介2.
3.1 人脸识别阶段人脸识别作为图象处理的一次尝试,目前有了很大发展和突破。
主要流程包含:首先利用机器分析,对特征信息进行提取,然后进行查找和匹配,从而达到识别人脸的目的。
目前人脸识别技术已经渗透到我们的生活,比如人脸支付、人脸门禁、人脸
购物等等。
伴有着科技的不断发展和人们需求不断地增加,人脸识别技术也在不断地成熟和稳定,其发展大概分为三个阶段。
(1)第一阶段人脸识别的创始人Bledoe,他把人脸进行特征提取,
比如组成人脸的眼睛、鼻子等作为参数,人脸识别系统的雏形得到了建立
(2)第二阶段因为在采集分析信息方面人们变得变得更加简单,在199 几年初,图象处理的关键发展方向已经从一些基础的处理转向了整体人脸识别。
并且由于计算机技术得到不断的突破。
人脸识别的方法更加呈现百花齐放的状态例如:灰度处理,人脸模型等等。
(3)第三阶段人脸识别技术是在 1990 年代后期开辟的,随着市场需求的持续增长,它已成为关注的焦点。
在世界上每一个国家,我们都在争夺人脸识别技术的发展,但是基于成熟的技术,人脸识别技术也存在严
重的缺陷。
直到现在,人脸识别技术仍然对世界感兴趣,并且还在不断
发展。
2.3.2 人脸识别方法人脸识别的方法有不少有根据眼耳口鼻的形状和它们之间的距离来识别,此外有将图片进行压缩并且正交变换来进行识别,其次有通过机器学习用函数来进行训练识别。
此外还有一些常用的模型识别方法,如 NM,HNM 等。
2.4 深度学习算法及 CNN 人工神经网络是一个动态系统,是一个自适应的非线性动态系统。
每一个神经元在单独分开来看的时候其自身的功能和结构对于其他来说是简单的,但如果我们将由大量神经元进行组合连接,其呈现的东西是十分强大的。
人工神经网络之所以称之为人工神经网络,主要是因为它能反映人脑功能的一些基本特征。
虽然这只是对人脑功能的抽象化呈现和摹拟。
但是对于普通的计算机来说,他不是单单地执行代码所能呈现的功能,一步一
步往下操作,它能在执行代码程序的过程中不断去适应环境,自我地去学习,优化自身,总结学习上的规律。
因这人工神经网络在这几个方面上更接近人脑。
在人工神经网络在一开始像一个初生的婴儿一样是一张白纸,他要通过不断地学习才干进行工作。
比如说在设定“一”代表“1”,“二”代
表“2”以此类推,人工神经网络便要去学习。
在现实生活中神经网络的优势更多地体现在分类的问题上,比如图书推荐,酒店推荐等等。
像 LR 或者 linearSVM 这些分类算法在面对一些非
线性分类的时候, LR 通常需要靠特征工程做特征映射,而 SVM 需要选择核。
这些操作往往会增加计算量,延缓运行速度。
而神经网络在具有三层或者三层以上结构的时后,它能够很好地实现非线性可分。
并且计算量会相比 LR 或者 linearSVM 少得多。
之前的人工神经网络存在一个问题:就是数据的传递都是一整个传递,这导致越往后所需要处理的像素参数会越来越多。
直到卷积神经网络(简称 ConvNet 或者 CNN)的浮现来=才解决此类
图像处理问题[11]。
CNN:CNN 也称被为卷积神经网络。
他拥有两个不同功能的神经元。
一个是 C,另一个是 S。
C 代表的是卷积。
主要用于特征提取。
S 代表子采样,实际上是池化操作。
LevelC 是特征提取的 Level[12]。
每一个神经元都只和上层的一部份相连接,在这一部份确定后,其他未连接的部份也会被映射下来。
网络中的每一个处理级别都包含多个功能图。
每一个对象都映射在一个平面上,并且平面上的所有神经元具有相同的权重。
同
时,它主要包含可用于特征分类的函数,可以是 S 型激活函数或者 RELU 函数。
Sigmoid 的优点是输出范围有限,并且在传输过程中不容易分散数据[2]。
CNN 算法成功的关键是通过减少参数数量并证明使用局部连接方法和权重分配方法的图象处理优势,从而接近当前的生物神经网络。
除了减少参数数量外, CNN 还使用特征提取。
这使您可以直接插入启用了复杂图象预处理的原始图象。
因此,目前,基于 CNN 的特征提取正在取代在人工视觉领域已经积累了 10 多年的各种特殊模型或者技术,并且该领域几乎存在标准的预处理方法。
以前,功能是手动开辟的,因为对于各种可识别的对象有许多实用的功能,并且它们高度依赖于经验。
现在, CNN 可以轻松做到这一点,从而避免了在特征提取和分类过程中数据恢复的复杂性。
第三章系统分析 3.1 可行性分析人脸识别系统主要目标是实现对人脸的检测和识别。
在确定了任务之后,我们从以下四方面进行可行性分析。
3.1.1 技术可行性(1)硬件可行性分析硬件普通主要是指我们计算机的配置,目前无论是我们的家用电脑还是实验室的电脑,在配置方面都基本能够满足我们的开辟使用,而且系统的开辟软件对计算机要求并不算太高,因此普通的硬件便能完成系统的开辟。
(2)软件可行性分析人脸识别系统主要采用 python 为开辟技术,前端实时检测摄像头人脸,人脸识别主要是使用 mtcnn 做人脸提取,使用facenet 做人脸特征提取,通过通过余弦相似度分类进行人脸识别。
Python 是一个相对成熟的语言,由于其简单容易使用、标准库第三方库多、开源,功能强大,可扩展性高等等一系列的优点,能够匡助开辟者更加高效简单的进行开辟工作。
可以看出,该系统的开辟是没有问题的。
3.1.2 操作可行性面部识别系统的界面通过简单易用的通用界面窗口实现。
用户只要能够正常使用就可以登录并使用计算机。
并且利用 Python 语言能简化开辟。
该系统的特点是易于使用,易于管理和出色的交互性,并且使用非常简单。
所以开辟这个系统是彻底可行的。
3.1.3 经济可行性该系统是提供用户面部识别的系统,并且由于是通过调用相关库来实现的,因此整个系统的系统开辟和花费时间不会太大和太长。
整个过程的开辟是独立且独立进行的,要解决所有开辟问题,可以仅使用一台计算机和上述各种软件。
面部认证系统所需的硬件和软件环境在市场上很容易获得,程序的开辟主要是控制系统的开辟和维护。
因此,该程序不需要太多的工作和资金,并且系统不是很复杂,并且开辟周期短且便宜。
3.1.4 法律可行性该面部识别系统是独自开辟的系统,在实际使用中非常重要的贡献。
使用的开辟环境软件和数据库是开源的。
没有复制其他人的代码或者程序。
这在法律上是可行的。
3.2 需求分析所谓需求分析就是,需求人员通过与客户的沟通,所获取的信息,然后把这些信息通过需求说明书的方式展示给用户和开辟人员。
在一开始,任梦对于需求的分析时不太重视甚至是不太认同的,例如当时美国 IBM 公司为英国电信公司开辟一套信息管理系统,在需求不明确的情况下开始开辟,最初的工期为一年,由于需求获取不清晰导致工期推迟了半年多,造成巨大损失。
而导致这一切后果的原因就是需求获取不及时、不清晰、不全面。
3.2.1 功能需求分析 1.人脸检测:在 MTCNN 人脸检测模型中,从照片中提取出对应的人脸 2.特征提取:把人脸图象输入到 FaceNet,计算Embedding 的特征向量 3.人脸识别:判断两者之间的余弦距离,若复合要求,则判定为同一人否则便不是 3.2.2 性能需求分析一个系统的性能的好坏,直接决定了用户的体验度。
而性能的好坏又取决于系统的架构的好与坏。
一个优秀的系统架构普通包含以下几个方面: (1)模块化设计明确。
一个大的系统,分为不少小的模块,每一个模块的划分清晰明确,每一个模块的功能明确,且模块之间可以灵便的调用,实现低耦合高内聚。
(2)模块的划分,分为不少种类,要保证通用模块实现灵便的调用,特殊模块,可以随时根据系统功能等的变更及时进行更改。
让系统的灵便性更高。
(3)稳定、安全、高效的数据建模。
数据是整个系统的仓库,惟独
一个稳定、安全、高效的仓库,才干为系统提供好的数据存取和变更。
(4)整体结构稳定而又灵便。
系统的整体架构在初期部署的时候,
一定要有高度,非但结构清晰,运行稳定,当运行浮现问题的时候,能够提供快速的解决方案。
3.3 开辟环境分析(1)开辟硬件平台: CPU:Intel5 内存: 4G 以
上硬盘: 80G 以上(2)开辟软件平台:操作系统: Window10 开辟软件:pycharm 开辟语言: python 第四章系统设计与实现进过系统的分析后,就开始记性系统的设计,系统设计包含总体设计和详细设计。
总体设计只是一个大体的设计,经过了总体设计,我们能够划分出系统的一些东西,例如文件、文档、数据等。
而且我们通过总体设计,大致可以划分出了程序的模块,以及功能。
但是只是一个初步的分类,并没有真正的实现。
整体设计,只是一个初步设计,而且,对于一个项目,我们可以进行多个整体设计,通过对照,包括性能的对照、成本的对照、效益的对照,来最终确定一个最优的设计方案,选择优秀的整体设计可以降低开辟成本,增加公司效益,从这一点来讲,整体设计还是非常重要的。
4.1 系统设计原则(1)数据安全性系统的开辟涉及到不少数据,包
括用户数据或者是系统数据等,无论是哪种数据都需要确保数据的安全性,在系统设计时必须要采取安全防范措施,以解决潜在的安全问题。
(2)易用性系统最终会交付给客户,用户通过其权限进行系统的使用,能不能用,以及是否好用,都决定了客户对系统甚至是开辟公司的印象。
好用的系统能够大大提高操作员的工作效率,从而提升用户的好感度和忠诚度。
(3)柔软性柔软性包含范围较广,主要是能够处理各种突发的情况,也就是我们所说的应急能力。
由于任何人都无法保证系统的绝对安全,当系统浮现错误时,能够及时的进行补救。
(4)扩展性系统的可扩展性对于我们来说是必要的,这样便于满足不
同的要求,以及减少支出。
4.2 系统流程设计 4.2.1 系统开辟流程在进行人脸识别系统开辟时,
最先开始的肯定是对于需求的分析,在需求分析之后便是对于系统总体的设计(比如结构上,功能上,数据上)其次便是功能模块上(数据库等) 的设计,最后便是系统的测试。
本系统的开辟流程如图 4.1 所示图 4.1 系统开辟流程图 4.2.2 人脸识别流程用户在使用人脸识别时,首先进行人脸的检测,如果发现人脸然后进行识别。
流程如图 4.2 所示。
图 4.2 人脸识别流程图 1 在 MTCNN 人脸检测模型中,从照片中提取出对应的人脸。
2.把人脸图象输入到 FaceNet,计算 Embedding 的特征向量。
3.人脸识别:判断两者之间的余弦距离,若复合要求,则判定为同一人否则便不是,例如当特征距离小于 1 的时候认为是同一个人,特征距离大于 1 的时候认为是不同人。
4.3 系统功能设计根据第三章功能分析,得出人脸识别系统的功能结构,如图 4.3 所示:图 4.3 系统功能结构图 4.4 接口设计4.4.1 外部接口(1)用户界面用户界面即为 Window 窗口。
用户通过对话框上的菜单,按钮,文本框等元素与系统进行沟通。
(2)软件接口无。
(3)硬件接口包括传统的与键盘,鼠标,显示器,摄像头的接口,用来输入和输出。
4.4.2 内部接口内部接口,使用 mtcnn 来进行人脸的检测, FaceNet 特征提取。
4.5 系统实现 4.
5.1 人脸检测 MTCNN 是一个多任务卷积神经网络,他将人脸的区域检测和人脸的关键点检测放在一起来提高性能。
特殊是在三个 CNN 阶段中,从粗略到准确地处理预测人脸和脸部标记点的任务[12]。
1:使用 P-Net 是一个全卷积网络,用来生成候选窗和边框回归向量(boundingbo 某 regreionvector)。
使用 Boundingbo 某 regreion 的方法
来校正这些候选窗,使用非极大值抑制(NMS)合并重叠的候选框。
全卷
积网络和 FaterR-CNN 中的 RPN 一脉相承。
2:使用 R-Net 改善候选窗。
将通过 P-Net 的候选窗输入 R-Net 中,
拒绝掉大部份 fale 的窗口,继续使用 Boundingbo 某 regreion 和NMS 合并。
3:最后使用 O-Net 输出最终的人脸框和特征点位置。
和第二步类似,但是不同的是生成 5 个特征点位置。
网络结构如图 4.4.图 4.4mtcnn 结构首先将采集到的人脸信息存储在一个共同的文件夹之中,方便为后续的人脸检测提供便利。
图 4.5 已经储存的人脸在人脸导入完成之后,对已经存在的人脸进行人脸的检测和注册,并且会进行两次检测,提高检测率,当图片不符合要求时,会提示注册失败,请更换图片的字样。
图 4.6 人脸的检测和注册成功 4.5.2 人脸识别 FaceNet 用来对照人脸之间的匹配度。
其主要思想在多维空间中显示人脸图象,并通过空间距离表达人脸的相似性。
如果检测的人脸和识别的人脸的空间距离较小则为同一人脸,反之则为不同的人脸。
如此,在平面图象中的脸部信息可以通过空间映射来进行表现,并且可以进行对照,达成人脸识别的功能。
FaceNet 是一种在机器学习的环境下的对人脸信息点进行映射的方法,并使用三重子损失特征来形成神经网络。