ImageVerifierCode 换一换
格式:DOCX , 页数:56 ,大小:3.22MB ,
资源ID:2509799      下载积分:14 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2509799.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(人脸识别优质毕业设计.docx)为本站上传会员【天****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

人脸识别优质毕业设计.docx

1、 信息科学和技术学院毕业论文 课题名称: 基于特征识别人脸检测系统 学 院: 信息科学和技术学院 完成日期: 二○一七年五月十九日 摘 要 我毕业设计题目是基于特征人脸检测系统,这个系统不仅仅能够检测人脸,还含有识她人脸功效。检测人脸检测部分算法采取是于仕祺老师LBP特征加Gentle AdaBoost分类器相结合算法,提取识别特征部分算法采取是谷歌在提出基于深度学习策略一个人工神经网络FaceNet,较为新奇,其正确率高,在光照不

2、足,姿态和表情改变猛烈时仍能保持稳定,含有很强鲁棒性。该系统界面使用MFC编写,在具体实现中了应用了多线程编程技术实现了一个简单生产者消费者模型,从而提升了系统识别效率,另外,对人脸识别模块还使用了Python,C++混合编程技术引入了谷歌开源深度学习框架Tensorflow作为对FaceNet具体实现,数据库使用是SQL Server,连接数据库使用是微软企业ADO 组件。该系统关键有信息采集模块和实时监控模块两个部分,前者完成对任务样本信息采集工作,后者完成在实时监控情况下对出现在画面中人脸进行检测和识别,检测部分速度能够达成40~60FPS,识别部分因为计算量较大,只能达成2~5FPS。

3、该系统经过简单硬件支持和布署以后,基础能够完成在实际场景中简单应用,含有一定学术研究和实际应用价值。 关 键 词:人脸检测;人脸识别;机器学习;Tensorflow;实时监控 ABSTRACT The topic of this graduation project is Face Detection System based on characteristics which achieves the face detection and face recognition two functions. The algorithm of face detection part us

4、es a kind of enhanced algorithm based on LBP feature and Gentle AdaBoost classifier proposed by ShiQi Yu,the algorithm of extracting face feature used in recognition part uses a kind of manual neural network FaceNet based on deep learning strategy proposed by 谷歌 in .FaceNet has reached high arruracy

5、 and it is robustness to the change of illumination,posture and expression.The interface of this system if written in MFC,and in real implementation,the application of multi-threaded programming technology realizes a simple producer and consumer model which accelerate the whole recognition efficienc

6、y of the system,in addition,the recognition part also uses the Python,C++ mixed programming technology which introduces 谷歌’s open-source deep learning framework Tensorflow as a concrete implementation of FaceNet,the database is using SQL Server ,the link of database uses Microsoft’s ADO components.T

7、he system consists of two parts: the information collection module and the real-time monitoring module,the former completes the information collection of human samples,and the latter completes the detection and recognition of the faces that appear in the picture in the case of real-time monitoring.T

8、he speed of detection part can reaches to 40~60 FPS,the recognition part can only reach to 2~5 FPS, for the large calculation cost.After some simple hardware support and deployment,the system can be used in actual scene for simple application which has certain research and practical application valu

9、e. KEY WORDS: Face detection; Face recognition; Machine learning; Tensorflow; Real-time monitoring 目 录 1 绪论 3 1.1课题 3 1.2课题背景 3 1.3课题研究目标及意义 3 1.3.1研究目标 3 1.3.2研究意义 4 1.4中国外研究现实状况 5 1.4.1国外 5 1.4.2中国 6 1.5设计时间 7 1.6内容及分工 7 1.6.1内容 7 1.6.2结果 7 2 理论和技术 8 2.1理论 8 2.1.1检测部分

10、LBP特征+Gentle AdaBoost分类器 8 2.1.2识别部分谷歌 FaceNet 11 2.2技术 15 2.2.1 MFC介绍 15 2.2.2 Tensorflow介绍 17 2.2.3 ADO组件介绍 18 3 需求分析及概要设计 19 3.1 需求分析 19 3.2 概要设计 19 4 实 现 20 4.1关键理论实现 20 4.1.1检测部分实现 20 4.1.2提取识别特征部分实现 21 4.2类 24 4.2.2 TensorflowInference类 26 4.2.1 ADOConn类 28 4.3主界面 29 4.3.1 步骤

