基于树莓派3B+的人脸识别系统设计与实现_第1页
基于树莓派3B+的人脸识别系统设计与实现_第2页
基于树莓派3B+的人脸识别系统设计与实现_第3页
基于树莓派3B+的人脸识别系统设计与实现_第4页
基于树莓派3B+的人脸识别系统设计与实现_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE基于树莓派3B+的人脸识别系统设计与实现现 基于树莓派3B+的人脸识别系统设计与实现现题目名称:基于树莓派3B+的人脸识别系统设计与实现摘要:目前,传统的身份验证技术早已不能满足人们的需求,而生物特征识别技术因其唯一性、不易复制性、不易窃取性和方便性,这使得生物特征识别技术逐渐成为了人们在身份验证技术上的首选。在生物特征识别技术中的人脸识别技术,具有无法复制的唯一性、更好的便携性、更高的安全性和非接触性,现已应用于电子商务、金融、国防安全等各大领域,其成为了生物特征识别技术的热门研究领域。本论文是基于树莓派3B+平台,结合开源数据库OpenCV和Python高级编程语言完成的人脸识别系统,硬件部分主要有:树莓派3B+,FIFO模式的USB接口摄像头,PC控制端。树莓派3B+平台具有良好的可移植性、操作方便、运算速度快等优点,成为本课题选择的硬件平台。本课题重点研究了人脸检测和人脸识别技术。在人脸检测环节中,采用了AdaBoost算法,在此算法中,用Haar特征值来表示人脸,并使用积分图计算方法,从而加快计算速度,提高检测速率,完成人脸检测并为人脸识别过程做铺垫。在人脸识别环节中,采用了基于局部特征值提取的LBP算法,其具有计算速度快,识别效果良好的特点。本课题基于树莓派3B+平台,利用OpenCV开源视觉库,实现了人脸检测,建立人脸库,完成人脸识别功能。经测试,该系统能够良好的完成人脸检测,人脸识别,且具有较好的检测和识别效果。关键词:人脸识别;人脸检测;树莓派;OpenCV;AdaBoost;LBP

