基于Androi面部识别技术研究最终上传版.doc_第1页
基于Androi面部识别技术研究最终上传版.doc_第2页
基于Androi面部识别技术研究最终上传版.doc_第3页
基于Androi面部识别技术研究最终上传版.doc_第4页
基于Androi面部识别技术研究最终上传版.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

分类号 分类号 TP391 4 U D C D10621 408 2012 0714 0 密密 级 公级 公 开开 编编 号 号 2008023028 成成 都都 信信 息息 工工 程程 学学 院院 学学 位位 论论 文文 基于基于 AndroidAndroid 编程平台的面部识别技术研究编程平台的面部识别技术研究 论文作者姓名 论文作者姓名 钟铺俊钟铺俊 申请学位专业 申请学位专业 生物医学工程生物医学工程 申请学位类别 申请学位类别 工学学士工学学士 指指导导教教师师姓姓名名 职职称称 王保强 教授 王保强 教授 论文提交日期 论文提交日期 2012 年年 06 年年 01 日日 独 创 性 声 明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作 及取得的研究成果 据我所知 除了文中特别加以标注和致谢的地方 外 论文中不包含其他人已经发表或撰写过的研究成果 也不包含为 获得成都信息工程学院或其它教育机构的学位或证书而使用过的材料 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确 的说明并表示谢意 签名 日期 2012 年 6 月 09 日 关于论文使用授权的说明 本学位论文作者完全了解成都信息工程学院有关保留 使用学位 论文的规定 有权保留并向国家有关部门或机构送交论文的复印件和 磁盘 允许论文被查阅和借阅 本人授权成都信息工程学院可以将学 位论文的全部或部分内容编入有关数据库进行检索 可以采用影印 缩印或扫描等复制手段保存 汇编学位论文 保密的学位论文在解密后应遵守此规定 签名 日期 2012 年 6 月 09 日 基于基于 AndroidAndroid 编程平台的面部识别技术研究编程平台的面部识别技术研究 摘摘 要要 随着 Google 与 33 家手机制造商 手机供货商 软硬件供货商 电信业者联 合组成的开放手机联盟 Open Handset Alliance OHA 在 2011 年 11 月 5 日发 布名为 android 的开放手机平台 Android 就以原始码操作系统平台 免费应 用程序开发环境 在手持设备 尤其在手机上的应用得到了飞速的发展 本文的 主题就是基于 android 编程平台 利用手持设备对面部识别技术的研究 研究内容 使用智能手机采集人脸图像 并对人脸图像进行预处理 让其达 到相关识别算法的要求 适合与人脸库里面的图像进行对比 得出识别结果 研究方法 首先由 Android 手机获取人脸图像 对人脸图像进行预处理 彩 图灰度化 直方图均衡化 图像的平滑滤波等 再通过 Java Native Interface JNI 规则将 Open CV 平台与 android 平台实现类库共享 利用 Principal Component Analysis PCA 算法对人脸图像进行特征提取 获得特征向量 特征脸 完成 训练阶段 最后 将待识别的人脸图像投影到特征向量 通过最邻近法得到与特 征向量最近的人脸图像完成识别阶段 从而识别此人的身份 研究结果 本文利用 PCA 算法对人脸进行识别 通过降维的方法减少了计 算量 降低了程序对硬件的要求 同时识别率较高 具有一定的使用价值 但是 存在一个问题 拍照时手机离人脸的距离存在差异 提取到的人脸图像也有所不 同 这样就影响了识别率 关键词关键词 Android JNI Open CV 图像预处理 面部识别 PCA Study of the face recognition technology based on the android platform programming Abstract With the publication of the open mobile phone platform called Android in November 5th 2011 Android was taking shape rapidly in the field of handheld devices and especially in the field of the application of the mobile phone with the tapping environment of the source operating system platform and the free application program The open mobile phone platform was published by Google and the Open Handset Alliance which is consisted of 33 mobile phone manufacturers and suppliers the software and hardware suppliers and the Telecommunication companies The topic of my paper is to study the facial recognition technology making use of the handled devices which is based on the program platform of android The main contents of this paper are as following First it uses intelligent mobile phone to get the image of human face Then it adjusts the face image to meet the need of the relative recognition algorithm And last it compares the face image with the ones in the storeroom of the face image to get the result of the recognition The major methods of this paper is as following firstly getting the face images from the Andrews phone and making a pretreatment to the face images such as wallpapers graying histogram equalization smoothing filter of the images and so on secondly achieving the class library sharing of the Open CV platform and the Android platform through the rules of the Java Native Interface And then using Principal Component Analysis method to pick up the features of the face images to obtain the eigenvectors which is the eigenvectors face in order to finish the training stage thirdly making the face images which are to be identified project onto the eigenvectors and getting the face image which is the nearest to the eigenvectors with the method of the closest to finish the recognition phrase Thus the person s identity is identified The results of this paper are as followings Firstly the calculation will be reduced and the requirements of the program on the hardware will be lowered with the methods of the Principal Component Analysis and the dimensionality reduction in the recognition of people s face Meantime the recognition rate will be improved PCA method has some practical values However when taking a photograph it will cause one problem that the extracted face images will be different due to the difference of the distance between the phone and the face Thus the recognition rate will be influenced Key words Android JNI Open CV Image preprocessing Face recognition PCA 目目 录录 1 引言 1 1 1 背景和意义 1 1 2 人脸识别技术研究现状 1 1 3 本课题研究意义 2 1 4 本文主要内容及结构 3 2 研究方案及技术路线 4 2 1 研究内容 4 2 1 1 研究对象 4 2 1 2 制约识别率的关键问题 4 2 2 研究方案 4 2 2 1 相关人脸识别算法比较 4 2 2 2 运用程序功能分析 5 2 2 3 研究方案的确定 6 2 3 技术路线 6 3 人脸图像获取 7 3 1 ANDROID编程平台 7 3 1 1 Android 开发平台搭建 7 3 1 2 Android 开发简介 8 3 2 人脸图像获取 9 3 2 1 Android 应用程序组件 Activity 简介 9 3 2 2 相关文件夹建立 11 3 2 3 控制照相机照相 11 4 图像预处理 12 4 1 彩图灰度化 12 4 2 直方图均衡化 13 4 3 图像平滑滤波 14 4 4 边沿检测 15 4 5 人脸部位提取 17 5 PCA 算法及实现 18 5 1 ANDROID NDK 简介 18 5 2 PCA 算法原理分析 18 5 2 1 训练阶段 19 5 2 2 识别阶段 20 5 3 OPEN CV 实现 PCA 算法 20 5 3 1 Open CV 简介 20 5 3 2 PCA 算法实现 21 5 4 SO 库文件编译 21 5 4 1 JNI 规则 21 5 4 2 库文件编译 23 6 研究结果及分析 24 7 总结 25 7 1 全文总结 25 7 2 前景展望 25 参考文献 27 致 谢 28 附 录 29 附录一 图像预处理效果图 29 附录二 程序界面截图 29 1 1 引言 1 1 背景和意义 21 世纪是移动互联网发展的时代 未来也是移动互联网的时代 移动互联网 的发展对人类的生活产生了巨大的影响 而移动手持设备正是在 3G 移动互联网 时代得到了飞速的发展 手机已成为人们普遍使用的小型移动设备 2007 年 11 月 5 日 android 智能手机操作系统正是发布 由于其开放性 可定制性得到了众 多手机制造商的重视 2011 年第一季度 Android 在全球的市场份额首次超过塞 班系统 跃居全球第一 2012 年 2 月数据 Android 占据全球智能手机操作系统 市场 52 5 的份额 中国市场占有率为 68 4 Android OS 是 Google 发布基于 Java 并运行在 Linux 内核上的手机操作系统 Android 操作系统采用分层架构 从高层到底层一共四层 分别是应用程序层 应用程序框架层 系统层和 Linux 核心层 而 Android 底层方面使用 C C 语言 作为开发语言 随着 Android 的快速发展 如今已允许开发者使用多种编程语言 来开发 Android 应用程序 从而受到众多开发者的喜爱 成为真正意义上的开放 式操作系统 2 随着移动互联网的发展 手机已经超越了它最初的设计本能 它不仅仅应用 于通讯这单一功能 还是移动的支付平台 管理着用户的众多信息 所以手机的 信息安全也成为急于解决的技术问题 本文就是运用 Android 编程平台 在手机 上进行人脸识别技术的研究 从而对手机使用者的身份进行确认 保障手机所有 者的信息 财产等安全 1 2 人脸识别技术研究现状 人脸识别的研究历史比较悠久 Galton 在 1888 年和 1910 年就分别在 Nature 两篇关于利用人脸进行身份识别的文章 自动人脸识别的研究最早的论文出现于 1965 年 Chan 和 Bledsoe 在 Panoramic Research Inc 发表的技术报告 近年来 人 脸识别更是得到了长足的发展 每年都有大量的学术论文发表 人脸识别研究的 历史现状大体划分为以下三个阶段 1 第一阶段 1964 1990 这一时期人脸识别通常作为一个一般性的模式识别问 2 题被研究 所采用的技术方案是基于人脸几何结构特征的方法 这集中体现在人 们对于剪影的研究上 人们对面部剪影曲线的结构特征提取与分析进行了大量研 究 人工神经网络也一度被研究员用于人脸识别问题中 第二阶段 1991 1997 在这短暂的时间里人脸识别技术进入高潮期 硕果累 累 不但诞生了若干代表性的人脸识别算法 而且出现了商业化运作的人脸识别 系统 最为著名的 Identix 的 FaceIt 在这一阶段所提出的算法在理想图像采集条件 对象配合 中小规模正面人 脸数据库上达到了非常好的性能 从技术方案上来看 2D 人脸图像线性子空间 判别分析 统计表观模型 统计模式识别是这一阶段的主流技术 第三阶段 1998 现在 由于主流的人脸识别技术对光照 姿态等非理想条件 或是用户不配合造成的变化条件下鲁棒性比较差 因此成为时下研究的热点 如 此同时商业系统进一步发展 而非线性建模方法 统计学理论 基于 Boosting 的学习技术 基于 3D 模型建模与人脸识别方法等逐渐成为备受重视的技术发展 趋势 人脸识别技术是从最初的单一的正面灰度图像的识别 经过对多姿态人脸识 别研究 发展到能够实现动态识别 目前正在向三维人脸识别的方向发展 与其 他的学科不同的是 人脸识别技术融合了数字图像处理 计算机图像学 模式识 别 计算机视觉 人工神经网络和生物特征等多个学科的理论和方法 另外人脸 自身所处环境的复杂性 如表情 姿态 图像的环境光照强度等条件的变化以及 人脸上的遮挡物等 都会使人脸识别方法受到很大的影响 因此 人脸识别技术 仍然是 21 世纪具有挑战性的课题 1 3 本课题研究意义 人脸识别 是一种基于人的脸部特征信息进行身份认证的生物特征识别技术 相比指纹识别技术 人脸识别具有非接触 识别速度快 准确率高等优点 因而 深受欢迎并且应用广泛 特别是比起 IC 卡更具发展优势 除了重要行业和领域 的应用外 人脸识别技术在智能门禁 门锁 考勤 手机 数码相机 智能玩具 等民用市场也有着广泛的应用 人脸识别主要有一下几种应用 身份鉴定 在鉴定模式下 可以快速的计算出实时采集到的面纹数据与人脸 数据库中的已知人员的面纹数据之间的相似度 给出一个按相似度递减排列的可 能的人员列表 或是简单的返回鉴定结果和相对应的可信度 身份鉴定可用于电 3 脑 网络安全 银行业务 智能访问控制 边境控制等领域 身份确认 在确认模式下 面纹数据可以存储在智能卡中或是数码记录中 只需要简单地将实时面纹数据与存储的数据相比对 如果可信度超过一个指定的 值 则比对成功身份得以确认 视频监控应面像捕捉 人脸识别技术可以再监控范围中跟踪一个人和确定的 位置 1 面像数据压缩能将面纹数据压缩到小于 84 字节以内便可以应用于智能卡 条形码或是其他存储空间有限的设备中 近年来 随着欧美发达国家人脸识别技术开始进入实用阶段后 人脸识别迅 速成为市场热点 据调查报告显示 2007 年全球生物识别市场收入超过 30 亿美 元 并且今后 5 年内将以每年 8 亿美元的幅度递增 9 新技术的应用带来了全新的数字化生活方式 可以想象 在人脸识别时代 走入地铁需要刷卡 去银行取钱需要输入密码 上班考勤需要按指纹等方式都将 改变 1 4 本文主要内容及结构 本论文所完成的任务是基于Android编程平台 在Android手机上实现人脸识 别功能 对手机使用者的身份进行确认 保证手机所有者的信息 财产安全等 本论文在总体结构上共分为5章 第1章引言 本章介绍了Android和人脸识别的背景 意义 第2章研究方案及技术路线 本章主要介绍人脸识别的各种算法 方案和实 现的技术路线 第3章图像的获取 本章介绍了Android编程平台的基础知识 并通过控制手 机摄像头进行人脸的捕捉 人脸数据库的建立 图像的存取 第4章图像预处理 本章介绍了相关图像处理的算法以及实现 其中包括彩 色图像的灰度化 灰度图像的直方图均衡化 图像的平滑滤波 边缘检测等 第5章PCA算法及实现 本章介绍了JNI规则 以及Open CV编程平台与 Android编程实现类库的共享 利用Open CV实现PCA算法 第6章研究结果及分析 本章对研究结果叙述 以及分析 第7章结论 对全文进行总结 并对该课题的前景进行展望 4 2 研究方案及技术路线 2 1 研究内容 2 1 1 研究对象 本文涉及的研究对象是从智能手机的摄像头获取的人脸图像 并对人脸图像 进行一定的处理 让其达到相关识别算法的要求 适合与人脸库里面的图像进行 对比 得出结果 2 1 2 制约识别率的关键问题 目前随着人脸识别技术的发展 在识别率方面有了较大的提高 但是在相关 技术方面仍然面临着诸多问题 主要表现在以下几个方面 1 采集设备 采集设备的性能和采集时的设置使得获取的人脸图像数据的变 化较大 如何解决这个问题也值得关注 2 光照 背景的影响 光照是影响人脸识别性能的最关键因素 背景的不同 也影响着识别的准确率 对该问题的解决直接关系着人脸识别应用程序的可靠性 识别的准确率 3 人脸姿态 人脸姿态也是目前人脸识别实用化的一个巨大的障碍 如何将 各种姿态统一到标准人脸 也是提高识别准确率的关键之所在 4 表情问题 人脸表情的不同也会影响数据的采集和提取 这也将影响到后 期的算法处理 2 2 研究方案 2 2 1 相关人脸识别算法比较 人脸识别的方法大致可以分为基于几何特征的方法 基于模板匹配的方法 隐马尔可夫模型的方法 基于神经网络的方法 特征脸方法 1 基于几何特征 几何特征的识别方法首先将人脸用一个几何特征矢量表示 用模式识别中的层次聚类思想来对人脸进行识别 几何特征矢量是以人脸器官的 形状和几何关系为基础的特征矢量 其分量通常包括人脸自定两点间的欧氏距离 5 曲率 角度 人脸器官的关键点分别对应于不同的积分投影方式产生的波峰波谷 2 基于模板匹配 模板匹配的方法大多是用归一化互相关 直接计算两幅图 像之间的匹配程度 由于这种方法要求两幅图像上的目标要有相同的尺度 取向 和光照条件 所以预处理要做尺度归一化和灰度归一化的工作 识别时 未分类 的图像跟数据库中的所有图像数据进行比较 采用相关作为典型的匹配函数 3 隐马尔可夫模型 隐马尔可夫模型 hidden Markov model HMM 是用于 描述信号系统特征的一种常见的统计模型 被广泛应用于语音判定中 人脸面部 特征的分布都依照一种自然的顺序 即从上到小 从左到右 即使人脸在平面和 垂直方向上发生旋转 这种顺序也不会变化 但是实现起来的难度较大 4 基于神经网络识别 神经网络的方法是近年来比较活跃的一个研究方向 人工神经网络 ANN 是一种以大的量处理单元 神经元 为节点 处理单元之 间实现加权值互联的拓扑结构 处理单元是人类大脑神经单元的简化 Cottrell 等 人使用级联BP 神经网络进行人脸识别 对部分受损的人像 光照有所变化的人像 个人识别能力较好 但是神经元数目通常很多 训练时间很长 具有固有缺陷 收敛速度慢 容易陷入局部极小 先验参数多且参数的确定凭经验而定 8 5 特征脸识别 特征脸法是人脸识别中常用的一种方法 该方法主要是从人 脸图像的全局出发 运用K L变换理论 在原始人脸空间中求得一组正交向量 并以此构成新的人脸空间 使所有人脸的均方差最小 达到将为的目的 降维的 思想 降低了运算量 有利于此算法运用于硬件配置相对中低端的手持设备中 但是此算法也存在缺陷 特征脸方法容易受角度 光照 表情等干扰导致识别率 下降 通过以上算法的介绍 结合算法的特征还有应用的平台 我们选择PCA算法 它可以为我们减少大量的计算 从而提高程序运行的效率 因为实在手机上运行 我们更应该考虑到运算量的大小 综合考虑本文的主要算法实现我们采用PCA算 法 2 2 2 运用程序功能分析 本文应用程序最主要的功能就是要能识别出人脸 首先该系统需要对通过摄 像头拍照而获取到的原始的人脸图片进行一系列处理才可进行下一步的工作 该 处理过程也称图像预处理 预处理这个模块在整个人脸识别系统的开发过程中占 6 有很重要的地位 只有预处理模块做的好 才可能很好的完成后面的特征提取这 一关键模块 因此本设计中所要完成的主要功能如下所述 图像的获取功能 主要是通过手机摄像功能获取人脸图像 图像的存取功能 在手机 SD 卡中建立相关文件夹 用于存取人脸图像 其 中包括训练图像 待识别图像以及相关的数据 图像的预处理功能 主要是对获取的图像进行灰度化 直方图均衡化 平滑 滤波 边缘检测等处理 图像特征提取的功能 按照 PCA 算法对图像进行特征提取 识别功能 这部分功能主要实现待识别图像与训练后图像数据进行比对 得 出相应的结果 2 2 3 研究方案的确定 通过以上分析本文的研究方案确定为以下几点 熟悉 Java 编程语言为进一步熟悉 Android 编程平台打下基础 初步实现利用 Android 手机实现拍照和存取功能 进一步学习数字图像处理相关知识 为图像的预处理打下坚实的基础 研究 各图像处理的算法 然后进行编程运行 通过编程的实际运行效果进行相应的变 换 改进 主要预处理步骤如图 2 1 图像预处理层次图 图像预处理 彩色图像的灰度化灰度图像的直方图 均衡化 图像的平滑滤波图像的边缘检测 图 2 1 图像预处理层次图 图像预处理获取标准人脸后 学习人脸识别相关算法 对主要人脸识别算法进行总结 归纳 确定本课题人脸识别算法 并对算法认真理解 研究 最终实现人脸识别算法 完成 本课题要求 2 3 技术路线 由以上分析 技术路线如图 2 2 人脸识别技术路线 7 相关文献 阅读学习 C C Java 基础复习 数字图像 处理学习 初步框架 构想 图像的预处理 知识的准备 PCA 算 法 学习 程序框架 的搭建 图像预处理 PCA 算法实现 程序完善 运行结果分析 程序优化 查资料 图 2 2 人脸识别技术路线 3 人脸图像获取 3 1 Android 编程平台 3 1 1 Android 开发平台搭建 本文 android 开发平台是基于 Windows 环境下搭建的 具体方法步骤如下 在 Oracle 官方网站免费下载最新的 JDK 安装程序 网址为 下载完成后按照默认路径安装 JDK 软件 打开 DOS CMD 命令窗口输入 java version 命令检查是否安装成功 若成功会显示 JDK 版本号等 8 相关信息 接下来配置环境变量 在系统环境变量里添加 PATH 变量 内容为 JDK 安装目录中 bin 文件夹路径 并且同时添加 CLASSPATH 变量 内容为 JDK 安装目录中 lib 和 demo 的路径 并且用 来隔开的 登陆 Android 官方网站 下载对应版本的 SDK 安 装包 下载完成后只需要解压 不需要安装 但是要同样需要配置环境变量 将 SDK 解压后的目录下的 tools 目录的绝对路径添加到系统 Path 中 然后同样用 DOS CMD 命令 android h 检查是否安装成功 登陆 Eclipse 官方网站 http www eclipse org 下载适用版本的 Eclipse 将下载 完成的 Eclipse 安装包解压硬盘 双击 eclipse exe 打开 eclipse 软件 在 Help Install New Software 安装 ADT 完成后重启 eclipse 在 Widows Preferences 下选择 android Browse 添加 android SDK 路径 单击 OK 完成 这样 android 开发环境基本搭建完成 Android 开发环境搭建好了就可已进行 android 应用程序的开发了 3 1 2 Android 开发简介 程序库 表面管理媒体框架SQLiteOpenGL FreeTypeWebKitSGLSSL libc 应用程序框架 活动管理窗体管理视图系统 包管理电话管理资源管理位置管理通知管理 内容提供 Linux 内核 显示驱动相机驱动IPC 驱动 键盘驱动WiFi 驱动电源管理 闪存驱动 音频驱动 应用程序 活动管理活动管理活动管理活动管理 9 图 3 1 Android 平台架构图 Android 平台是在 Linux 2 6 25 版本的基础上改造的 提供了各种的函数库 和完整的应用程序框架 我们把 Android 大体上分为 4 层 Linux 内核 系统开 发库 应用程序框架以及应用程序 具体参看图 3 1 Android 平台架构图 应用程序是包括 Android 平台配置的一套应用程序集 以及用户基于 Android 平台的应用程序框架 使用 Java 语言自行开发的程序 应用程序框架 开发者可以完成使用与那些内核应用程序相同的框架 这些 框架是用于简化和重用应用程序的组件 通过应用程序 用户自定义的程序可以 执行用户程序之外的预设功能 这样可以极大的减少用户程序的额外工作量 系统开发库 Android 定义了一套 C C 库供 Android 平台的其他组件使用 这些功能通过 Android 应用程序框架提供给开发者 开发者不能直接使用这些库 Linux 内核 Android 的核心系统服务依赖于 Linux2 6 内核 如内存管理 进 程管理 驱动模型等 Linux 内核也同时作为硬件和软件栈之间的抽象层 5 3 2 人脸图像获取 3 2 1 Android 应用程序组件 Activity 简介 在 android 中 Activity 拥有四种基本状态 1 Active Running 状态 一个新 Activity 启动入栈后 它在屏幕最前端 处 于栈的最顶端 此时它处于可见并可和用户交互的激活状态 2 Paused 状态 当 Activity 被另一个透明或者 Dialog 样式 Activity 覆盖时 的状态 此时它依然与窗口管理器保持连接 系统继续维护其内部状态 所以它 仍然可见 但它已经失去了焦点故不可与用户交互 3 Stopped 状态 当 Activity 被另外一个 Activity 覆盖 失去焦点并不可见 时处于 Stopped 状态 4 Killed 状态 Activity 被系统杀死回收或者没有被启动时处于 Killed 状态 Android 是通过一种 Activity 栈的方式来管理 Activity 的 一个 Activity 的 实例的状态决定它在栈中的位置 处于前台的 Activity 总是在栈的顶端 当前台 10 的 Activity 因为异常或其它原因被销毁时 处于栈第二层的 Activity 将被激活 上浮到栈顶 当新的 Activity 启动入栈时 原 Activity 会被压入到栈的第二层 一个 Activity 在栈中的位置变化反映了它在不同状态间的转换 3 Activity 的状 态与它在栈中的位置关系如图 3 2 所示 图 3 2 Activity 的状态与它在栈中的位置关系图 Android 程序员可以决定一个 Activity 的 生 但不能决定它的 死 也 就时说程序员可以启动一个 Activity 但是却不能手动的 结束 一个 Activity 每一个 Activity 都有自己的生命周期 而 Activity 的生命周期统一交给 系统管理 如图 3 3 Activity 生命周期示意图 重新激活 失去焦点 不在栈顶的 Activity 可 能被系统销 毁 收回资 源 Activity1 Running Activity2 Paused Stopped Killed Activity3 Paused Stopped Killed 11 onCreate onStart onResume onPause Activity starts Activity is running onStop onDestroy onRestart Activity is shut down Process is killed 图 3 3 Activity 生命周期示意图 Android 平台定义了一种称为 Intent 意向 的异步消息 该消息用于激活 Activity Service 和 Broadcast Receiver 组件 具体用法如下 Intent intent new Intent Intent setClass FaceDetectorActivity this Resgistered class startActivity intent 3 2 2 相关文件夹建立 Android 文件的实体操作包括文件的创建和删除 本文将用到文件夹的建立 文件夹主要用于存储相关图像 程序中主要的核心代码如下 判断是否插入SD卡 boolean sdvalue Environment getExternalStorageState equals android os Environment MEDIA MOUNTED 创建文件夹 12 File fileTake new File String SDroot FaceDetector Take if fileTake exists fileTake mkdirs 3 2 3 控制照相机照相 使用Camera 类的 open 方法获得一个照相机的接口 Camera camera Camera open 通过照相机的接口的setPreviewDisplay 方法可以指定承载预览内 容的视图组件 通过setPreviewCallback 方法可以设定对预览事件的回调处理 设置完成后可以通过照相机接口的setPreview 和stopPreview 方法来启动或是停 止对照片的预览 并通过takePicture 方法进行照片拍摄 通过快门事件的回调函 数 开发者可以处理开门关闭后的事件 而通过获取照片事件的回调接口 开发 者可以获取照相机所得到的图片数据 从而进行下面的图像预处理等等操作 最 后通过release 方法来断开与照相机设备的连接 并释放该照相机接口有关的资 源 程序中核心代码如下 启动Camera mCamera Camera open mCamera setPreviewDisplay holder public void takePicture if mCamera null mCamera takePicture null null jpegCallback 通过快门事件回调存储图像 CameraBitmap BitmapFactory decodeByteArray data 0 data length FilemyCaptureFile newFile sdcard FaceDetector Take takePH jpg BufferedOutputStream bos new BufferedOutputStream new FileOutputStream myCaptureFile 13 CameraBitmap setDensity 8 CameraBpress Bitmap CompressFormat JPEG 100 bos 4 图像预处理 在人脸图像的产生 传输和变换上 往往由于多种因素使得图像产生变劣或 是退化 劣变退化就是产生的图像与原始景物之间的某些差异 这些差异一般包 括人脸图像对比度差 人脸边沿模糊 噪声较大等 这些退化对下一步的处理带 来了困难和不便 因此这很有必要对人脸图像进行一些恰当的处理 改善图像的 视觉效果 从而提高图像的清晰度 便于后期的图像识别提高识别率 这一过程 就是图像的预处理 人脸图像预处理的方法主要有 人脸图像的灰度化 人脸图像的二值化 人 脸图像的几何校正 直方图均衡化 人脸图像的滤波 图像的锐化 像素平均法 等 4 1 彩图灰度化 人脸识别技术的研究一般是一灰度图像作为研究对象 彩色图像包含了人脸 较多的信息 直接将彩色图像作为研究对象这样就是的处理的过程变得复杂化 不利于识别 而灰度图在保留了人脸信息量不丢失的情况下 加少了信息总量 为后期的识别算法提供了可行性 将彩色图像灰度化 通常采用以下经验公式 4 1 0 390 500 11GrayRGB 具体过程如 图 4 1 彩色图像的灰度变换 读取图像 数据 获取 RGB 分量 计算像素 点灰度值 像素点重 新赋值 得到灰 度图 图 4 1 彩色图像的灰度变换 Android 程序实现的主要代码 int color pix result width i j int red Color red color int green Color green color 14 int blue Color blue color color int float red 0 3 float green 0 59 float blue 0 11 4 2 直方图均衡化 图像的灰度直方图是图像各个像素点灰度值的统计度量 运用直方图能很好 的反应图像的大体概貌以及图像灰度值得大体分别情况 如图像中的目标 背景 的分布情况 还可以计算图像中的最大最小灰度值 平均灰度值 对比度等 应 用于图像的预处理上我们称其为直方图均衡化 也称直方图修正 其基本的思 想是将各灰度级分量尽量平均分布在整个图像空间 在直方图上的表现为由密集 的灰度分布变为均匀的分布 从而增强图像的对比度 此外 直方图均衡化还可 以减少管线对图像的干扰 影响 使得对图像的特征提取更加的容易 同时提高 了图像的主观质量 实践证明 直方图的均衡化是一种有效的图像增强方法 直方图均衡化就是要建立一个 T 变换 对于连续的图像来说 用变量 R 来代 表待增强图像的灰度级 假设 R 被归一化到区间 0 1 且 R 0 代表黑色 R 1 代表白色 之后用一个离散公式并允许像素值在区间 0 L 1 这样我们建立变 换 4 2 01ST RR 在输入图像中 对于每个像素值 R 产生一个灰度值 S 满足一下条件 T R 1 在区间上为单值且单调函数 T R01R 2 当时 01R 0 1T R 这样就保证了的反变换存在 单调的条件就保证了输出图像是从黑到白的顺 T R 序 最后由 S 到 R 的反变换可表示为 4 3 1 01RTSS 对于离散的数字图像 其方法可以表示为 4 4 0 1 0 5 0 1 1 i k k L RniL A 其中 A 为图像面积 L 为图像灰度级 表示灰度级为 k 的像素点的总数 2 k n 算法实现流程 如图 3 2 直方图均衡化算法流程 获取源图像 信息 统计个灰度 级概率密度 源图像直方 图均衡化 返回均衡化 的像素点数 组 15 图 4 2 直方图均衡化算法流程 Android 中核心代码 Gray PixelsGray i FrequenceGray Gray SumGray i SumGray i 1 FrequenceGray i SumGray i int SumGray i 255 length PixelsGray k SumGray PixelsGray k return PixelsGray 4 3 图像平滑滤波 人脸图像在采集过程中 受到各种干扰时不可避免的 并在获得的图像中留 下了痕迹 为了避免噪声对图像的特征抽取的影响 需要消除图像的噪声 现在 消除噪声的主要方法分为两类 一类是全局处理 包括 Wiener 滤波 Kal man 滤 波等方法 二类是使用局部算子 如均值滤波 中值滤波 梯度倒数加权滤波等 经典算法 本文就是运用的均值滤波方法对获得的人脸图像进行平滑滤波 均值滤波就是对信号进行局部平均 以平均值来代表该像素点的灰度值 换 言之 每一个像素值用其局部邻域内所有值得平均值来代替 4 5 1 k lN h i jf k l m 其中 m 为邻域内像素点的总数 如在像素点处取 3x3 的邻域 这样得到公式 i j 如下 4 6 11 11 1 9 ji k ilj h i jf k l 其中值得注意的是邻域 N 控制着滤波程度 对应大卷积模板的大尺度会加大 滤波程度 但是这样会导致图像细节的损失 在设计线性平滑滤波器的时候 选择滤波权值使得滤波器只有一个峰值 并 且在水平和垂直方向上市对称的 下面就是程序中运用的一个典型 3x3 平滑滤波 器的权值模板 16 111 16816 111 848 111 16816 线性平滑滤波器除去了高频成分和图像中的锐化细节 如把阶跃变化平滑成 逐渐变化 使得精确定位的能力下降 4 程序中实现的核心代码如下 average 1 4 data i width j 1 8 data i width j 1 1 8 data i width j 1 1 8 data i 1 width j 1 16 data i 1 width j 1 1 16 data i 1 width j 1 1 8 data i 1 width j 1 16 data i 1 width j 1 1 16 data i 1 width j 1 9 filterData i width j int average filterData i filterData i min 255 max min 4 4 边沿检测 图像的边缘是图像非常重要的特征之一 图像的边缘保留了原始图像中相当 重要的部分信息 而又使得总的数据量得以减少 这为后续的算法 也就是特征 提取的计算量得以大大的减少 这正是符合特征提取的要求 而用于图像识别的 边缘提取比视觉效果增强的边缘提取要复杂一些 边缘对应于物体的边界 在灰 度图像中灰度值变化剧烈的地方符合这一要 一般会以这个特征来提取图像的边 缘 灰度值得剧烈变化可以度量边缘 由此我们想到在数学上 最直观的方法就 是微分 在此之前我们应该对输入图像进行噪声消除的处理 这样保证图像中的 高频成分是原始图像中的 经典的边缘检测是以原始图像为基础 对图像中的像素考察它的某个领域内 的灰度阶跃变化 利用边缘邻近一阶或是二阶方向导数的变化规律进行边缘检测 比较经典的常用的算法有 查分边缘检测 Roberts 边缘检测算子 Sobel 边缘检 测算子 Prewitt 边缘检测算子等 本文就是采用 Sobel 算子进行图像的边缘检测 17 对于数字图像而言 可以用一阶差分来代替一阶微分 对图像 x y 两个方向 进行差分 4 7 1 xf x yf x yf xy 4 8 1 yf x yf x yf x y 求梯度时 对平方和的开方运算 可以用两个分量的绝对值之和来表示 如 下公式 4 9 22 Gf x yxf x yyf x y xf x yyf x y A Sobel 算子是一种梯度幅值的计算方法 通过对数字图像 f x y 的每一个像素 的四邻域点的灰度值的加权差 与邻点的权值大小 其先做成加权平均 再微分 再求梯度 具体的算法表达如下 4 10 1 1 2 1 1 1 1 1 2 1 1 1 xf x yf xyf x yf xy f xyf x yf xy 4 11 1 1 2 1 1 1 1 1 2 1 1 1 yf x yf xyf xyf xy f xyf xyf xy 根据以上 定义 Sobel 算子如下 4 12 s x yxf x yyf x y Sobel 算子的核心是两个 3x3 的卷积核 通过这两个模板在图像区域中移动 完成图像中每个像素点与这两个卷积核的卷积运算 4 Sobel 算子卷积核如下 101121 202 000 101121 xy SS 由于算法的复杂度本文采用 Open CV 中的库函数实现图像的边缘检测 具体 实现核心代码如下 pImgSobelgray cvCreateImage cvGetSize pImage IPL DEPTH 16S 1 cvSobel pImg8uSmooth pImgSobelgray 0 1 3 4 5 人脸部位提取 在用手机进行拍照时 拍下来的人脸图像含有背景 这就为后面的识别带来 了误差 本文将通过 Open CV 中目标检测函数 对人脸部位进行检测 并将人连 18 部位保存为图像存储下来供后面识别 这样就减少了背景对识别的影响 10 目标检测方法最初由 Paul Viola 提出 并由 Rainer Lienhart 对这一方法进行 了改善 首先 利用样本 大约几百幅样本图片 的 HARR 特征进行分类器训练 得到一个级联的 boosted 分类器 训练样本分为正例样本和反例样本 其中正例 样本是指待检目标样本 例如人脸或汽车等 反例样本指其它任意图片 所有的 样本图片都被归一化为同样的尺寸大小 分类器训练完以后 就可以应用于输入图像中的感兴趣区域 与训练样本相 同的尺寸 的检测 检测到目标区域 汽车或人脸 分类器输出为 1 否则输出为 0 为了检测整副图像 可以在图像中移动搜索窗口 检测每一个位置来确定可 能的目标 为了搜索不同大小的目标物体 分类器被设计为可以进行尺寸改变 这样比改变待检图像的尺寸大小更为有效 所以 为了在图像中检测未知大小的 目标物体 扫描程序通常需要用不同比例大小的搜索窗口对图片进行几次扫描 6 分类器中的 级联 是指最终的分类器是由几个简单分类器级联组成 在图 像检测中 被检窗口依次通过每一级分类器 这样在前面几层的检测中大部分 的候选区域就被排除了 全部通过每一级分类器检测的区域即为目标区域 目 前支持这种分类器的 boosting 技术有四种 Discrete Adaboost Real Adaboost Gentle Ada

温馨提示

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

评论

0/150

提交评论