11、 29 4.3.2 实现 30 4.4信息采集 32 4.4.1步骤 32 4.4.2实现 32 4.5实时监控 34 4.5.1步骤 35 4.5.2实现 36 4.6数据库 38 5 测试 40 5.1 主界面测试 40 5.2信息采集测试 41 5.3实时监控测试 41 6 结论 43 7 致 谢 44 8 参考文件 45 1 绪论 1.1课题 基于特征人脸检测系统 1.2课题背景 自从计算机被发明那一天起,大家就试图使用计算机来替换人力从事多种多样劳动,经过数十载发展和进步,和对多种理论深入研究,现在计算机技术已经达成能够实现人脸识别要求。

12、人脸识别一个关键应用就是身份判别,在很多关键场所,传统身份判别方法缓慢且低效,于是大家试图寻求愈加高效方便身份判别方案,人脸识别就是其中一个考虑,和其它类型生物识别比较,人脸识别含有非强制性、非接触性、隐蔽性、并发性优点,而且人面部表情还会反应出人心理状态和情绪,这也能够为我们提供必需辅助信息。人脸识别研究现在已经成为很多从事模式识别研究或人工智能研究科研机构关键课题。即使科学家们从很早时候就试图让计算机能够识她人脸,不过因为人脸信息轻易受到多种环境原因干扰和人物本身姿态和表情影响,使得人脸检测和识别仍有很大研究空间,而且现在商用人脸识别应用并未普及,存在着很庞大商业空间,现在新生人脸识别算法

13、企业,如云从科技,Emotient,Affectiva中学术界大佬云集,动辄融资数千万,也从侧面说明了人脸识别和分析市场潜力巨大,含有很高应用和学术价值。 1.3课题研究目标及意义 1.3.1研究目标 狭义上来讲,人脸检测和识别基础目标是从一幅静态图片或是从视频流中一系列图片中检测图像是否包含人脸,假如有些人脸,则能够正确给出人脸多种信息,包含位置信息,大小信息,还要能够将人脸单独从原始捕捉画面中剪裁出来,经过一定算法提取出足够区分不一样人和同一个人人脸特征,再将提取到特征和事先存放在数据库中人脸特征进行比对,从而实现对图片中出现人物进行身份判别,这在很多安检和考勤系统上得到了应用,

14、现在稍微高级一点手机全部有些人脸解锁功效。 更深入讲,人脸检测和识别还有很多其它应用,比如当下流行部分P图软件经过对人脸分析和处理,能够开发出很多基于摄像头应用比如美图秀秀和魔漫相机等,深受广大爱自拍妹子们喜爱,有游戏企业则在游戏中加入了对玩家脸部表情捕捉,并将其融入到游戏中,含有巨大市场价值,另外,获取人脸中还含有更多有意思信息,比图片中人物表情,神态,衰老程度,是否打扮等,从这些信息中能够深入分析得出人物情绪和心理活动甚至性格特征,表层表现信息一旦被深度挖掘,其价值将无可估量,部分新生人脸识别算法企业已经将这些信息用在很多场所,比如在销售业中分析用户实时感受,进而指导销售策略,这些信息在

15、未来人工智能拟人类产品中对图像了解和机器人人机交互中也含有重大意义。 所以,从通常应用角度来讲,研究人脸识别目标是让计算机能够识她人脸,区分不一样人脸,自动对人进行身份判别,或是对人脸加以合适处理应用于娱乐休闲;而从人工智能角度来讲,是为了让计算机能够“了解”人脸,模拟人脸,让计算机愈加地像人。 1.3.2研究意义 研究人脸检测和识别含有实际应用和理论研究两个方面意义,表现在前者上意义在于人脸检测和识别能够被广泛应用在多种场所,举多个简单例子,能够将人脸检测和识别技术应用在安检或监控领域,在部分对安全性要求很高场所布署人脸检测和识别系统能够有效检验出异常人员出现,为安保人员提供对