DesignandImplementationofFaceRecognitionSystemBasedonRaspberryPi3B+Abstract:Atpresent,thetraditionalauthenticationtechnologycan’tmeetpeople'sneedsanymore,andthebiometricidentificationtechnologyhasbecomethefirstchoiceinauthenticationtechnologybecauseofitsuniqueness,non-reproducibility,non-stealingandconvenience.Facerecognitiontechnologyinbiometricrecognitiontechnologyhasuniqueness,betterportability,highersecurityandnon-contactsothatithasbeenappliedine-commerce,finance,nationaldefensesecurityandotherfields.Ithasbecomeahotresearchfieldofbiometricrecognitiontechnology.ThispaperisbasedontheRaspberryPi3B+platform,combinedwiththeopensourcedatabaseOpenCVandPythontocompletethefacerecognitionsystem,andthehardwarepartmainlyincludes:RaspberryPi3B+,FIFOmodeUSBinterfacecamera,PC.TheRaspberryPi3B+platformhasgoodportability,convenientoperationandfastcomputingspeed.Itbecomesthehardwareplatformofchoiceforthistopic.Thesubjectfocusesonfacedetectionandfacerecognitiontechniques.Inthefacedetectionprocess,theAdaBoostalgorithmisused.Inthisalgorithm,theHaareigenvalueisusedtorepresenttheface,andtheintegralgraphcalculationmethodisusedtospeedupthecalculation,improvethedetectionrate,completethefacedetectionandpavethewaytoidentifytheface.Inthefacerecognitionlink,theLBPalgorithmbasedonlocalfeaturevalueextractionisadopted,whichhasthecharacteristicsoffastcalculationspeedandgoodrecognitioneffect.Thistopicisbasedontheraspberrypie3B+platform,usingOpenCVopensourcevisualdatabase,realizesfacedetection,establishesfacedatabase,completesfacerecognitionfunction.Aftertesting,thesystemcancompletefacedetectionandrecognitionwell,andhasgooddetectionandrecognitioneffect.Keywords:Facerecognition;Facedetection;RaspberryPi;OpenCV;AdaBoost;LBP目录TOC\o"1-3"\h\u242341绪论 182191.1人脸识别的时代背景与意义 1171601.1.1人脸识别的优点和不足 1113191.1.2人脸识别的应用 291441.2国内外研究现状及发展趋势 3269351.3本课题的主要框架与内容 613192人脸识别关键技术及OpenCV简介 7232342.1人脸识别算法原理 7208932.1.1图像采集及预处理 8271922.1.2人脸检测 8154382.1.3人脸识别特征值提取 8307312.1.4人脸图像匹配与识别过程 8240082.2系统采用的关键算法 853512.2.1人脸检测算法 8237962.2.2人脸识别算法 1723642.3OpenCV 19207463系统硬件总体框架 20178863.1硬件总体框架 20112953.2树莓派版本选择 21283713.2.1树莓派版本对比与选择 21151673.2.2树莓派3B+ 21311273.3树莓派系统安装与环境配置 24287143.3.1Raspbian操作系统 24251683.3.2树莓派系统安装与环境配置 2526084软件系统设计 30224724.1软件层框架 3078774.2OpenCV在树莓派上的安装 31317924.3本系统的图像预处理 31183604.3.1图像灰度化处理 3222914.3.2中值滤波处理 33113254.3.3图像几何归一化处理 34220474.4本系统的人脸检测 358064.4.1级联分类器CascadeClassifier 3526164.4.2rectangle函数 36245744.5本系统的人脸识别 3675304.5.1人脸库建立 36271074.5.2人脸识别 38295515系统测试与调试 40210785.1人脸检测测试与调试 40106755.2人脸识别测试与调试 42213335.3系统测评 43254596总结与展望 44305876.1总结 44276246.2展望 4417410参考文献 451728致谢 46吉林工商学院本科毕业论文PAGEPAGE451绪论1.1人脸识别的时代背景与意义随着大数据和人工智能时代的到来,现如今,对于金融活动、安全检查、国家安全等领域的身份检验技术要求越来越高,显然,传统的身份检验手段(如驾驶证、ID卡、钥匙账号密码等)存在易于丢失、遗忘、不便于携带、容易被破译和伪造等诸多问题,而不能够很好地满足人们对于信息安全、金融安全和身份确认等方面的需求。例如,个人因银行卡号密码泄露而被不法之徒窃取资金。人们急需一种又安全可靠又方便快捷的身份验证手段,恰好此时,基于生物特征信息的识别手段逐渐走进我们的视野当中,其迅速发展起来,并成功应用于人们的社会实践活动当中。生物识别技术是一种高效的身份确认方式,其主要运用了计算机视觉,图像处理,分类器等来获取人类的生物特征和行为特征,据此来完成个人身份信息确认,生物特征主要包括:虹膜、掌纹和DNA等等,行为特征主要包括声音、笔迹、步态等等。在一般情况下,每个人的生物特征信息都不相同,具有极其高的可靠性,同时,这些生物特征信息不易被盗取、伪造、模仿。因此,生物识别技术可以很好地满足人们关于各个方面的需求,人们对于生物识别技术抱有很大的期望,并大力研究。对于生物识别技术领域,目前已经研究出的生物识别技术,并成功应用于社会实践活动的识别技术主要有人脸识别、指纹识别和虹膜识别。其中,从信息安全的角度来说,人们会在不同的场所留下指纹,并且指纹相对于其他两种特征更容易复制,所以,指纹识别不够安全,不能够很好地适用于国家安全、金融活动等领域,不具备通用性;从识别精度的角度来说,虽然虹膜识别最为精准,但是虹膜识别因其识别采集成本极高,相对于其他两种识别而言,应用范围较窄;从总体上来讲,人脸识别的安全性高、不易被获取、采集成本低、只需一个摄像头,且不容易被破译,所以,人脸识别技术具有巨大的商业价值,拥有重要的研究意义。1.1.1人脸识别的优点和不足与传统的身份验证手段和基于生物特征的识别技术而言,人脸识别技术具有以下优点:(1)低成本。在进行人脸识别过程中,仅需要一台终端和一个摄像头便可完成,不再需要其他设备,且这些设备已推广广泛,使得人脸识别技术具有巨大的商业价值。(2)非接触性。在进行人脸识别的过程中,不需要被测试人接触设备,仅需被摄像头捕捉,安全卫生,且这种方式更容易被用户接受。(3)并发行。在进行人脸识别过程中,一个摄像头便可对多张人脸进行识别,可以更加高效率高速度的进行身份检验。该功能可以简化通关口岸的检验流程,缩短检验时间。(4)隐蔽性。在进行人脸识别过程中,并不需要用户积极配合或强制配合,可以在用户没有察觉的情况下获取其人脸,并确认身份。该性质使得人脸识别可应用于国家国防安全、刑事案件、罪犯抓捕活动等等。(5)便携性。人脸识别不需要用户携带任何证明身份的物件,仅需本人到达现场,便可进行身份信息检验。与人脸识别的优点相对,人脸识别同样也存在一些缺陷。第一,人脸并不是一成不变的,它会随着时间流动和面部肌肉的运动发生变化,尽管这些变化不是一日而成,也不是巨大的变化,但是这些变化会影响人脸识别的精度。第二,尽管世界上每个人的人脸是独一无二的,但是依然存在像双胞胎,三胞胎这种面部极其相似的特殊存在,这使得实现完全精准的人脸识别需要更进一步的研究。第三,在图像获取过程中,由于各种因素使得在计算机中的人脸与现实中的人脸存在微小而有不可避免的误差,这会影响人脸识别的精度。以上这些是人脸识别主要的缺陷与不足,这也让如何在采集图像条件比较恶劣的条件下和在人脸会产生细微变化的情况下依旧可以有效地进行人脸识别,成为了人脸识别技术的奋斗目标和科研方向。1.1.2人脸识别的应用人脸识别现已成功应用于各大领域。如下图1-1所示。图1-1人脸识别典型应用图1-1人脸识别典型应用目前,人脸识别已成功运用于各大领域,其中有各个领域都拥有经典实例,以下列举三个经典实例。(1)出入境管理。在需要检查身份证(或驾照、护照)时,会消耗大量的人力物力来判别身份是否相吻合,而采用人脸识别技术可以对证件进行有效的识别,可以高效率的减少人力物力的消耗。在深圳市有着国内出入境游客最多的口岸(罗湖口岸),该口岸就采用了“深圳——香港生物护照旅客快速通关系统”,该系统是通过人脸识别来,检验旅客的有效证件,判别是否为本人,既保证了出入境的安全又加快了通关速度,还极大的减少了人力物力的消耗。(2)身份确认。对于安全度要求极高的单位,如军队、医院、公安机关等等,将运用人脸识别进行安全检验,单位人员需要进行人脸识别,在确认身份后,才可进入单位机构。在长沙交警支队处罚大厅便有着闸机式人证合一核查系统,该系统便是运用人脸识别,进行身份确认。(3)视频监控。在机场,火车站,演唱会现场等人流量较大的公共场合,通过场地内的摄像头,抓捕现场信息,利用人脸识别技术的隐蔽性优点,寻找走势儿童、监查可疑人物、追踪在逃嫌疑犯等事件上具有巨大的优势,在维护和保障公共安全上有着良好的效益。2018年9月28日,张学友演唱会上,石家庄警方成功通过视频监控的人脸识别系统锁定三名在逃人员,并成功抓获。1.2国内外研究现状及发展趋势在19世纪末,法国Galton提出了能够扫描人脸,进行人物识别,并发表了相应的文章,这就是人脸识别技术的起源。随后在1990年之后的几十年中,人脸识别技术开始在许多国家,地区都得到了重视,并投入大量的人力物力扶持科研人员的研究,推动该技术发展。在此期间,大量的高等院校以及科研机构将研究方向转移到人脸识别技术上,如国外的东京大学,MIT媒体实验室,耶鲁大学。这些机构使人脸识别技术向前前进了一大步,取得了伟大的成就,并做出来巨大的贡献。现在,根据人脸识别各个阶段的技术特点,将人脸识别技术发展分为三个主要阶段,以下对每个阶段进行详细的描述和总结。(1)第一阶段,时间段为1964年到1990年,这个阶段的研究是人脸识别技术的基础研究。因为这个时间段为人脸识别的初始阶段,存在将人脸识别当成一个单一的模式识别问题进行研究的现象,科学家们提出了将问题的解决方案着手于眼到面部剪影曲线的结构特征方面的研究。这一时间段的人脸识别主要采用了基于人脸几何特征的方法,该方法对图片图像质量有着较高要求,并且获取的图像点少,使得该方法普遍适用性低下。总之,因为这是人脸识别研究阶段的初始阶段,所以并没有取得值得振奋的成果,也未能将人脸识别技术应用于真正的社会实践生产活动中。(2)第二阶段,时间段为1991到1997年,这个段阶是人脸识别技术的高峰期,各个国家,地区的人力物力投入到该领域中,涌现了许多经典的著名的人脸识别方法,取得了意义非凡的成果,并且产生了许多商业性质的人脸验证系统。其中,“EigenFace”方法同样是这个阶段提出的,它是所有著名的人脸识别算法的基准算法,几乎现存的人脸识别算法都是从这个算法衍生出来的产物。另外,归一化的协相关量算法同样也是该阶段的研究人员提出,该算法与“EigenFace”方法一样,对人脸识别技术具有重要的意义。另外,Fisherface方法是一种典型的人脸识别算法,该算法与其他算法不一样的是,其首先对人脸进行降维操作,降维所采用的算法是主成分分析法。接着对降维后的图像进行线性判别分析方法进而对主成分进行处理,处理的主要任务是期望获取在类内距离较小和在类间距离较大。该方法同样是人脸识别算法的重要算法,具有不少人脸识别算法是以该算法为基础,如子空间判别模式,零空间法,直接的LDA判别算法。弹性图匹配技术是一种采用属性图来描述人脸的技术,这种技术利用一种高效的搜索方式来确定图像中的人脸特征,便可得到属性图。该技术不仅考虑了全局的结构特征,还加入了对于局部特征的描述,使得最终的属性图对人脸描述相对精度无误。在弹性图匹配技术的问世后,受其影响,一种局部特征分析技术就此出世。该技术利用低维度描述对象的手段进行局部特征描述,并且,它还能够兼顾全局与局部的结构关系,这也让利用该技术的系统拥有良好的辨别能力。在商业领域中,FaceIt系统使用了这种局部特征分析技术,是一个该算法的成功典范。这一时间段的人脸识别算法主要包括基于模板匹配和基于结构特征两种方法。麻省理工学院的科研人员通过一系列的研究发现,基于模板匹配方法效率优于基于结构特征方法的结论。对于人脸识别发展而言,该结论具有重大的指导意义,它为人脸识别的研究方向指明了明确的道路,它让基于结构特征的进行识别的算法被放弃,使得基于模式识别的算法成为人脸识别技术的基础。此外,在1994年,FERET项目启动,它是由美国国防部资助的一个开发效率极高的人脸识别技术项目,该项目得到的成果现已经用于美国各个部门的情报收集。该项目对于人脸识别技术的贡献主要有两个方面:第一,它对当时所有的人脸识别算法进行了实现,并完成性能测试,这使得人脸识别技术的研究速度得到很大的提升,并使人脸识别系统往实用性方向发展。第二,它建立了用来收集人脸图像信息的数据库和开发新的人脸识别算法,这不仅使得人脸识别技术的开发更加完整,同时,还找到了该技术下一步需要改进和发展的方向。总之,这一阶段的人脸识别技术有了实质性的突破与发展,产生了很多著名且可用于实际生活中的人脸识别算法,这使得人脸识别商业化成为了现实。但是这一阶段的算法都是基于人脸识别系统在一个相对理想的环境中,如合适的光照,无遮挡物,理想姿态,但是这一阶段仍然无法解决光照过强过弱,视角等问题。(3)第三阶段,这一时间段为1998年至今日,这个阶段是科研人员不再研究发展新的人脸识别算法,而是提高原有人脸识别算法的精度和实用性。基于一系列人脸识别算法的评测结果,科学家们了解到,对人脸识别技术有着巨大干扰的因素有很多,主要有:光照,姿势以及不可避免的影响图像精度的因素等。这些因素造成的问题成为了这个时期人脸识别研究主要攻克的方向。最近几年,机器学习作为一个新兴的研究课题已经应用于各个研究领域当中,人脸识别问题属于其分类问题,在这个时间段中,人脸识别同样加入了机器学习的思想和算法,如SVM算法,其是最早应用于人脸识别中的机器学习算法。还有基于3D变形的识别模式是一种多光照多姿态人脸识别技术,其核心技术是在合成分析过程中,使用了图像模拟方法对一系列参数进行建模的图像处理方式,还在人脸建模方面,使用了3D建模和纹理数据统计模型的方法,使得在多光照多姿态情况下,人脸的一些属性能与外界因素区分开来,强化了识别强度,经实验证明,该方法比其他同类型算法更加高效率。在这个时间段中,有一个意义非凡且贡献巨大的算法,那便是基于AdaBoost算法和简单矩阵特征高度结合的实时人脸检测系统,其中,这种矩阵特征非常简单,不但可以快速计算,还可以有效地表示人脸特征。经实验验证,这种人脸识别系统的检验速度比基于其他任意算法的系统都要快得多。在过去的人脸检测过程中,几乎之前所有的算法都是采用强分类器的学习方式,然该系统将大量的弱分类器进行分类。在检测过程中,同时也加入了新的级联技术,这让人脸检测速度得到巨大的提升。该系统为了前面的人脸检测提供了巨大的帮助,同时还为后面的人脸识别提供了快速识别的基础。美国国防部在这个时间段中还启动了另一个重要项目,FaceRecognitionVendorTest,该项目不但对目前为止现存的人脸识别技术进行了详细的比较,而且,指出了目前技术的优缺点,同时指明了需要改进的方向,为人脸识别的研究发展做出来巨大的贡献。该项目同时也对大规模人脸识别所存在的问题(如时间跨度,姿态,光照等)做出了指导性的意见,指明了前进方向。总而言之,这个时间段中,人脸识别系统的精度得到了飞跃性的提高。目前,人脸识别技术研究方向主要是在图片图像的一些外界条件,如光照,姿态,遮挡物等等,除此之外,讲非线性建模方法,3D建模,机器学习等新的思想与技术应用于人脸识别领域中,这也是未来人脸识别的发展方向。然而,人脸识别技术在国内开始于20世纪90年代,晚了大约有几十年,但是人脸识别技术在国内进展神速,其中,国内众多机构贡献巨大,如清华大学,浙江大学,香港中文大学等高校以及中国科学院自动化研究所等科研机构。清华大学的科研人员在基于K-L变换的人脸识别算法的基础上,对特征脸方法展开了更深入和创造性的研究,如张长水,彭辉等科学家提出了使用一种全新的矩阵,类间散步矩阵,接着采用K-L变换对图片图像进行降维,以便提取人脸图像的代数特征。该算法的提升可以在保证识别率不变的情况下,极大缩短运算时间。在南京理工大学中,模式识别与智能系统研究人员杨静宇提出了基于奇异值分解的人脸识别研究。该算法的主要流程是:(1)进行小波变换的图像处理方法;(2)根据不同的频带将图像分割成N个子空间,然后分别提取其奇异值;(3)使用比较分类法将其分类,接着,对分类结果采用群体决策法进行有选择性的结合。香港中文大学研发了一种“GAUSSIANFACE高斯脸”的人脸识别技术,该技术使得人脸识别系统的识别率达到了98.52%。还有许多科研人员对国内人脸识别技术做出了伟大的贡献,如陈熙霖,山世光等人在人脸特征方法以及其他特征识方法,采用了深度学习法进行了比较深入的研究与探索。周宏祥,张辉等人在对人脸特征提取和识别过程中,利用了分析神经网络的方法,进行人脸识别,这使得人脸识别系统能够存储大量的人脸样本,和人脸识别运算速度的大幅度提升,乃至人脸识别的快速实现。目前,国内外有着大量关于智能识别技术的文献,同时,也指引人脸识别的前进方向,引发了越来越多的科研人员对智能识别领域的深入研究,并将许多先进的思想融入与实际应用当中,如国防,交通,金融活动等等。1.3本课题的主要框架与内容该系统是基于树莓派3B+平台,结合开源数据库OpenCV和Python高级编程语言完成的人脸识别系统。首先,研究了人脸识别技术的相关概念,技术原理。然后,利用OpenCV提供的级联分类器进行人脸检测;接着,建立人脸库,将人脸的信息保存在树莓派SD卡中;其次,利用OpenCV提供的LBP识别方法实现了人脸识别;最后,对整个系统进行测试与调试。以下是各个章节的主要内容:第一章绪论。该章节主要介绍了人脸识别的时代背景与意义,以及国内外的研究现状。同时,对本论文的主要内容和框架进行概括和简单的介绍。第二章人脸识别算法基本原理及OpenCV简介。该章节简单地介绍了人脸识别算法的基本原理和视觉开源库OpenCV。第三章系统硬件总体框架。首先,简单地介绍了树莓派。其次,介绍了树莓派的选择过程,并介绍树莓派3B+的内部结构以及树莓派系统的安装和环境配置。第四章软件系统设计。介绍了本系统软件层次的框架,OpenCV的安装,并介绍了人脸检测的实现过程,如何建立人脸库的过程,完成人脸识别。第五章系统测试与调试。对本课题的人脸识别系统进行测试与调试的结果说明。第六章总结与展望。对人脸识别系统进行全方面的总结,并展望本系统的前进方向。2人脸识别关键技术及OpenCV简介现如今,人脸识别技术已经相对成熟,涌现出一批识别率极度高的人脸识别算法,现已成功应用于国防、金融、安检等各大领域,现在我们来讲述人脸识别的算法流程以及简单介绍本项目实现的核心算法。2.1人脸识别算法原理当前,尽管现有的各大识别算法不同,但是其基本流程相对一致。其主要的识别步骤有图像采集及图像预处理,人脸检测,人脸图像特征值提取和人脸图像匹配与识别这四大部分过程。人脸识别原理图如下图2-1。图2-1人脸识别原理图2.1.1图像采集及预处理系统的图像采集就是通过图片采集设备把包含人脸和不包含人脸的图像采集到计算机中,并对其加工合成等操作,用以人脸识别。采集设备一般包括:自然光摄像头、监控摄像头、3D摄像头等等。采集设备的采集方式、输出方式、背景光对采集设备的干扰这些因素都会给人脸识别系统带来一定的影响。获取的图片需要经过一些处理,使其能够满足后面系统的要求,这便就是图像预处理,即对图像进行处理,最终服务于后续的其他环节的过程。系统中图像预处理可以分为两个阶段,在系统早期获取图像过程中,由于受到各种现实条件的影响,干扰和限制,所以必须在早期阶段对其进行灰度矫正,噪声过滤,归一化处理等图像预处理系统;在系统后期处理照片中,需要在发现人脸的区域中框选出人脸,眼睛等部分,经过处理后,显示在屏幕上。2.1.2人脸检测在图片/视屏中检查是否存在人脸,并做出判断回应,即人脸检测。这一步骤在实际应用是人脸识别的基础,为人脸识别服务,即判断有无人脸,和标记出人脸的位置和大小。人脸图像中包含的检测模式十分丰富,如直方图特征、颜色特征、模板特征以及Haar特征等。人脸检测就是利用这些特征信息实现人脸检测,其中,人脸上有一些共性特征,主要有:几何特征、肤色特征、运动特征等等。目前,常见且实用的人脸检测方法有:基于先验知识的算法、基于人脸模板匹配的算法、基于人脸特征的算法。2.1.3人脸识别特征值提取在人脸检测中,发现了人脸,随后将该人脸的特征数据采集下来的过程,就是人脸识别特征值提取过程。人脸某些特征的信息采集实际上是人脸建模的过程。目前,可用于人脸识别系统的特征值一般分为视觉特征值、像素统计特征值、人脸图像变换系数特征等。2.1.4人脸图像匹配与识别过程根据提取出来的特征值,与人脸库中的数据进行比对,最后选出对应人脸的过程,就是人脸识别的最终阶段,即判断图片图像中的人脸是否与人脸库中的人脸一致。经过科研人员们的不断努力,人脸识别技术已经相当成熟,已经有几种非常成熟的人脸识别方法:基于几何特征识别法、基于人工神经网络法、基于LBP法、基于PCA等等。2.2系统采用的关键算法本系统是基于树莓派3B+平台,结合视觉开源库OpenCV,使用Python编程语言实现人脸识别的系统,其中,以AdaBoost算法和Haar-like特征为基础的级联分类器来实现人脸检测,使用LBP算法实现人脸识别。2.2.1人脸检测算法本系统的人脸检测使用了以AdaBoost算法,结合Haar-like特征和积分图计算方法为基础实现的分类器,再串联而成级联分类器,使其能够完成人脸检测任务。(1)AdaBoost算法的背景与发展在1990年,科研人员Schapire提出一种弱学习算法(一种判断算法,判断结果的正确率只有50%,甚至低于50%),并设计出一种类似多项式结合的算法对弱学习算法进行强化,最后,得到了一个具有相对高正确率的强学习算法(一种判断算法,判断结果的正确率大于50%)。随后,由Freund在1991年发表了一种更为高效的Boosting算法。这两种算法便是AdaBoost算法的前身,但是它们都具有一个致命的缺陷,即需要提前知道弱学习算法的最小正确率,这使得Boosting算法无法适用于一些实际情况的使用。随后,Schapire和Freund合作研究了Boosting算法,于1995年提出了经典的AdaBoost算法。这种算法不仅运算速率更快,而且解决了Boosting算法的致命缺陷(不必先知道弱学习算法的先决条件)。AdaBoost算法通过若干次迭代后,自身学会提高弱学习算法的判断正确率,使得系统判断错误率可以达到预期值。在训练样本之前,AdaBoost算法已经不再需要了解该样本的空间分布。第一步,开始进行若干次弱学习之前,给样本空间的每个样本赋予一个权重。第二步,开始若干次弱学习,在每次若学习中,该算法可以自动调节和更新样本空间中的每个样本的权重,通过降低样本空间中正确样本的权重,和增大样本空间中被分类错误的样本的权重,所以,在以后的弱学习中,更加关注分类错误的样本。第三步,在若干次的弱学习后,便可得到较高的分类正确率。科研人员Viola和Jones于2001年,首次提出了将AdaBoost算法应用于人脸检测。首先,利用矩形特征(Haar特征)来描述图像中的人脸;然后,使用一种称为积分图的快速计算方法;其次,采用AdaBoost算法对这些矩阵特征进行训练,随后得到一组弱分类器,通过串联的方式,串联多个弱分类器构成一个强分类器;最后,通过级联的方式将若干个强分类器组合成一个更为复杂更为有效的级联分类器。采用级联分类器,可以快速排除图片中无关的背景信息,从而可以对图像中的人脸区域进行更多次扫描,由此减少检测时间,获得较高较快的人脸检测效率。但是一开始的矩阵特征不足以描述一些特殊的人脸特征,误检率相对较高,因此,很多科研人员在AdaBoost算法中投入越来越多的精力与时间,使其能够完美应用于人脸检测领域中。RainerLienhart于2003年拓展了矩阵特征,通过改善算法的缺陷,使得误检率降低了10%。在2007年,Lee等科研人员提出了Ent-Boost算法,使得运用该算法的强分类器具有更加强大的分类效果。AdaBoost算法的流程图2-2如下。图2-2AdaBoost算法流程图图2-2AdaBoost算法流程图(2)Haar-like特征在人脸检测中基于AdaBoost算法的级联分类器中的每一个弱分类器中,只能含有一种特征,即矩形特征(Haar-like特征),下面详细介绍Haar-like特征。最早的Haar特征是由Papageorigiou等人提出,并应用于人脸检测。Papageorigiou等人在人脸检测问题和正面人脸的研究领域中,采用了Haar小波基函数,而小波变换可以得到图像中某类事物的显著特征,为了取得更好的空间分辨力,他们使用了三种类型的特征,分别是水平特征、垂直特征、对角特征,可以用这些特征来区分人脸与非人脸。如三种特征下图2-3所示。HorizontalVerticalCornet图2-3典型Haar特征类型在1998年,Viola提出了一种新的矩形滤波器,还在原有的Haar滤波器中增加了一个滤波器,成功拓展了Haar特征,即Haarl-like特征,如图2-4所示。垂直特征水平特征对角特征线性特征垂直特征水平特征对角特征线性特征图2-4四种矩形特征上述特征可以简单地描述人脸中的一些特征,比如,双眼灰度比鼻梁上侧的灰度值相差甚远(这是人脸中的一个重要特征的矩形特征),嘴唇的颜色要比嘴巴周围的区域要深得多,眼睛要比眼睛周围的灰色程度更高等等(如下图2-5所示)。此时,Haar-like只能对正向人脸的特征进行检测,不具备推广性。为了提高人脸检测系统的应用范围,RainerLienhart在原有的Haar-like特征上引入了45度旋转矩阵特性,使得更多的Haar矩阵特征可以作为人脸检测分类的依据,其中这些依据包括了边缘特征,线性特征,点特征,对角特征等等(如下图2-6所示)。图2-5人脸中显著的Haar特征图2-5人脸中显著的Haar特征边缘特征边缘特征线性特征点特征对角线特征图2-6Haar-like特征通过图片中白色区域的像素和与黑色区域的像素和的差值。(3)积分图计算方法在上述的4.3.2中,我们了解到采用Haar-like特征值便可用来检测人脸,但是,假设一张大小为24x24的图片中,其任意组成矩形区域就将近有16万种组合,即表示有16万种特征;而在30x30的图片种,就有将近42万个矩阵区域,其中的计算量是十分巨大的。因此,采用“积分图”计算方法来快速计算Haar-like特征值。积分图计算方法就像是一个计算加速器,只需要遍历一次图像,就能够计算出图像中全部的像素和,这恰好能够满足并可以加快Haar-like的计算,加快了人脸检测系统的检测效率。现在开始介绍积分图计算方法,如图2-7中A点表示为积分图中许多小黑点标记形成的方框区域,就是左上方的所有区域的像素和。图2-7积分示意图这一块区域用公式表示为:ii(x,y)=x'<X,y'其中,ii(x,y)为原始图像中A(x,y)的积分图像值,i(x',y')是灰度图在点(xs(x,y)=s(x,y-1)+i(x,y) ii(x,y)=ii(x-其中,s(x,y)是点(x,y)在y轴上的全部像素点的和,即列方向的积分和。我们使用上述的三个公式,可以求出某个矩形区域的积分图,再通过积分图来求特征值。具体过程如下:首先,使用积分图计算矩形区域的像素值,如求下图中D区域的像素值。图2-8求矩形区域像素和图2-8求矩形区域像素和图2.8中,使用ii(1),ii(2),ii(3),ii(4)分别表示A矩阵区域,A+B矩阵区域,A+C矩阵区域和A+B+C+D矩阵区域,下面是区域D的像素计算公式:区域D的像素值=ii了解如何求某区域矩阵像素值的计算方法后,我们可以通过计算相邻矩阵区域之间的积分图差值,即得到Haar-like特征。计算下图A,B区域之间的差值,即计算两个相邻黑白矩形区域的差值。图2-9求黑白矩形区域A,B的差值图2-9求黑白矩形区域A,B的差值其中,A矩形区域,B矩形区域的像素计算方法如公式:区域A的像素值Sa=ii(5)+ii(1)-ii(2)区域B的像素值Sb=ii(6)+ii(2)-ii(3)可得A区域与B区域的像素值之差,如下公式:区域A与B的像素差S=Sa-Sb结合上述,矩形特征(Haar-like特征)可以通过积分图一次遍历便可得到所有区域的Haar-like特征值。而且这种计算方式加快了人脸检测的运算速率,同时加快了目标检测的速度。(4)分类器分类器分为弱分类器和强分类器,其中,强分类器是由多个弱分类器组合而成的。<1>弱分类器一个分类结果比随机猜测结果好的分类器,便是弱分类器。在运用AdaBoost算法的人脸检测分类器中,采用了Haar-like特征值来构造弱分类器。图像中的每一个矩形特征对应一个弱分类器,我们通过对弱分类器进行训练来确定一个最佳阈值,使得分类效果达到最佳。从流程图2-10可以看出,AdaBoost算法就是在每一次循环中得到一个弱分类器,该分类器是一个拥有最小错误率的,随后更新样本权重,降低正确分类的权重,升高分类错误的样本的权重,使得分类错误的样本在下一次循环中(训练中)得到更多的重视。最后,将挑选出来的t个弱分类器按照权重新线性组合成强分类器。在1996年,Freund和Schapire做出实验证明:随着弱分类器数量的增加,强分类器对样本进行分类时的错误率也随之降低。图2-10弱分类器训练流程图图2-10弱分类器训练流程图<2>强分类器在AdaBoost算法中,将一系列的弱分类器通过加权求和的方式组合成强分类器,来降低算法的误检测率,满足实际系统的检测标准。理论证明:随着数量T的增大,训练误差将会逐步降低,根据极限的思想,当T无限趋近于无穷大时,训练误差等于零。图2-11强分类器构成图2-11强分类器构成从上述流程中,我们能够得到一个强分类器,当没有满足第三步时,我们只需要通过增加弱分类器的个数来使得强分类器的误检率到达要求(误检率低于最大误检率阈值)。而且理论证明:系统误检率会随着训练次数增加而减少,因此,我们通过上述流程可以得到一个强分类器。(5)级联分类器为了加强人脸检测率,加快检测速度,引入级联分类器的思想,下图2-12所示。级联分类器的结构是由粗到细,通过若干个强分类器串联成的级联分类器,然后在每个分类器都调整其阈值,让人脸样本能够全部通过(T方向),而对于人脸部分能通过的便十分稀少。在前面的几个强分类器便可排除大部分非人脸的负样本,并且计算速度快,原因是前面几层所运用的Haar-like特征少;随着层数的深入,被淘汰的负样本很多,只剩下几个候选窗口,所以需要计算的窗口也很少,从而提高了计算速率。图2-12级联分类器构成图图2-12级联分类器构成图2.2.2人脸识别算法人脸识别采用LBP算法进行实现,这种算法具有很高的运算速率,能够保证系统的实时性。(1)LBP算法介绍随着越来越多的人脸识别算法的提出,T.Ojala于1996年提出了基于局部二进制特征模式的算法,即最基础的LBP算法。该算法可以很好地记录图像中的局部纹理特征,且该特征记录方式对光照不敏感,在2004年该算法正式登陆人脸识别应用领域。最基础的LBP算法在像素分布层次的详细描述如下图:图2-13基本LBP算法描述图2-13基本LBP算法描述在图2-13中,基础LBP算法是定义在一个3*3的矩形区域内完成的,将中心像素点的像素值与周围像素点的像素值作比较,大于中心点时的周围像素点记为1,小于的记为0,便可以等到一个用二进制表示的结果。如图4-13中,经过LBP处理后,形成的二进制标记为01100111,即为LBP码,表示为图像的纹理特性,下列用公式求图像中的LBP码:LBP(Xo,Yo)=其中S(X)为符号函数,记为: (2-9)以上便是最基础的LBP算法描述,但是它只能对半径固定的区域进行描述,不能适应人脸识别系统的实际要求(半径不同大小时的不同纹理)。Ojala等科研人员针对该问题,将LBP算法进行了拓展,将LBP在像素分布层替换成圆形领域,形成了改进型的LBP算法。改进型LBP把3*3的矩阵空间替换成不限制半径大小的圆形区域,在该区域中可以对任意个点进行采集和编码,克服了原先的不足之处。如下图所示:图2-14圆形LBP特征图2-14圆形LBP特征在图4-14中,圆形LBP特征的采样点(Xp,Yp)由如下公式计算: (2-10) (2-11)其中,(Xc,Yc)为中心点的坐标,p表示第个采样点,R为采样半径,P为采样数目。上述公式求出来后不一定是整数,我们需要使用双线性插值的方法,将其转化为整数: (2-12)其效果如图所示:图2-15LBP特征图图2-15LBP特征图<2>基于LBP算法的人脸识别使用LBP算法进行人脸识别时,我们可以先将图像切割成若干个区域,然后对每个子区域的LBP特征建立直方图,最后将所有子直方图合并成一个整体直方图,最后使用相似性度量函数比较相似性,得出是否为库中人脸。LBP算法的具体流程如下:(1)对样本集进行训练,且进行预处理(2)将图像进行分块处理,分块量需要适当,但分块越多计算量越大,精度越高,运算速率越慢。(3)图像LBP特征值提取。根据上述的圆形LBP算法求出LBP特征值(4)进行人脸匹配。利用卡方概率统计的方式与训练完毕的人脸库进行比较,匹配出人脸。2.3OpenCVOpenCV(英语全程为OpensourceComputerVisionLibrary)是一个开源计算机视觉库,其主要采用C和C++编写,具有良好的跨平台性,可以在主流的操作系统上运行,如Windows,Linux,MacOSX系统。该库提供的函数都经过算法优化,运算速度快,适用于医学图像处理,安防,用户界面,三维成像等等领域,超过500个接口函数。这也意味着,(1)不管是科学研究,还是商业应用,都可以利用它来做开发;(2)所有API函数的源代码都是公开的,我们可以看见其内部实现;(3)OpenCV是一个开放代码的工具库,可以修改库中函数,在原有基础上形成属于自己的特定功能的API函数。作为一个开源视觉库,一般都内含各种图像处理算法,具有以下全部功能:(1)数据获取,获取图像或视频;(2)预处理,一般为去除或者降低噪声,灰度化,模糊化,锐化,开闭等等;(3)特征提取,即根据某一特征将若干类别区分开来;(4)特征选择,选择适合需求的特征对事物进行区分;(5)分类器设计与训练,根据特征值,对某一数据集合开始处理,以提高正确率;(6)分类判别,得出结论。OpenCV在这六个部分都提供了API,这恰好与人脸识别的特征值算法契合,所以我们选择OpenCV来处理人脸图像,人脸检测及人脸识别。3系统硬件总体框架3.1硬件总体框架了解完人脸识别的核心算法后,开始介绍本项目中人脸识别系统。该系统是基于树莓派3B+平台,结合开源数据库OpenCV和Python高级编程语言完成的人脸识别系统。其硬件部分主要有:树莓派3B+,FIFO模式的USB接口摄像头,PC控制端。硬件设计总体框架如图3-1所示。图3-1系统硬件设计图3-1系统硬件设计其中,树莓派3B+连接上路由器提供的局域网,来获取树莓派的地址,用以建立PC端对树莓派3B+的远程访问;将摄像头直接插入树莓派提供的USB接口即可;数据的传输在硬件上是通过TTL(逻辑门电路)进行传输的。TTL电平信号可以用来表示二进制的数据,当电平为5V时,即传输的是逻辑“1”;当电平为0V时,则传输的是逻辑“0”,这就完成了对二进制的数据的表示,其常用于计算机与设备内部各部分之间的通信。随后,通过打开PuTTY软件,选择Serial模式,设置波特率,如下图3-2所示。图3-2PuTTY设置图3-2PuTTY设置同时,我们通过PC端对树莓派进行远程访问,详细见下一节3.2中,系统安装与环境配置。首先,打开树莓派的SSH(专为远程登录会话和其他网络服务提供安全性的协议),VNC(远程控制台)功能,在PuTTY开启的终端中,选择wifi信号,再获取树莓派的IP地址,随后启动VNC软件,进行远程访问。3.2树莓派版本选择英国慈善RaspberryPi基金会想为发展中国家提供一款超级低价位的一个基本的计算机编程氛围,研发了一款只有ID卡那么大的,使用Linux系统的个人计算机,即RaspberryPi。目前,微软发布的Windows10LoT系统已经支持在树莓派上运行,所以,在PaspberryPi上不但可以运行Linux,也可以运行Windows系统。此外,树莓派开发环境已经形成了良好的生态系统,通过安装各种配件,可以将其应用于众多领域,如游戏,智能家居控制系统,机器人实验室等等。3.2.1树莓派版本对比与选择按照版本的不同,树莓派可以分为A和B两大版本。以下分别从它们之间的共性与差异来选择系统开发的树莓派版本的选择。(1)共性。这两大版本都配备了ARM架构的处理器,采用不同于其他开发板的数据存储方式,SD卡存储数据。它们都配备了USB,HDMI,以太网等接口,同时,可以将鼠标,键盘,显示屏等通过相应的接口与树莓派连接,成为树莓派的I/O设备。而且,树莓派A,B版本可以完成视屏和音频的输出,因为这两种版本树莓派还具备GPIO口,即通用可编程输入输出口,这是一般PC机上不会存在的接口。(2)差异。A型:单USB接口,无网络接口,功耗2.5W,500mA,内存只有256M.B型:双USB接口,支持有线网络,功耗3.5,700mA。按照版本的不难发现,A型树莓派是廉价版本的B型树莓,其功能强度和运算速度都明显不如B型树莓派,所以,派我们选择B型树莓派来完成本论文的人脸识别系统。而B型树莓派中还细分为,B型,B+型,2代B型,3代B型,3代B+型。其中,3B+型比其他型号的版本搭载了ARMCortex-A53CPU,内存提供到1G,更多USB接口,且对过流保护和热插拔做了适当的改良,采用MicroSD插口代替了原始的SD插口,更低的功耗等优点。综上所述,树莓派3B+版本采用Liunx系统,内存达1G,运算速度快,且功能强大,能够满足人脸识别系统对于运算速率,内存,操作系统的要求,所以本论文选择树莓派3B+作为人脸识别系统=的开发平台。3.2.2树莓派3B+当我们选择了树莓派3B+作为人脸识别系统的平台时,我们开始正式了解树莓派3B+。以下是树莓派实物图,如图3-3所示。树莓派3B+的SOC是BroadcomBCM2837(B0),CPU是ARMCortex-A531.4GHz64-bitquad-coreARMv8CPU,内存有1G,具有众多外接管脚。图3-3树莓派3B+实物图图3-3树莓派3B+实物图当我们看过实物图后,我们开始了解树莓派3B+树莓派的电路结构。我们从电源开始说起,以下是树莓派3B+的电源电路图和电路状态图。图3-4树莓派3B+电源图图3-4树莓派3B+电源图图3-5树莓派3B+状态灯电路图图3-5树莓派3B+状态灯电路图其中,MF-MSMF250/X是一个自恢复保险丝,该保险丝最大耐压为16V,持续通过电流高达2.5A,峰值电流为5A。当树莓派3B+启动电源时,亮起红色指示灯,表明树莓派已经上电,当树莓派3B+系统启动时,亮起绿色指示灯,表明树莓派系统正在启动中或正在运行中。树莓派3B+的CPU为ARMCortex-A53CPU,其封装在BCM2837中,其部分电路图如下:图3-6BCM2837模块电路图树莓派3B+可以外接接口,其电路图如下所示:图3-7外接接口电路图图3-7外接接口电路图其中,外界接口有两个5V接口,两个3.3V接口,8个GND接口,一个UART总线,一个SPI总线,一个I2C总线,二十六个GPIO接口。当GPIO连接到超过3.3V的电压上,可能烧毁GPIO模块。除此之外,树莓派3B+还提供一些接口,如HDMI接口,CAMERA接口,A/V接口等。以下是它们的电路图。图3-8各个外接模块的接口电路图图3-8各个外接模块的接口电路图3.3树莓派系统安装与环境配置本系统使用的操作系统是由Raspberry官网提供的RaspbianLinux,通过PC端中的Etcher软件将树莓派操作系统镜像转入SD卡中,然后在SD卡中修改系统配置文件,最后,通过PuTTY软件实现PC端对树莓派的访问,随后,采用VNC软件形成树莓派系统的图形界面,对其加以访问控制。3.3.1Raspbian操作系统基于Debian(一个致力于创建自由操作系统的合作组织及其作品,其做多项目都是以Linux为宏内核)的Raspbian是针对树莓派的硬件,内核和应用程序做出了全新的深度的优化,使其适用于基于ARM硬件框架的PaspberryPi操作系统。Debian从7.0/wheezy版本后,开始引入具有硬件浮点加速的ARM架构,使得树莓派的运算速率有着巨大的提升。同时,Raspbian具有单独的软件资源,有着12000个软件包,大部分都内置了C和Python编译器,为树莓派提供一个资源丰富的稳定的快速的操作系统。图3-9树莓派启动系统流程图3-9树莓派启动系统流程基于树莓派平台上的Raspbian操作系统与基于其他嵌入式平台的操作系统的启动方式不同。传统的嵌入式平台在ARM上电后,从位于SD卡的0x000地址的应用程序开始或调用NAND,接着,BootLodaer的第一阶段进行CPU配置,将自身的代码复制到ARM(CPU)运行,最后条用内核Kernel。而树莓派的启动是CPU与GPU结合的模式。具体启动流程如上图。3.3.2树莓派系统安装与环境配置了解了树莓派的Raspbian操作系统后,现在我们开始介绍树莓派系统安装与环境配置。(1)安装系统本课题是在Windows系统下,使用Etcher工具软件,讲Raspbian系统烧录SD卡中。树莓派官网提供了三种版本的镜像文件,下载Raspbian镜像文件,解压后得到.img文件和.shal文件,它们分别是系统镜像和校验文件。具体安装过程如下:<1>打开Etcher.exe,然后选择镜像文件。如图3-10所示图3-10选择镜像文件图3-10选择镜像文件<2>选择打开后,点击Flash按钮,开始烧录系统。如图3-11所示。图3-11树莓派系统烧录图3-11树莓派系统烧录

