
♻️ 资源大小161MB➡️资源下载https://download.csdn.net/download/s1t16/87450298面向流动人口管理的人脸验证系统设计及实现摘 要本项目是由广东天波技术有限公司 1 所提出的社会信息采集管理系统研究及产业化 项目中国科学院深圳先进技术研究院集成所多媒体中心所承担的项目。在当今世界中社会安全作为一个非常重要的课题被摆在了突出的位置维护社会的安全和稳定既关系到国家也关系到我们普通百姓的安危。本项目关注于在这个社会中大量的身份证的应用例如宾馆等场合客户常常被告知仅提供身份证即可公安部门也常只留下一个登记记录而已然而对于身份证的信息验证特别是是否与本人的真实信息相对应是一个非常有意思的课题。在现在的很多人脸验证技术主要是通过对特定的人脸进行学习之后形成对一个特定人脸的认知库再通过该认知库来对新的人脸进行判断是否符合然而这样的人脸验证系统需要学习的过程对于类似于像流动人口管理(例如宾馆等场所)是不合适的。本项目通过分析实时拍摄的人数据并且将其同身份证上面所得到的照片信息进行即时的相似度的分析比较帮助宾馆等机构快速完成同时对人脸信息进行归档处理使得公安机关能够获得更多现场的信息项目开发集合了各种图像处理特别是人脸处理的技术分别在人脸检测人脸质量评价人脸相似度评判技术上进行综合应用。在人脸检测部分我们使用了 Adaboost 技术通过提取人脸的基于类哈尔特征的弱分类器组成的强分类器进行比较从一副图片中查找可能的所有人脸存在的位置并且使用为提高效率将判别过程进行瀑布流程化。在人脸质量评价中我们使用了 PCA主成份分析技术从 FERET 正脸数据库中训练出“特征脸”数据将需要进行验证的人脸通过“特征脸”进行重构计算误差质量评价的原理是将几张人脸的图片提取出经过重构后误差最小的尽可能接近正脸的图片作为发送给公安局服务端进行相似度检测程序进行验证的图片。在人脸相似度匹配过程中我们使用了香港中文大学图像实验室提出了一个新颖的计算框架并且获得较好的人脸相似度结果。本项目组整体完成了初步系统的搭建包括实现了上面所述的人脸处理的几项关键技术以及不同设个的备之间的通信问题并且已经生成初始的、完整的、可供演示的版本。本人在中科院深圳先进技术研究院的乔宇老师张维老师李志锋老师香港中文大学张伟伟老师的指导下完成系统的搭建文档撰写和实验工作。关键词人脸检测 人脸识别 主成份分析, 人脸相似度比较Abstract.This project is proposed by Telepower Communication Co.,Ltd company, conducted by Shenzhen Institute of Advanced Technology, Chinese Academy of Sciences. Nowadays, Social Security is playing a very significant role in our daily life, maintaining the security and stability of our society not only affects the safety of the common people but also our nation.This project focuses on the application of identification card, such as in the hotel, the customers are often informed of offering their identification card, and the public security department only records the information in their database,regardless of the verification of the authenticity of the information. Currently, most of the face verification technology is based on the learning a learning a specific persons face pictures and generate a recognition database,and use the database to judge whether a new persons face matches the database.However, the existence of such a learning process is inappropriate for flowing population. This project compares the two photos of the ID card and the real person to help the institutions judge the authenticity and arrange the informations to help the public security department to get more information of the site scene. This project uses many image process technologies, especially the face process technologies, integrating the technology of Face Detection, Face Quality Assessment and Face Similarity Judgment.In Face Detection, we use the Adaboost technology,in which we use the strong classifier composed of weak classifier based on the Haar-like features of human faces, and used a cascade process to improve the detecting efficiency. In the face quality assessment we use the Principal Component Analysis Technology to extract the eigenfaces data from the frontal face in the FERET face database,to verify the quality of the face we reconstruct the face from the eigenfaces to calculate the differences with the original picture.The principle of Face Quality Assessment is to get the face picture which has the smallest error between the original image and the reconstructed image, which means the face is nearest to the frontal face and the face picture is selected as the picture to be sent to the public security department to be verified by the verification program. In face similarity matching we used a novel computing framework proposed by the image laboratory of Chinese University of Hongkong and receive a pretty good matching result. Our team has already constructed the basic system, including the realization of face process technologies mentioned above, and the communication among different devices, and also generated an original, complete version of software which can be demonstrated. worked as a intern student guided by Mr Yu QIAO, Mr Wei ZHANG, Mr Zhifeng LI from Shenzhen Institute of Advanced Technology, Chinese Academy of Sciences, and Mr Weiwei ZHANG from Chinese University of Hongkong, to complete the work of system setting up, documentation, and the experiment.KeywordsFace Detection Face Recognition, Principal Component Analysis, Face Similarity Comparison项目背景在当今世界社会安全作为一个非常重要的课题被摆在了突出的位置维护社会的安全和稳定既关系到国家也关系到我们普通百姓的安危。广东天波技术有限公司基于该考量提出了社会信息采集管理系统的概念该系统是顺应新形势下流动人口管理要求和发展趋势开发的新一代的流动人口管理系统项目以公部“三项建设”2 为依托即“大力推进公安信息化建设、加强执法规范化建设和构建和谐警民关系”。根据国家发展新一代信息技术战略要求完成公安机关完成信息化建设增加社会流动人口管理手段和方法通过与公安社会治安综合管理系统的有效结合构建一种具有高功效、低消耗、快速反应、协同作战的信息资源综合利用平台。社会信息采集管理系统由社会信息采集终端及身份鉴别平台两部分组成通过在各流动人口活动节点部署社会信息采终端收集流动人口活动信息通过身份鉴别平台进行比对鉴定信息真伪比对后的信息上报到省级及国家级公安社会信息综合管理系统形成全国流动人口流动信息网络完成对流动人口的基础信息数据库的建设并实现公安、劳动、计生委等各部门信息交互、补充和共享管理及服务好全国流动人口。在公安机关进行犯罪分子的侦查过程中常常根据宾馆的登记记录进行犯罪分子行踪的查找然而犯罪分子由于特殊的情况常常会使用假身份证进行登记身份信息和人的真实信息往往不相符而在登记的前台很难进行身份验证过程的判别同时只保留客人在宾馆中的登记信息而忽略一些其他有用的信息例如照片等公安机关所能查找的信息有限也给破案增加了非常大的难度。 本项目关注于在宾馆等场合的登记过程中所存在的缺陷希望能够在登记的过程时对人脸实时拍摄所得到的真实相片信息和身份证相片信息进行的相似度比对在宾馆客户端可以对身份证信息和人脸照片信息进行比对验证同时在公安局端保存登记信息的同时也能增加一些图像等信息提高公安对于犯罪分子的甄别能力保障人民的生命财产安全。本项目具有广阔的应用前景仅以深圳市 3 为例深圳有上千家宾馆旅店年均接待游客超过一千万人次若对这些场所的身份证验证系统进行升级将会带来非常大的经济效益。同时软件相关的服务不仅仅限于旅店在其他的场合例如公司或机关的人员签到学校的到课信息等都可以通过增加人脸验证功能来防止仿冒身份信息的情况的发生。论文的主要工作和组织结构本论文的主要工作在于论述面向流动人口管理的人脸验证系统的具体实现项目包括项目中所涉及的图像处理技术主要为人脸图像技术项目概要设计各个模块的详细设计等。第一章概述和前言部分主要介绍了本项目产生背景我国流动人口的现状项目的前景和展望。第二章主要介绍在项目中所涉及的关键性技术包括使用 Adaboost 算法进行人脸识别基于 PCA 算法的人脸质量评价以及人脸相似度匹配等三方面内容。第三章从需求分析和概要设计两个方面描述人脸真实性验证系统的概要设计部分概要设计部分涵盖对于项目的基本目标用户角色等进行概述在需求分析方面文章主要分析了人的基础需求和功能需求等。在概要设计部分主要论述对软件的设计目标结构总览以及对于不同的模块的概要设计。第四章项目各模块的详细设计和实现部分系统的三个模块(基于 Android 系统的摄像端前台图像采集端和公安局服务端)进行的详细设计和描述其中包括特定模块的内部和与其他模块的活动以及模块的详细设计包和类图以及对于各个类的方法描述等等。第五章总结该项目已实现的功能探讨项目的缺点和不足并指出该项目未来的扩展和发展方向。项目相关技术概述人脸检测技术人脸检测是人脸识别技术的第一步。对于人脸检测而言毫无疑问快速有效准确地在一个场景中识别出一个人脸是否存在是非常重要的。我们可以依据人的皮肤颜色对在图片或视频中动作人在视频中人头像的形状的表情或者将这些因素相结合作为人脸是否存在的依据。一旦这些关键性因素综合起来构成一个判断模型之后我们就可以对整个图像的各个不同大小区域进行穷举的方法检测各种不同大小的区块从而判定人脸是否存在。下面我所要介绍的一个人脸检测框架是一个十分通用的框架即基于机器学习的方法进行检测的框架也是现在绝大多数的人脸检测系统所采用的框架[1]。人脸检测技术框架机器学习的框架的核心在于通过学习大量的人脸数据和非人脸数据形成对人脸数据知识库再使用这样的一个知识库新的照片进行检测判断是否有人脸的存在。如图 2.1 所示图 2.1 人脸检测过程框架图Adaboost 算法人脸是一个具有高度结构化的区域在一些特征位置(例如眼睛等)和周围的皮肤都具有较强的对比度这些信息我们可以通过类哈尔特征[6]进行提取出来[2]将其作为弱分类器并且组合成强分类器用于对像素信息进行筛选判别。对于 Adaboost 算法而言我们的目标是获得一个强分类器,这个强分类器由多个简单的弱分类器所组成构建的方法为其中 x 是需要被分类的模式为 M 个弱分类器是正规化因子因此预测函数对于选取结果的置信值为。Adaboost 的计算流程如表 2.1:表 2.1 Adaboost 流程表输入步骤A、给定训练样本其中Nab,其中a个样本的yi1,b个样本的yi-1.B、弱分类器的数量M1、初始化A、对于yi1的样本我们初始化权重B、对于yi-1的样本我们初始化权重2、对于m1....MA、选择最佳的来最小化加权误差B、计算值C、更新并且将权值归一化为3、输出计算分类函数类标签预测人脸质量评价技术在项目的实际运用中我们在刷身份证的同时可能得到多个拍摄的图片信息但是在实际应用当中我们不可能将所有的图片都发送的到公安局服务端因此我们在客户端必须选取一个效果最好的即最接近人的正脸的照片进行分析比较。我们考虑使用主成份分析法[3](Principal Component Analysis 以下简称 PCA) 技术进行实现。PCA 技术概述计算机视觉所处理的对象通常为由信号感知器所生成的像素数组从表面来看对于图像而言组成它每一个像素都是一个维度因此一个 mn 的图像的维度大小为 mn。然而即使是对于中等大小的图片(例如 100*100)它的维度大小也为 10000。由于在像素级别的计算非常复杂因此我们可以考虑一种方法将图像的维度降低以便于有效地进行计算。由于人脸中的一个特定的像素和周围的像素具有非常高的关联度。任何一张正脸都大体上是对称的人脸鼻子耳朵都大致沿着中轴线对称分布因此这些人脸自然的性质决定了人脸可以摆脱使用像素空间表达方式而转而使用另外的一种表示方法这种表示方法称为人脸空间人脸空间也有一系列基向量组成向量的个数成为隐式维度。主成份分析(Principal Component Analysis PCA),是一个基于对多维度数据提取所需要的数量的主基向量成份(Principal Component)的维度降低方法其中第一主成份(主成份中的第一个向量)是拥有最大方差的向量第 n 主成份是在线性组合中拥有最大方差同时与前 n-1 个主成份垂直的向量。主成份的基本原理可以见图 2.2对应于样本数据点中方差最大的方向并且被选为第一主成分。在二维数据表示中第二主成分显然为垂直于第一主成分的向量而在更高的维度空间表示中根据方差最大并且垂直于之前所有已经求得的子空间的过程仍然将要继续。从图中可以看出我们将数据点从二维降低到一维之后在第一主成分所表述的一维子空间中具有更宽的表示范围。图 2.2 主成份分析例图主成份分析技术和 Karhunen-Loeve Transform4 有着非常密切的关系。KLT 是从信号处理技术中被用于对任意大小选取基向量集用于最小化重构误差。KLT 中的基础向量集的计算方法如下假设 X 是 N*M 数据矩阵它的列数据是 N 维数据在人脸识别应用中M 是有效的人脸的数量Nmn,KLT 基向量通过解特征值得到其中为数据的协方差函数是矩阵的特征向量值是对角矩阵在它的主对角线上包含特征值因此是对应于第 j 个特征值的特征向量。我们可以得到特征向量对应于特征值因此显而易见特征值大小为数据投影到子空间所得到的值因此为了实现 PCA 并且提取 k 个数据的主成份我们需将训练数据投影到)子空间群中[7]。人脸质量评价模型我们为了获得较好的人脸质量模型我们采用 FERET 数据库中的正脸模型进行人脸空间的训练的方法通过对新读入的人脸数据将其投影到所训练的正脸人脸空间中并且进行人脸重构后计算和人脸数据的误差值质量评价模型的计算框架为图 2.2 人脸质量评价框架图像预处理 对于所有正脸训练图像统一转化为40*40大小的图片并且进行灰度化归一化并将其转化为一维矩阵之后减去平均图像即获得需要进行训练的数据 2、获得基向量集 计算这些经过处理的样本数据的协方差矩阵并且使用PCA方法求解基向量集 将图像投影到基向量集空间 我们会得到和训练样本数量相同个数的基向量集但是我们只选取其中的前N个(N30)将需要分析的样本投影到这些子空间中在对图像进行处理之前也需要经过1中的预处理部分 从子空间中重构图像计算误差:人脸相似度对比技术人脸相似度比较模块中我们使用了一篇 CVPR 2010 中的论文[5]中提出一个流水线程序的方法图 2.3 人脸相似度匹配流程图该人脸匹配系统是一个双层的流水线结构上层是一个基于学习的描述子以下简称 LE descriptor提取流水线下层是一个适应于姿态变化(Pose-Adaptive)的人脸匹配流水线由图 2.3 所示我们首先使用一个标准基准点探测器来提取出人脸标志(人脸标志包括鼻子嘴巴等人特征部分的位置)不同的人脸部分将基于探测到的标志进行排列。DoG 过滤器[8]()将组件图像中的低频率和高频率的亮度数据过滤掉并且通过 LE encoder 进行加码操作获得一个低层次的 feature 向量最终结果是不同的组件被通过 PCA 进行降维和正规化操作之后得到的 LE descriptor 所描述。组件之间的相似度通过对应组件的 LE 描述子计算 L2 距离大小来进行衡量。最终结果则是通过由包括一组特定姿态的分类器pose-specific classifier的适应姿态的分类器(pose-adaptive classifier)将九个组件相似度数据求解而得。本章小结以上就是关于本项目中所使用的所有人脸图像处理的概述本人在项目中所使用的主要的算法为 2.1 和 2.2 部分故对 2.1 和 2.2 的描述比较详细。毫无疑问在每一个部分当中都有值得改进的地方包括在 2.1 部分中可以引入在相应的中进行基于视频的人脸检测方法以提高效率2.2 中的之类评价方法中我们也可以提供一些新的人脸评价方法包括计算对人脸计算偏差于正脸的的角度从而对于人脸质量有一个更加完善的评价模型。系统分析与概要设计项目整体概述项目基本目标本项目的目标在于实现一个用于宾馆的客户的身份认证系统客户在进入宾馆之后刷身份证宾馆服务端系统可以拍摄记录用户的真实相貌将身份证和用户的相貌信息传送到远端的公安系统公安系统可以验证身份证照片和用户相貌是否匹配并且将信息返回给宾馆服务端同时讲客户相片信息进行归档记录用于和犯罪库中的信息进行匹配验证查找是否有相应的犯罪信息。本项目是公共场合所使用的软件要求达到特定的实时性同时需要严格的安全和保密措施保障软件所涉及的人员的隐私安全。用户角色和功能需求图 3.1 项目用例图如图 3.1 所示项目包含一下几个角色前台使用者前台使用者通常为宾馆前台的登记人员登记人员依照普通的流程登记手续软件记录客户的相貌特征后向公安局服务端发送相貌特征信息和身份证卡片信息公安服务端返回相应的验证信息由前台使用者进行确认。顾客顾客为软件采集信息来源软件采集顾客信息后发送至前台进行处理顾客的隐私需要保密不得公开。资料管理人员资料管理人员主要为公安系统人员主要负责管理各个旅馆发送过来的数据管理并对数据进行保密处理。资料用于刑侦和分析使用。表 3.1 软件功能需求列表使用者操作软件反应前台使用者刷用户身份证将刷身份证时间点前后所采集到的有人像的图片进行评价将质量较好的一组或多组图像与身份证信息一起发送至公安局服务端前台使用者确认身份信息公安局服务端将分析后的结果发送至前台前台接受确认公安局所提供的信息。资料管理人员操作系统资料管理人员对来自各个宾馆发过来的数据进行分析具体内容待续系统的需求分析软件基础需求软件的基础需求包括对顾客的人脸采样信息发送信息分析信息存储等功能每一项的具体细节如表 3.1 所示:表 3.2 软件基础需求列表需求内容具体操作设备需求涉及人员人脸采样基于 Android 摄像机系统的设备安装于合适的位置并且实时采集图像当前台接受刷身份证登记信息后软件将采集到有人像的图片发送至公安局终端。个人电脑带 Android 操作系统的摄像采集设备蓝牙连接模块用于摄像采集设备和个人电脑直接的数据连接前台使用者顾客信息发送本步骤在人脸采样之后和信息分析之后在人脸采样之后将人脸信息和身份证照片信息发送到公安局终端.个人电脑网络连接模块前台使用者顾客信息分析信息分析为一个自动化的过程在公安局终端记录前台发送来的信息网络服务器个人电脑前台使用者信息存储信息存储将各个前台发送过来的数据进行归档存储包括人员信息登记记录人脸信息等网络服务器数据库资料管理人员项目活动图图 3.2 项目活动图如图 3.2 所示基于 Android 系统摄像机端从开始时即采集图像并且不断地对图像进行人脸的检测当检测到人脸的时候摄像机将图像发送回前台软件端前台软件端在刷身份证采集到人像之后将身份证人像和摄像机采集到的人像发送到公安局服务端由公安局服务端将两张照片中的人像进行比较得出相似度程度并且将结果返回给前台软件端公安服务端同时将人脸信息进行归档。相关其他需求项目的其他相关需求包括性能需求输入输出需求和数据管理需求这些需求规定了除功能需求之外的内容相关其他需求的内容如表 3.3 所示。表 3.3 相关其他需求列表性能需求以刷身份证时间点为开始系统提取人像信息的时间 1s 系统将人脸信息和身份证信息发送到公安局终端的时间 0.5s 公安局终端处理分析人脸时间 3s 公安局终端返回信息的时间 0.5s输入输出需求全局的输入主要就是鼠标的点击由使用者根据界面的提示做出相应的反应从而发出指令并且通过鼠标确认公安局终端返回的讯息。数据管理和需求所有上传到公安局终端的信息必须被归档处理具体的处理方式请见下一节软件概要设计。系统概要设计软件设计目标软件的设计必须符合软件的需求并且适应于软件可扩展的要求在软件设计过程中我们使用 UML 建模语言来描述整个软件系统和细节设计同时附有自然语言和编程语言。同时我们还对软件有如下限制:软件设计必须易于被操作人员使用软件开发易于被开发人员所参考开发系统结构总览图 3.3 设备部署图如图 3.3 设备部署图所示本系统主要由三大模块所构成分别为:基于 Android 系统摄像端前台图像采集软件端公安局服务端。基于 Android 系统摄像端设计基于 Android 系统摄像端设计如下不包括依赖于特定系统的相关方法如构造函数必须继承的类等等。图 3.4 基于 Android 系统摄像端概要设计图如图 3.4 所示videotake 包包括所有摄像端所有和采集图像相关的类主要包括VideoTakerBase 基类是抓拍和处理图像的基类processFrame(byte[])为处理摄像机实时传输过来的数据的接口用于处理将其转化为设备可读取的图像格式run()函数用于开启线程实时读取摄像机发送的数据。这个类的具体实现需要由其子类实现以适应不同的系统需求VideoTaker 图像处理具体实现类实现具体的处理函数类包括实现 processframe 函数将 byte[]图像转化为可读取的格式。Network 包负责管理和前台图像采集端进行网络传输相关的类。NetworkConnector 类管理无线网络连接负责同前台图像采集端的通信sendData(socket)方法负责将采集到包含人脸的图片发送到前台图像采集端。algorithm 包负责从采集到的图片中提取包含人脸的模块。FaceProcess 类负责人脸提取算法等相关操作由于在 Opencv 中通过载入分类器 XML 文件进行图像人脸的检测因此在类中包括 loadClassifier(Context)方法这个载入所需要的 XML 文件getBitmap(Mat,Mat)用于获得被处理之后的探测到的人脸图像。前台图像采集端概要设计图 3.5 前台图像采集端概要设计图如图 3.5 所示Internet 包负责管理和其他设备的数据连接包括和摄像机端和公安局服务端的连接DeviceConnector 类为数据接受类负责接受摄像机端传送过来的数据并且处理为图像其中 ReceiveData(socket)从摄像机端接受包含人脸的图像。run()用于开启子进程实时处理摄像机端发送过来的图片数据。InternetAccess 类为图像发送类负责和公安局服务端进行数据交流其中包括 receiveData(Socket)方法用于接受套接字中的数据主要是比较结果sendData(Socket, Bitmap)负责将图片发送到公安局终端。Command 包包含特定动作实现的类包括Commander 类:定义动作实现和相关方法,actionTaken()负责图像采集端接收到身份证信息后采取的动作。Imageprocess 包包括处理和照片相关类的操作ImageprocessBase 类定义处理数据的多个方法为将数据发送至公安局客户端之前所必须要进行的相关操作。Searchpics()为搜索登记时间点前后的图像imageProcess 为对图像进行预处理函数faceAlignment 为对人脸进行纠正的函数对人脸进行相应的纠正以获得更好的处理效果。Imageprocess 类负责实现基类中的多个方法。公安局终端概要设计图 3.6 公安局终端概要设计图如图 3.6 所示Internet 包负责和前台图像采集端进行网络数据交互。InternetAccess 类负责主要负责和前台图像采集端进行交互主要包括两个方法receiveData(Socket)从套接字中获得图片sendData(Socket,byte[])负责将验证结果返回给图像验证端。Analysis 包包含对于数据进行处理的类其中包括DataAnalysisBase 类为用于比人脸的相似程度Compare(byte[],byte[])方法为虚函数的原因主要是为了适应于算法的变化。DataAnalysis 类为具体实现基类中的具体的方法。Datastore 包包含处理存储图像数据的类。DataStore 类负责存储搜集到的图像数据storeData 方法将其保存到数据库中。各模块交互图图 3.7 系统交互图如图 3.7 所示基于 Android 系统摄像端接受刷身份证端的 actionTaken()操作之后将图片使用sendData(data)将图片发送到前台图像采集端图像采集端使用 senddata(socket)将图片通过套接字发送至公安局服务端公安局服务端通过 storeData 函数保存到数据库中并且将比较结果返回到前台图像采集端。本章小结在本章中我们对系统中不同的模块进行概要设计规定了相关的设备之间的接口和活动方式对于指导我们软件的具体实现具有重要的意义。项目各模块的详细设计与实现基于 Android 系统摄像端模块概述基于 Android 系统摄像端模块的作用在于客户在登记过程中拍摄一组用户的照片并且将其发送至前台图像采集端用于进行同身份证读卡器的分析比较。为了节约摄像端和前台图像采集端之间的流量我们在摄像端上置有人脸检测模块只有当摄像机检测到人脸的时候我们才将场景图片发送到 pc 端否则不发送。我们在摄像端模块中使用了一个 Opencv for Android 第三方类库Opencv 是一个针对图像处理的一个开放类库而针对 Android 平台Opencv 专门为其定制了专用的 Java 类库在人脸检测部分Opencv 提供一个已经经过训练过的 XML 数据并且提供相应的方法载入 XML 数据后对特定的图像进行不同维度的搜索并且返回符合条件的区域。摄像端模块必须和图像采集端模块在同一局域网内这样 Android 可以将拍摄到人脸的图片发送的图像采集端进行处理。图 4.1 基于 Android 系统摄像端活动图如图 4.1 所示摄像端实时检测并且拍摄场景中的一帧读取数据并且通过载入的分类器文件判断人脸是否存在如果存在即将图片数据发送到图像采集端。基于 Android 系统摄像端模块的详细设计图 4.2Android 摄像端模块包设计图基于 Android 系统摄像端模块一共包含三个包:algorithm,view,和 network 包分别负责算法处理网络传输和显示在算法处理部分算法在于人脸训练数据对拍摄过来的图像进行实时的人脸探测并且当有人脸的时候调用 network 中的 NetworkClient 类将数据发送到图像采集端.view 包中 GraphicsView 具体负责拍摄数据将相片数据发送给 algorithm 进行人脸探测。algorithm 包详细类设计图 4.3 algorithm 包详细类设计图IGetBitmapInterface 接口是为 NetworkFaceAlgoithm 提供使用 opencv 处理图像的接口getCapturedBitmap(Mat,Mat)方法中对彩色图像从 Opencv 的 Mat 格式提取出可阅读的 Bitmap 图像。FaceAlgorithmBase 类是实现对人脸算法的实现方法的基类loadClassifier(Context,int)是载入分类器数据getCapturedBitmap(Mat,Mat)为实现将 Mat 数据转化为 Android 可识别 Bitmap 格式。其中人脸检测的方法如表 4.1 所示。NetworkFaceAlgorithm 类为实现将 Bitmap 数据发送到图像采集端中 getCapturedBitmap(Mat,Mat)包含将图像网络发送的方法。表 4.1 人脸检测代码附录表public Bitmap getCapturedBitmap(Mat rgba, Mat gray) { ListRect listFaces null; If (mCascade ! null) { int height gray.rows(); int faceSize Math.round(height * minFacesize); listFaces new LinkedListRect(); mCascade.detectMultiScale(gray, listFaces, 1.1, 2, 2, new Size( faceSize, faceSize));//人脸检测方法 } Bitmap bmp Bitmap.createBitmap(rgba.cols(), rgba.rows(), Bitmap.Config.ARGB_8888); if (Utils.matToBitmap(rgba, bmp)) { if (listFaces.size() 0) {//如果检测到人脸即将其发送至PC端 NetworkClient netClient new NetworkClient(strServerIpAddress); netClient.sendPictureData(bmp); return bmp; } } bmp.recycle(); return null; }network 包详细类设计图 4.4 network 包详细设计类图NetworkClient 类为实现和将图像发送至前台图像采集端NetworkClient(String)为构造函数并且设置前台图像采集端的 ip 地址sendData(Bitmap)将图像传送至前台图像采集端由图像采集端搜集图像。view 包内详细类设计图 4.5 view 包详细类设计图view 包中包括所有和软件界面设计相关的类其中包含AndroidTerminal 类设计中AndroidTerminal(Context)为构造函数实现在 Activity 生成之前所需要的操作onCreate(Bundle savedInstanceState)为界面生成时所需进行的操作onCreateOptionsMenu(Menu)为菜单创建时所调用的函数onOptionsItSelected(MenuItem)为菜单中某个选项进行选择时所需要进行的操作。GraphicsViewBase 类设计GraphicsViewBase 类是程序界面的基类其中 onDraw(Canvas)为在界面上的画图方法processFrame(byte[])为对图像数据的处理函数实现将其转化为 Bitmap 格式图像run()函数为实时处理图像函数。surfaceChanged(SurfaceHolder,int,int,int)为界面发生变化是调用的函数界面变化主要是指 Android 系统重力发生改变时所调用的函数surfaceCreated(SurfaceHolder)为界面创建时时调用的操作这个函数在在 Activity 生成之后发生调用surfaceDestryed(SurfaceHolder)为界面消除时所调用的函数包括关闭界面释放资源等。GraphicsView 类是对父级的类的继承主要对以下的函数进行重构并实现其中 onDraw(Canvas)方法和 processFrame(byte[])方法。基于 Android 系统摄像端模块通信图图 4.6 Android 各模块通信图如图 4.6 所示 GraphicsView 类通过调用 processFame(byte[])调用 NetworkFaceAlgorithm 类用于检测场景中包含的人脸图像NetworkFaceAlgorithm 类使用 getCapturedBitmap(Mat,Mat)调用 NetworkClient 类将图片发送到前端图像采集端。基于 Android 系统摄像端模块总结基于 Android 系统摄像端需求中实现所需要的对人脸检测发送至端图片的功能摄像端模块在部分功能上还有一定的改进空间例如摄像端可以只传回人脸的照片而不是整个场景的的图片以节省流量。同时Opencv 在 Android 上的效率比较低因为 Opencv 对人脸检测是对一张张静态图片进行检测而实际上在现有的方法中可以对视频流中的人脸进行检测而且效率更高。前台图像采集端模块的实现前台图像采集端模块详细设计图 4.7 前台图像采集端详细设计图前台图像采集端程序是用于读取身份证信息和接受摄像端发送过来的图片并且将其发送至服务端用于比较我们使用的身份证读卡器设备为 CPIDMR02/TG 台式居民身份证阅读器可以将身份证中的数据提取出来包括身份证照片将其发送值服务端进行相似度匹配计算。前台图像采集端的设计主要分为五块PCTerminal 包中为界面设计主界面类为 MainForm他定义了主界面上的各种按钮的相应方法ServerInfoForm 类显示本机的 ip 信息。Network 包封装了网络连接所需要的模块包括接受 Android 所发送过来的信息的 Server 类和将数据发送到公安局端的 ConnecttoPolice 类。ConnectDevice 包中 DeviceInfo 负责连接设备其中接收到的身份证卡信息由 Clientinfo 定义FileArrangement 包定义了对文件的管理方法。PCTerminal 包图 4.8 PCTerminal 包详细设计图主界面基本画面图 4.9 所示图 4.9 主界面基本图PCTerminal 包中的类如图 4.8 所示MainForm 类主界面设计类主界面包含所有按钮等交互的相应方法。GetRecentpicBtn_Click(object,EventArgs)为按下“获得拍摄图像”按钮所进行的操作。OpenServerBtn_Click(object,EventArgs)方法为打开本机服务端用于接受 Android 设备发送过来的图像数据。ReadCardBtn_Click(object,EventArgs)启用读卡器设备用于准备接受身份证的卡片信息。ReadInfoBtn_Click(object,EventArgs)读取卡片信息显示数据。ResizeBitmap(Bitmap,int,int)将图像修改大小以适应窗口的某一块区域的需要。SendImgBtn_Click(object,EventArgs)发送图片数据到服务器。ServerInfoForm 类为提示服务信息窗口包括提示图像采集端的 ip 地址打开的端口信息。ServerInfoForm 为构造函数。CloseWindowBtn_Click(object,EventArgs)为关闭窗口调用方法GetServerIpAddress 方法用于获取本机的 ip 地址。PCTerminal.Arrangement 包具体设计图 4.10 PCTerminal.Arrangement 详细设计图Fileprocess 类用于管理接收到的图像文件数据Fileprocess(Socket)方法为构造函数从 Socket 中接受发送过来的数据并且将其处理并保存。processSocket(object)用于开启子线程进行图片数据的读取。PictureArrange 类用于检索发送过来的图片getRecentFile()用于获得最近发送过来的图片集信息。getRecentFile()获得最近发送过来的照片集用于对图片质量进行分析。PCTerminal.ConnectDevice 包具体设计图 4.11 PCTerminal.ConnectDevice 包详细设计图DeviceInfo 类封装了身份证内的所有的信息包括住址生日性别身份证号码等等已经一些对于设备的操作函数CloseCardReader()为关闭读卡器方法。GetErrorTextW(StringBuilder,UInt32)用于获得错误信息和错误代码。GetPersngonMsgW(PERSONINFOW,string)用于读取卡片并且获得个人信息。OpenCardReader(Int32,UInt32,UInt32)用于打开读卡器使读卡器进入准备读取信息状态。PCTerminal.Clientinfo 包具体设计图 4.12 PCTerminal.Client 详细设计图ClientInfo 类是对 DeviceInfo 类的一个扩展DeviceInfo 中虽然记录了一些身份证卡的基本信息但是没有记录类似于人脸头像信息并且日期的格式也需要进行调整因此在本类中 ConvertDate(string,int)方法将将日期格式转化为特定的易于读取的格式。PCTerminal.Network 包详细设计图 4.13 PCTerminal.Network 包详细设计图ConnecttoPolice 类封装了连接公安局服务端的重要方法包括连接服务器和发送文件数据。ConnecttoServer(string,Int32)方法为连接到公安局服务端的方法请求成功则成功运行否则报错。SendFile(String)向公安局服务端发送照片文件。Server 类封装了接受 Android 发送过来的图片的方法为了保证图片的唯一性我们使用当前时间对文件进行命名。Run()不断接受 Android 发送图片的请求并且将图片保存到硬盘上ExecuteThread 执行 Run()方法。前台图像采集端与其他模块交互图图 4.14 PC 端与其他模块交互图如图 4.14 所示前台图像采集端使用 run()方法实时监控并读取照片在获得照片之后使用 ConnecttoServer()方法发送至公安局服务端公安局服务端获得比较结果返回给前台图像采集端。前台图像采集端设计总结前台图像采集端实现了需求所规定的相应内容包括接受基于 Android 系统摄像端发送图片发送到公安局服务端以及读取身份证卡片信息等内容但是例如质量评价等模块还尚未集成到代码中。同时整个设备还需要进行调整例如要集成到现有的系统中这些都需要获得相关单位的资料之后才能进行扩展。公安局服务器端设计公安局服务端详细设计公安局服务端的内容为接受前台图像采集端发送的图片数据并且进行相似度比较相似度的比较的模块由香港中文大学所开发。公安局服务器和前台图像采集端之间使用套接字进行连接传输文件。人脸相似度比较的接口的计算方法是通过输入两个图片的地址方法给出相似度值值越大则相似度越大核心代码为表 4.2 服务端相似度判别代码附录表double dscore m_pFaceRecogn-FaceVerification(L.\\testdata\\1.jpg, L.\\testdata\\2.jpg); begin_fe (GetTickCount() - begin_fe)/1000; wprintf(LRecongition Cost: %f Second\n, begin_fe); if( dscore 0.2f )//评价函数返回值大于 { wprintf( LFace Similarity Score: %f, same person!\n, dscore); } else { wprintf( LFace Similarity Score:%f, diff person!\n, dscore); }公安局服务端活动图图 4.15 公安局服务端活动图如图 4.15 所示公安局服务端实时接受客户端套接字请求请求接受之后接受前台图像采集端的照片进行相似度比较之后将结果返回给采集端。公安局服务端套接字类图设计图 4.16 服务端详细设计类图CServerSocket 类为公安局服务端为接受前台图像采集端发送图片的处理类init()方法初始化网络连接所需要的操作run()方法用于实时对端口进行监听和接受文件的操作receiveFile(CString)用于将获得到图片保存到特定的地址内。公安局服务端设计总结服务端基本实现了接受客户端发送图片和判断相似度大小的功能关于需求中提出的相关其他需求例如资料归档等操作本系统尚未实现需要继续给予改进。总结与展望总结本人在中科院深圳先进技术研究院的乔宇老师张维老师和李志锋老师香港中文大学的张伟伟老师的指导下实现了对项目的基本实现包括基于 Android 摄像端拍摄景象和探测人脸代码模块前台图像采集端读取身份证照片和接受摄像端端发送过来的图片功能公安局服务端接受前台图像采集端发送过来的图片并且将图片的相似度进行研究比较的功能以及文档的写作包括需求分析文档概要设计文档和详细设计文档等以及对于相关的人脸检测人脸质量评价等相关实验。本人在项目开发过程中严格按照了本科阶段所学习的软件工程的各项方法和步骤(需求分析概要设计详细设计等)进行开发对本科阶段的学习知识有了较好的总结。另外在本项目中对图像的相关技术的学习也让我对未来的研究生学习积累了较好的经验。展望本项目作为深圳市所支持的重点项目之一未来的发展前景非常可观。在维护社会安全提高经济效益以及项目的可扩展性上具有很大的发展前景。同时本人基于该项目在网上建立了一个人脸图像实验室 4作为我在研究生阶段所进行研究的目标进行完善人脸科学在图像科学研究中占有非常重要的位置从对于人脸图像技术的不断完善研究我相信经过研究生阶段的努力一定能够在人脸图像技术上取得比较深的造诣。参考文献Constantine P. Papageorgious, Michael Oren, Tomaso Poggio, A general framework for object detection, In international Conference on Computer Vision,pages 555-562 1998 Viola and M.Johns, Robust real time object detection, In IEEE ICCV Workshop on Statistical and Computational Theories of Vision, Vancouver, 2001 Jollifffe, Principal Component Analysis, Springer, New York,1986 MM Loeve Probability Theory,Van Nostrand,Princeton,1955 Cao, Q.Yin, X.O Tang, J.Sun Face Recognition with Learning-based Descriptor In Computer Vision and Pattern Recognition 2010 Stephane G. Mallat.A Theory for Multiresolution Signal Decomposition: The Wavelet Representation. 1987 Stark, Henry; Woods, John W. (1986).. Prentice-Hall, Inc. . Michael W. Davidson, Mortimer Abramowitz附录1 关于广东天波技术有限公司的信息参见关于公安部的三项建设参见深圳市旅游信息参见请参加人脸图像实验室 http:///www.ntufacelab.com致谢感谢在深圳指导本人的乔宇老师张维老师李志锋老师和张伟伟老师对论文和工程的指导。感谢在本科阶段南京大学的陈道蓄郑滔赵志宏邵栋王浩然丁二玉刘海涛贝佳刘钦宋健建葛季栋刘嘉老师等在本科阶段对本人的培养和教育。