16、应预警信息,使其能够立即采取一定方法避免安全事件发生;还能够将系统布署到通常街道上,类似天眼系统,全天识别路上每一个人,这么能够让部分不法分子无处可藏,增加社会安定性;在考勤系统上应用能够是工作人员不用采取任何多出动作即可完成打卡,只需要从门口走过,人脸检测和识别系统就能够在神不知鬼不觉情况下完成对考勤信息统计,在这些方面应用将发明巨大社会价值。在理论研究方面意义只要是表现在人工智能领域,科学家们梦想实现终极强人工智能不可能一蹴而就,其基础发展阶段就是对人类多种模拟,研究人脸识别相关理论能够为探索给予计算机视觉了解提供一定指导,而且由其和别部分学科有所交叉,比如生理学,数字图像处理,生物神经学

17、心理学等,对人脸检测和识别理论研究能够在一定程度上推进这些领域发展,这些领域发展反过来也是人脸检测和识别理论进步关键推进力。 在安检系统中,人脸检测和识别本质就是从区分人脸,人脸检测是把人脸从背景中区分出来,人脸识别是区分不一样人脸,对计算机而言,人脸只是一堆随机矩阵,和一个可乐罐子并没有什么太大区分;而对于人工智能领域来说,人脸识别不再单单是区分人脸,而要求计算机能够以愈加类似人方法去了解人脸,得出人更多信息,人身上没有那个部位能比脸更能反应这个人信息了,包含年纪,心情,甚至性格特征,利用这些信息对人工智能产品行为做出指导将产生愈加友好人机交互体验和愈加个性化服务,利用信息前提是获取这些

18、信息。 1.4中国外研究现实状况 1.4.1国外 近十年以来,人脸识别已经发展成为热门生物特征识别技术,国外几乎全部著名从事和人工智能领域相关研究研究机构和高校全部有对人脸检测和识别技术及理论研究。包含像FaceBook,谷歌,Microsoft这么互联网巨头企业也对人脸检测和识别研究投入了大量精力,并将能够实际使用人脸检测和识别系统布署到它们产品中去,用以开发新应用或提升用户体验。 理论上产生了基于几何特征人脸识别、基于子空间人脸识别、基于弹性图匹配人脸识别、Geroghiades等人提出基于光照锥模型多姿态、多光照条件人脸识别方法,应用于以支持向量机为代表统计学

19、习理论。另外,有AdaBoost衍生出了很多变种和增强型人脸识别算法、基于彩色信息方法、构建神经网络、基于形状分析方法和多模态信息融合方法也有大量研究和试验。 现在,很多国家展开了相关人脸识别研究,美国代表机构是卡耐基梅隆大学(CMU)机器人研究所、麻省理工学院(MIT)媒体试验室和人工智能试验室,欧洲代表机构是英国Surey大学视觉语音和信号处理研究中心、法国INRIA研究所、芬兰赫尔辛基大学CIS研究所、瑞士IDIAP研究所、日本代表机构是ART研究所等。人脸检测和识别系统已经被法国人安装在ATM机上,经过对脸部识别确定人物身份。美国更是将人脸检测和识别技术应在诸如军事,安防,教育,医疗

20、娱乐等各个方面,极大方便了大家生活,增加了生产效率,也多样化了大家娱乐方法。国外部分著名研究机构还专门话费大量人力和物力来建立和维护很多人脸数据库,这些数据库被广泛用来研究人脸检测和识别,尤其是对于最近几年超速发展人工神经网络策略,训练一个完善人工神经网络需要大量训练样本(百万等级),这些数据库极大方便了研究人员样本获取过程,部分数据库被专门用来作为检测和识别算法Benchmark,用以比较和评定算法性能,也有专门用来进行竞赛数据库,多种state-of-art算法在这些数据库上一较高下,极大促进了人脸检测和识别研究。 理论发展极大促进了工业界进步,众多新兴人脸识别算法进而产品企业纷纷成立