<3>等待完成烧录。修改树莓派串口配置文件,打开config.txt文件,在尾部添加以下内容:enablie_uart=1。如图3-12所示图3-12串口环境配置图3-12串口环境配置(2)系统环境配置<1>打开Putty软件,在Putty中选择串口模式,根据设备管理器显示,选择端口号,并设置速度,点击确认。如图3-13所示图3-13使用PuTTY连接树莓派图3-13使用PuTTY连接树莓派<2>树莓派上电后,输入账号密码,开启树莓派系统。如图3-14所示。图3-14树莓派系统启动图3-14树莓派系统启动<3>开始配置系统初始化环境,主要工作内容有修改密码,选择wifi,打开ssh和vnc服务。现在开始选择wifi。输入指令:$sudoraspi-config,进入树莓派环境配置工具。如图3-15所示。图3-15树莓派环境配置图3-15树莓派环境配置<4>第一,选择第一项,完成修改密码。第二,选择第二项,进入wifi选择,完成wifi信号选择。第三,选择第五项,开启ssh,vnc服务。随后重启树莓派启动,输入以下指令:$sudoreboot<5>接下来,启动VNC软件,使得PC端成为树莓派的图形界面。具体操作如下:在PuTTY软件中,输入$ifconfig,显示树莓派所连接网络的IP地址。随后,启动VNC软件,根据IP地址登陆树莓派,进入树莓派的图像界面中,如图3-16所示。 这就完成了对树莓派系统安装与环境配置,随后进入第四章,软件系统设计。图3-16树莓派VNC远程控制图3-16树莓派VNC远程控制4软件系统设计4.1软件层框架基于树莓派3B+平台,结合开源数据库OpenCV,并使用Python高级编辑语言的人脸识别系统,其程序流程图,如下图4-1所示。在本章,我们重点介绍了人脸检测环节和人脸识别环节的核心算法。图4-1系统人脸识别流程图根据上面的流程图,我们可以得到人脸识别的详细步骤:1)采集图像,对图像进行预处理,包括去除噪声干扰,灰度化,几何归一化等。使得图像能够满足人脸识别系统对于计算速率,存储空间,人脸检测与识别精度要求。2)在图像中发现人脸,采用了级联分类器,其内部是由Haar-like特征,AdaBoost结合而成的若干个线性组合在一起的强分类器。3)将检测到的人脸进行特征值提取,采用了LBP特征的方法,然后,将采集得到特征值与人脸库中已有的人脸特征值进行匹配。4)得出人脸识别结果,回到第一步,否则退出程序。4.2OpenCV在树莓派上的安装OpenCV在树莓派上的安装相对比较复杂,主要步骤有更新系统,扩展文件系统,安装依赖包,编译安装OpenCV。下面是这些步骤的详细解释。第一步,更新系统并拓展文件系统。更新系统能够支撑最新下载的依赖包的安装,拓展文件系统,使得文件内存更大,文件处理速度更快,能够加快OpenCV的下载安装。指令如下:$sudoapt-getupdate&&sudoapt-getupgrade,完成系统更新。$sudoraspi-config,选择第七项:AdvancedOptions,再选择第一项拓展文件系统。如图4-2所示:图4-2拓展文件系统图4-2拓展文件系统第二步,安装OpenCV的依赖包,为编译安装OpenCV做准备。主要依赖包有:(1)开发工具的依赖包,这些包来辅助OpenCV编译:build-essential,cmake,pkg-config。(2)图像和I/O包,这些包使树莓派可以加载多种格式的图片:libjpeg-dev,libtiff5-devlibjasper-dev,libpng-dev。(3)视频I/O包,这些包可以让我们从多种格式的文件中读入视频,甚至可以从摄像头读入视频流:libavcodec-dev,libavformat-dev,libswscale-dev,libv4l-dev,libxvidcore-dev,libx264-dev。(4)OpenCV关于矩阵的操作包:libatlas-base-dev。(5)为了使OpenCV视频可以显示在屏幕上,需要GTK开发库:libgtk2.0-dev,libgtk-3-dev。上述的依赖包通过install来进行安装。第三步,下载OpenCV源代码。下载opencv.zip和opencv_contrib.zip,注意,这两个版本一定要一致,否则在运行OpenCV进行处理时,会存在编译失败的问题。第四步,对OpenCV源代码进行解压编译,并进行测试。即完成对OpenCV的安装。4.3本系统的图像预处理人脸识别过程中,在获取图像后,需要对图像进行预处理,使其满足人脸识别的需求。其中,图像预处理包括三大模块:图像灰度化处理,中值滤波处理,几何归一化处理。4.3.1图像灰度化处理在我们生活中的摄像头抓捕到的图像已经是彩色的,其在电脑中的存储都是用三个字节来组成的,即RGB颜色空间表示法,其中,R表示为红色Red,G表示为绿色Green,B表示为蓝色Blue。但是彩色图像对于人脸识别系统并没有什么帮助,反而因为彩色图片图像是灰度图的三倍,使得计算量大幅度提升。为了提高人脸识别系统在人脸检测,人脸识别过程中的运算速率,和为了避免图像中的背景与人脸肤色相近时产生的干扰,我们选择将摄像头采集到的彩色图像转化成灰度图。灰度图像中,灰度的变化范围是0至255,这表明了图像的灰度程度共有256个等级,其中,当图像中的每一个像素点都为255时,表示为一张全白的图片;当图像中的每一个像素点都有0时,表示为一张全黑的图片。通过使用公式4-1来对彩色图像进行转化:Gray=0.39×R+0.50×G+0.11×彩色图像转化为灰度图片的效果图,如图4-3所示:图4-3灰度化处理图4-3灰度化处理使用OpenCV提供的cvtColor函数,即可完成对图像的灰度化处理。部分演示Python代码如下:cam=cv2.VideoCapture(0) #开启摄像头,并读取视屏while(True):img=cam.read() #读取视屏内某一帧画面gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #OpenCV提供的cvtColor函数,第一个参数为输入图片,第二个参数为设置存储模式,更换为灰度化模式。cv2.imshow('video',gray) #显示4.3.2中值滤波处理在摄像头采集图像过程中,图像经常因为被不同强度的随机信号所干扰,这最终会影响人脸识别系统的有效性,精确性等等。所以,在人脸识别环节之前,对图像进行噪声消除处理有利于实现有良好精确度的人脸识别系统,其中,常见噪声有脉冲噪声,高斯噪声等等。作为最常用的滤波方法之一的中值滤波法,它是一种非线性抑制噪声的处理方法,在人脸图像的预处理环节中常用二维中值滤波方式。中值滤波通过让与周边的像素差值较大的噪声值转化成领域像素的中间值,从而去除孤立的噪声点。与此同时,中值滤波还可以提供相对良好的保护边界,从而克服线性滤波器所带来的图像局部细节模糊。最后,中值滤波方法在计算机运算过程中,并不需要图像的统计特性,加快运算速率。综上所述,中值滤波能够满足人脸识别系统的需求,如运算快速,细节保护,消除孤立的噪声点等等。窗口尺寸对于中值滤波器的效果具有重大影响,随着窗口大小不同,中值也会随之变化。中值滤波器的处理效果如图4-4所示:图4-4二维中值滤波效果使用OpenCV提供的medianblur函数,其参数列表为(InputArraysrc,OutputArraydst,intksize),第一个为被滤波图片,第二位函数滤波后的输出结果,第三个为孔径的线性尺寸,其必须为奇数,值越大,滤布效果越强。部分演示Python代码如下:cam=cv2.VideoCapture(0)while(True):img=cam.read()cv2.medianblur(image,out,3) #中值滤波处理,输出结果为outcv2.imshow(‘img’,img) #原图显示cv2.imshow('medianblur',out) #中值滤波效果显示4.3.3图像几何归一化处理在摄像机采集图像过程中,通常会因为如人脸位置,拍摄角度等各种因素,使得抓捕到的图片图像存在有各种问题,如程度不一的偏移,旋转和失真。在人脸识别系统中,需要对已经统一的具有相同形式的图像进行处理。还有,人脸库中的人脸要经过训练才可以进行人脸匹配环节,统一化有利于图像的快速处理。所以需要将采集到的图像进行归一化处理。在本人脸识别系统的图像预处理环节中,图像的几何归一化主要包括姿势的旋转矫正和裁剪大小归一化。首先,因为人脸的姿势状态不同,人脸肌肉舒畅程度不同,有时会出现两眼不再同一条直线上的情况,那么便需要对人脸进行矫正处理,使得眼睛处理水平状态。随后,按照一个规则(如取100*112大小的人脸图像),将人脸从图像中裁剪下来,这有利于人脸库的训练,有利于加快人脸识别速率。假设,图像在坐标X和坐标Y方向进行收缩,其缩放系数为和,随着下列公式进行归一化处理。 (4-2)图像归一化处理的效果图,如图4-5所示:图4-5归一化处理a)原始图b)归一化效果图图4-5归一化处理a)原始图b)归一化效果图图像几何归一化处理,主要用在人脸库的数据使用上,主要操作是文件的读写。使用OpenCV提供的imwrite函数,和利用OpenCV数组操作的便利实现。演示Python代码如下:cv2.imwrite("dataset/picture1",gray[y:y+h,x:x+w])#datast/picture1为设置存入的地址,设置存入名字#gray为图片,其中x,y为图片坐标,h,w分别为人脸在图像中的长度,宽度#处理效果为讲人脸部分存入到相应的地址位置4.4本系统的人脸检测本系统采用以AdaBoost算法和Haar特征为基础的级联分类器,来实现人脸检测,其主要使用了OpenCV提供的级联分类器CascadeClassifier接口,与其内部提供的detectMultiScale函数和rectangle函数。4.4.1级联分类器CascadeClassifier级联分类器是用来检测目标使用的,需要通过加载分类器实现人脸检测。加载代码如下:faceCascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')#字符串haarcascade_frontalface_default.xml是官方提供的人脸Haar-like特征集合#变量faceCascade是分类器与Haar-like特征结合后,能够用于人脸检测的分类器在人脸检测中,还需要用到级联分类器提供的detectMultiScale函数,我们使用到的主要参数如下: voiddetectMultiScale( InputArrayimage, //输入图像CV_OUTstd::vector<Rect>&objects, //检测到的目标区域doublescaleFactor=1.2, //搜索前后两次窗口大小比例系数intminNeighbors=5, //候选框邻居的最小个数intflags=0, //flagSizeminSize=Size(), //能检测的最小尺寸SizemaxSize=Size() //能检测的最大尺寸);我们使用该函数来发现图像中的人脸,演示Python代码如下:faceCascade=cv2.CascadeClassifier('haarcascade_frontalface_default.xml') #加载分类器cap=cv2.VideoCapture(0)whileTrue: img=cap.read() #获取图片 gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #灰度化 faces=faceCascade.detectMultiScale(#开始检测图像中是否有人脸。gray,scaleFactor=1.2,minNeighbors=5,minSize=(20,20))4.4.2rectangle函数该函数的主要功能是在图片中画出矩形方框,用来标记已经检测出来的人脸。其主要参数如下:voidcvRectangle( CvArr*img, //图片CvPointpt1, //矩阵顶点CvPointpt2, //矩阵另一个顶点CvScalarcolor, //线条颜色intthickness=1, //组成矩形的线条的粗细程度intline_type=8, //线条的类型intshift=0 //坐标点的小数点位数。);我们用该函数来完成,图像中的人脸标记,演示Python代码如下:for(x,y,w,h)infaces: #faces中,依次获取人脸的坐标(x,y),人脸长宽w,h cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)随后,只需将图片img显示,便可完成人脸检测。4.5本系统的人脸识别在完成人脸检测后,便是进行人脸库建立,随后便可进行人脸识别。4.5.1人脸库建立在检测到人脸后,讲图像中的人脸部分储存到SD卡中,随后进行训练,便完成了人脸库的建立。除了用来人脸检测的函数以外,主要使用的OpenCV提供的人脸LBP识别模式,imwrite函数,文件OS操作。主要步骤如下:1.将人脸图片录入到指定目录中2.将录入完毕的图片进行训练,以满足人脸识别的实时性,即提取出人脸图片中的LBP特征值。第一步的部分伪代码如下:face_detector=cv2.CascadeClassifier('haarcascade_frontalface_default.xml') #加载人脸分类器face_id=input('\nenteruseridendpress<return>==>')#人脸ID录入,人物1,人物2,人物3Count=0 #用以控制保存单个人物的多少图片While(True): img=cam.read() #获取图像 gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #灰度化 faces=face_detector.detectMultiScale(gray,1.3,5) #发现人脸 for(x,y,w,h)infaces: #在图像中显示出来 cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) count+=1cv2.imwrite("dataset/User.",gray[y:y+h,x:x+w])#图像中的人脸部分保存 ifcount>=30: #单人物,保存30张照片即停止break第二步的核心函数如下:#该函数功能为将每个人物的图片与ID对应起来,存储在两个集合中,并返回这两个集合。defgetImagesAndLabels(path):imagePaths=[os.path.join(path,f)forfinos.listdir(path)] faceSamples=[]ids=[]forimagePathinimagePaths:PIL_img=Image.open(imagePath).co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论