21、她们将理论应用于实践同时也组建自己科研团体不停对理论研究做出贡献,现在比较著名国外人脸算法和产品企业有Emotient,Affectiva,Linkface等,Emotient致力于打造一套“无所不在”人类情感分析系统,而且已经将表情识别服务布署到零售行业,它还提供API接口,能够将其技术轻松任何硬件或软件进行整合(本课题将尝试使用这些API);Affective主打面部识别解析服务,已经推出其SDK包,期望在市场营销以外领域如游戏、教学等发挥作用,其已经取得累计万美元投资;Linkface提供全球领先人脸检测、识别技术服务,LFW人脸识别正确率已经高达99.5%以上。 1.4.2中国

22、中国人脸检测和识别研究和其它部分领域研究一样,起步晚但在国家日益和国际接轨情况下发展很快,中国著名高校像北京大学,清华大学,上海交通大学等,和科研机构如中科院全部对人脸检测和识别进行了研究,不仅产出了很多能够实际应用产品,也研发出了很多媲美国际水平优异检测和识别关键算法。可供实际应用产品优异代表有清华大学科研人员开发出THfaceID人脸识别系统,中科大研究小组开发KD-Face系列人脸考勤机等。人脸检测和识别技术也被应用于中国安防,销售等领域,在奥运会中人脸检测和识别系统被实际布署并投入使用。在理论研究方面,中国科学家也在奋力追赶state-of-art算法,深圳大学于仕祺老师LBP特征+G

23、entle AdaBoost算法达成了当初世界人脸检测算法顶尖水平,在检测Benchmark数据库上竞赛保持第一名位置一段时间。香港汉字大学科研团体研发基于深度学习DEEPID人工神经网络模型在当初也是达成了state-of-art水平。 中国现在比较有名人脸识别企业有云从科技和Face++等,云从科技组员大多来自全球顶尖学府及研究机构,其研发了首个刷脸支付原型系统,首个商用人脸识别远程开户系统,它是唯一一家参与人脸识别国家标准、部标、行标制订研发企业;Face++在金融、安防、零售领域分别开始了商业化探索,成功发育出Face++Financial,Face++Security,Face++

24、BI等垂直人脸验证处理方案产品。 1.5设计时间 10周 1.6内容及分工 1.6.1内容 基于特征人脸检测系统,关键实现以下功效: 1) 对人物信息采集,包含人物姓名,人物肖像采集,人物肖像特征向量计算; 2) 实时监控,对出现在摄像头画面中人物进行身份判别及统计。 1.6.2结果 1) 系统可实施程序一套; 2) 毕业设计论文一份; 3) 系统用户手册一份。 2 理论和技术 2.1理论 2.1.1检测部分LBP特征+Gentle AdaBoost分类器 此处描述算法是该理论通常性算法,并不和本课题程序

25、中实际使用算法完全相同,课题中检测部分使用检测器是于仕祺老师公布人脸检测库,只提供了函数接口和对应DLL库,并未公开内部具体实现细节,只公开了特征使用是LBP特征,分类器是Gentle AdaBoost Classifier,训练正样本大约是150,000张图片,故此处只做通常性算法介绍。 1)LBP特征 LBP全称Local Binary Pattern(局部二值特征),它处理对象是灰度图片,作用是提取图片纹理特征,它原理并不复杂,计算也比较简单快速,对旋转和光照不含有一定鲁棒性,所以其在纹理分析和人脸检测和识别等应用中取得了很好效果。在本课题中,人脸检测部分提取特征就是滑动子窗口L

26、BP特征,提取到特征将作为分类器输入,最原始LBP定义是在某个像素8领域内,将在中心像素周围像素灰度值和中心点像素灰度值做比较,若大于中心像素灰度值,则记为1,小于则记为0,然后将得到八个01值依次排列看成是一个二进制数,再转换为十进制表示就得到了该中心点LBP值,其计算过程图2-1所表示: 图2-1 用公式来表示话: (2-1) 其中()表示3X3领域中心像素点,它像素值为,领域其它像素值为,s(x)为符号函数: (2-2) 原始LBP算子存在一定缺点,它只覆盖了一定范围小区域,区域内像素数量固定不变(

27、图2-1中9个像素点),无法适应不一样尺度纹理需要,正对这个缺点,部分科学家提出了部分改善LBP算子,Ojala等人将3X3领域扩展到任意领域,然后使用圆形包围区域,改善后LBP算子能够包含任意多个像素点,满足了对不一样尺度纹理分析需求,一个改善LBP算子图2-2所表示,其定义了5X5领域,在圆形包围线上取8个采样点: 图2-2 采样点坐标需要经过一定计算,采取取整或双线性插值方法来求得采样点整数值坐标,再利用基础LBP算子中求解中心点LBP特征值方法(公式(2-1))求解LBP值,在人脸检测中,LBP算子范围包围区域常常是椭圆形,人脸,眼睛,嘴巴全部是椭圆形结构,用椭圆包围区

28、域能够取得更强表示力,在此不再赘述。 2)Gentle AdaBoost分类器 Gentle AdaBoost全称Gentle Adaptive Boost Classifier(温和自适应强化分类器),它是基于Boost Classifier一个改善版本,Boost Classifier简单说来就是指将很多弱分类器级联起来组成一个增强型强分类器,很多弱分类器经过类似“投票”方法决定最终分类结果。 一个弱分类器训练算法图2-3所表示 图2-3 一个Gentle AdaBoost分类器训练算法图2-4所表示: 图2-4 其中,Gentle是指此分类器相对

29、于传统Adaptive Boost Classifier在训练时错误分类样本权值增加策略上愈加平稳(图2-4中3.b),方便取得愈加好泛化能力;Adaptive是指相对于传统Boost Classifier,Adaptive Boost Classifier能动态调整各个样本在训练时所占权重,就是增加错误分类样本权值,降低正确分类样本权值。 2.1.2识别部分谷歌 FaceNet 不管是人脸检测还是人脸识别,全部面临着来自光照,姿态,表情改变带来巨大挑战,人工神经网络模型以其强大非线性拟合能力和极强鲁棒性能够在很大程度上面对以上挑战,而且深度学习是近几年才兴起新理论,本课题勇于追赶研究前沿

30、在识别部分使用了David Sandberg依据谷歌在发表一篇文章《FaceNet: A Unified Embedding for Face Recognition and Clustering》使用Tensoflow实现一个人工神经网络,并已经使用大量训练样本(百万级)预先训练完成,在使用时只需要加载这个固化网络模型至内存中,输入经过预处理人脸图片,再实施一次前向计算,即可得到用于识她人脸特征。FaceNet在LFW(Labeled Faces in the Wild)数据库上正确率达成了99.63%,刷新了当初统计。 FaceNet使用深度卷积神经网络直接学习人脸在高维欧式空间映

31、射,映射得到坐标点欧式距离即代表了样本相同性,距离越大表示相同性越低,反之越高。 FaceNet大致架构图2-5所表示: 图2-5 其中Deep Architecture就是通常卷积神经网络去掉softmax后结构,经过L2归一化后得到人脸图片再高维欧式空间特征表示,在训练时以最小化后面三联子损失函数为目标不停调整网络中各个节点权值。 目标函数:三联子损失函数,其学习过程图2-6所表示 图2-6 三联子表示在训练样本中抽取三个人脸样本(抽取方法不做深入讨论),其中Anchor和Positive是来自同一个人两张脸部图片,Anchor和Negative是来

32、自不一样人两张脸部图片,学习过程就是要使经过网络映射Anchor和Positive欧式距离尽可能小而Anchor和Negative欧式距离尽可能大,依此来取得对人脸特征描述。 用公式描述: (2-3) 其中表示映射过程,,,,分别代表锚点,正样本,负样本,表示正负样本之间距离,表示全部可能三联子集合。两个样本之间相同性就使用公式 来计算。 将(2-3)做一下转换便能够得到目标函数: (2-4) 训练过程就是最小化,训练方法使用通常卷积神经网络训练方法即可,其具体内容不做讨论,实现上多种深度学习框架已经集成了多种最为优异优化算法,只需要调用对应地接口便能够完成

33、对神经网络训练过程。 相关Deep Architecture,论文中给出了多个可选网络结构,其中一个是Zeiler&Fergus结构,图2-7所表示: 图2-7 另外一个是基于谷歌 Inception结构,图2-8所表示: 图2-8 其中一个Inception结构图2-9所表示: 图2-9 课题中使用网络结构现在还不知道其具体形式,Tensorflow提供了可视化固化网络模型工具,但在实际使用时出了部分问题,所以很遗憾没有看到实际使用网络结构。 2.2技术 2.2.1 MFC介绍 MFC全称Microsoft Foundation C

34、lasses(微软基础类库),这是Microsoft推出一套C++类,把大部分常见Windows API函数封装在其中。MFC中类和函数接口成千上万,对如此庞大类库进行介绍和对其内部复杂机制进行讨论已经超出本文范围,所以在接下来叙述中,文章仅介绍本课题中显式使用部分内容,本课题使用集成开发工具是Visual Studio Premium,在其中新建一个MFC项目标同时,VS会自动生成项目标主框架,我们要做就是往这个主框架中添加内容和修改部分对应地修改,必需时重写一些函数。 1) UI:本课题是基于对话框结构项目,所以包含到UI知识仅有对话框中内容,MFC封装了窗体和控件底层绘制操作,用户能

35、够在资源文件添加对话框类型资源文件,然后用vs提供可视化编辑工具编辑自己对话框,而不用考虑其底层绘制细节,多种控件添加能够经过拖拽放置到对话框中。用可视化工具编辑完界面后,vs会自动为这个对话框生成一个对应类CXXXDlg Calss,这个类就封装了对话框中全部内容,和控件关联变量全部作为类组员变量来实现,多种消息对应函数也是做为这个类组员函数来实现。本课题使用默认MFC样式图2-10所表示: 图2-10 2) 数据类型:MFC中定义了很多常见数据类型,本课题使用最多是CString类型,窗体控件中显示字符串类型全部全部是CString类型,写入数据库和从数据库中取出来数据类型也全

36、部是CString类型,所以相关CString和其它数据类型转换是本课题实现部分一个关键。MFC中提供了很多类型转换函数和类型转换宏如宏CT2A( )能够将CString类型转换为string类型,CString类型本身也提供了一个强大转换函数Format( ),它能够方便地实现很多基础类型转换,不过部分更为复杂类型转换还需要自己写函数去实现。 3) 消息机制:在Windows中,消息和线程一一对应,当系统检测到某个消息时,会将对应消息发送给和该消息对应线程。根据类型,Windows将消息根据类型分为图2-11所表示几类: 图2-11 Windows将整个消息系统分为3个

37、层级: ①Windows内核系统消息队列 ②AppUI线程消息队列 ③处理消息窗体对象 Windows内核会维护一个全局系统消息队列,根据线程不一样,系统消息队列中消息会被发送到应用程序UI线程消息队列中,应用程序每一个UI线程全部有自己消息循环,会不停从自己消息队列中取出消息,并发送给Windows窗体对象,每一个窗体对象全部使用窗体过程函数WindowProc()来处理接收多种消息。本课题中对应地消息通常全部是第三层级消息。 MFC框架封装了对消息处理大部分操作,我们能够在生成窗体类中添加消息响应函数,当系统检测到用户或系统行为产生了已经被定义消息,会自动调用我们编写消息对应函数

38、实施对消息响应操作,在本课题实现中具体对应消息有窗口绘制消息ON_WM_PAINT,系统时间消息ON_WM_TIMER,按键消息ON_BN_CLICKED等。 4) 多线程:MFC中线程关键有两类,一类是用户界面线程,另一类是工作者线程,二者关键区分在于前者有自己消息队列和消息循环,以后者没有,用户界面线程工作通常是处理界面绘制,响应用户操作和系统产生事件及消息等,vs自动生成窗口类中组员函数大多全部是作为用户界面线程实施,一个不合适设计方法是将全部代码全部放在用户界面线程中,这么做确实简单方便,不过它会带来部分严重效率问题,比如部分占用大量内存和耗时较长计算若放在用户界面线程中会造成

39、界面长时间处于无响应状态,所以应该将计算量较大处理另开工作者线程单独实施,用消息传输或共享内存方法和用户界面线程同时。 MFC中多线程编程常见函数以下多个: ①开启一个工作者线程:CWinThread * AfxBeginThread(AFX_THREADPROC pfnThreadProc , LPVOID pParam , nPriority=THREAD_PRIORITY_NORMAL , UINT nStackSize=0 , LPSECRITY_ATTRIBUTES lpSecurityAttrs=NULL); ②在某个信号量上阻塞线程:DWORD WaitForSingleO

40、bject(HANDLE hHandle,DWORD dwMillisecondes); ③临界区访问:进入临界区使用CCriticalSection对象Lock()函数,离开使用Unlock()函数. 2.2.2 Tensorflow介绍 TensorFlow是一个开源使用数据流图数值计算框架,被广泛用于实现多种神经网络,数据流图中节点代表数学运算,而图中线条代表数据数组(又称为张量)。TensorFlow最初由谷歌大脑小组研究员和工程师门开发,用于机器学习和深度神经网络方面研究,不过因为这个框架含有通用性,也能够被用于其它计算领域。它灵活架构能够让你将节点布署在一个或多个CPU或GP

41、U上进行并行计算。 相关数据流图:数据流图是一个以数据流动为驱动力计算模型,用nodes和edges有向图来描述数学计算,Nodes通常见来表示对数据施加数学操作,但也能够表示数据输入起点或是数据输出终点。 本课题尝试直接编译Tensorflow源码,以使用其C++接口,但官方给出编译方法是使用谷歌内部使用编译工具Bazel,这个工具在Windows平台很不稳定,现在只有测试版,在使用过程中出现了多种问题,其中部分无法处理致使编译失败。官方推荐方法是使用Python接口,而且教程大多数也是基于Python接口,于是本课题使用C++,Python混编技术将Python接口封装成C语言形式,如

42、此就能够在程序中间接使用Tensorflow了。课题中使用FaceNet模型是预先训练完成,其数据流图结构被固化存放在.meta文件中,图中权值被固化存放在.ckpt文件中。 本课题使用Python接口关键有以下多个: ①导入数据流图即网络结构至默认图(tensorflow会在Python环境上下文中提供)中使用函数 tensorflow.train.import_meta_graph(meta_file_path) ②加载权值至数据流图中saver.restore(sess,ckpt_file_path) ③依据Tensor名字取得输入输出graph.get_tensor_by

43、name(tensor_name) ④实施前向计算sess.run(embedding,feed_dict=feed_dict) 2.2.3 ADO组件介绍 ADO全称ActiveX Data Objects是一个用于存取数据源组件,它提供了编程和统一数据访问方法OLE DB一个中间层,许可开发人员编写访问数据代码为不用关心数据库是怎样实现,而只关心数据库链接。本课题将对数据库操作封装在一个类ADOConn中,封装后类提供用于初始化连接数据库,直接实施SQL语句,取得查询语句结果集指针和断开连接等数据库操作接口。 3

44、 需求分析及概要设计 3.1 需求分析 本课题关键目标是设计一个用于实时监控人脸识别系统,将摄像头布署在需要进行监控场所,系统初始化完成后便自动检测和识别出现在画面中人脸,能统计已经识她人物身份信息和出现在画面时间并给予统计,将不能识别人物标识为Unknown并统计时间戳。系统只能识别预先经过信息采集人物,在信息采集阶段,要求统计人物姓名和头像。 3.2 概要设计 整个系统分为两个功效模块,一个是信息采集模块,另一个是实时监控模块,图3-1所表示: 图3-1 4 实 现 4.1关键理论实现 4.1.1检测部分实现 检测部分使用是于仕祺老师

45、公开人脸检测库,配置好dll库后将对应地头文件导入到项目文件中即可使用这个库接口,这个库针对不一样应用场所提供了四个不一样接口,本课题中使用是检测效果最好但最耗时一个接口 int * facedetect_multiview_reinforce(parameter list….) 函数形参列表包含了指向存放检测结果区域指针,指向存放输入图片数据区域指针,输入图片长宽和部分其它参数,函数返回一个指向存放检测结果区域指针,关键就是要提取这个指针所指向数据,假设返回指针是pResult,则pResult指向第一个整型数据就表示在输入图片中检测到人脸数量,在下来连续内存区域中存放了每一个人人脸信息

46、每个人占142个整型数据,前四个数表示了人脸包围盒左上角和右下角左边,第五个数据表示了名为neighbor信息(其具体含义现在还未知),第六个数据表示了人脸转角,范围是0~60度,以后每两个数据组成一个坐标点,标识了人脸68个特征点,这些特征点标识了人脸轮廓,眼睛,眉毛,鼻子,嘴巴位置和轮廓,共占用136个数据,图4-1所表示: 图4-1 检测结果图4-2所表示: 图4-2 基于监控检测只需要隔一定时间间隔从摄像头中取出画面,将画面送入检测函数后把检测结构绘制在画面上在输出到用户界面上即可。 4.1.2提取识别特征部分实现 提取识别特征部分采取基于Tenso

47、rflow实现一个FaceNet神经网络模型,前文提到过未能成功使用TensorflowC++ API,所以使用其Python API,用Python编写好直接使用Tensorflow函数,经过Cython将用Python定义函数转换为C形式定义函数,Cython会自动生成对应函数头文件和源文件,将生成文件导入项目中即可使用C形式定义函数。全部相关Tensorflow使用全部被封装在一个叫TensorflowInference类中,这个类封装了包含session对象获取和维护操作、Python环境初始化、网络模型加载、计算映射特征和全部C++和Python数据交互工作,对类外使用者完全隐藏了全

48、部包含Python内容,具体见4.2.3节。在这其中有两点需要注意: 1) Session对象:值得注意是,Tensorflow中计算全部是经过session对象来完成,session对象中保留了数据流图结构信息和权值信息,课题中使用网络模型很庞大(141MB),假如每次计算全部重新将模型从磁盘调入内存,会严重增加程序耗时(每次加载模型大约耗时两分钟),所以合理设计应该是在整个系统初始化时就将模型载入内存,并获取其session对象使其常驻内存,每次计算时调用session对象组员方法即可完成一次计算(每次计算大约耗时0.3~0.4秒)。在Python脚本中,session对象获取是经过

49、Tensorflow提供接口tf.Session()获取,不过在获取session对象之前,需要将数据流图结构信息载入默认graph中,再将图中权值恢复到session对象中,这么以后session对象才能正确实施FaceNet前向计算。取得session对象会在C++中以PyObject类型出现。 2) C++和Python数据交互:本课题一个难点就是C++和Python数据交互问题,数据交互形式是经过函数形参和返回值进行,关键包含两个方向,一是从C++部分数据流入Python,二是Python部分实施计算结果返回C++,根据Python官方给出做法是将全部C++类型数据转换成PyOb

50、ject对象进行交互,不过因为Python全部对象在C++中全部全部是继承自PyObject类型,如此灵活数据类型带来一定复杂度,而且本课题中使用了图片类型数据,在Python中是numpy.ndarray类型,numpy官方给出了对C++版本ndarray支持,不过在实际使用中显示使用函数接口已经过时。好在Cython许可在Python脚本中使用C类型数据结构,使得从C++到Python数据转换方便了不少。 具体数据流向和转换过程图4-3所表示: 图4-3 4.2类 4.2.1 People类 People类是本课题设计一个最为关键类,它抽象层级最高,是抽象“人”,有姓名,映射

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服