赵桂茹
【文章摘要】
当前随着基于Android系统的移动终端设备的广泛应用,以及图像采集设备的普遍集成,使得Android系统的图像采集设备除了具有照相、摄像功能以外,正在扩展新的实用型功能。其中,利用Android系统中的图像采集设备,开发人脸识别系统,使移动终端设备多了一种加密的方式。从硬件角度无需成本投入,软件方面需要进行基于Android系统的人脸识别系统的开发。该系统可以设置在用户的开机环节,也可设置在关键数据加密的环节,系统自动识别用户脸部头像,以使设备中的信息处于安全状态。文章研究了一种基于Android系统的人脸识别系统的设计与开发。
【关键词】
人脸识别系统;基于Android系统;图像采集设备
当前随着基于Android系统的移动终端设备的广泛应用,以及图像采集设备的集成,使得Android系统的图像采集设备除了具有照相、摄像功能以外,正在扩展新的实用型功能。其中,利用Android系统中的图像采集设备,开发人脸识别系统,使移动终端设备多了一种加密的方式。从硬件角度无需成本投入,软件方面需要进行基于Android系统的人脸识别系统的开发。该系统可以设置在用户的开机环节,也可设置在关键数据加密的环节,系统自动识别用户脸部头像,以使设备中的信息处于安全状态。
1 关键技术
在Android系统下基于OpenCV的人脸检测实现需通过Android NDK工具集将利用JNI编写的本地代码组件嵌入到Android应用程序中、通过KPCA算法进行人脸识别来解除手机锁。所以整个实现过程分为两个步骤:首先,利用Android应用程序框架编写Java端代码I最后通过JNI与OpenCV接口编写本地C/C++代码,并利用AndroidNDK 对其进行编译生成Java代码可调用的共享库,最后通过SDK生产Android应用程序。
2 系统设计
整个系统按以下四步进行:图像采集设备、人脸图像定位程序(获取图像后对人脸从五官到轮廓的位置建模,确定采集对象的位置与要比对的图像位置相匹配)、图像预处理模块、提取图像特征、检索数据库(把提取的数据和数据库中需要认证的数据进行比对)、显示处理结果。
其中,人脸识别的过程是关键模块。首先对输入样本进行采集的图像采集阶段;随后对采集的图像做预处理,主要是对图像样本进行归一化处理,称为图像预处理;接下来是判断图像是否包含人脸的人脸检测阶段;若图像中含有人脸则对图像中的人脸进行特征定位和提取,称为特征提取阶段;随后是通过提取到的不同人脸之间的不同特征进行分类的人脸分类阶段;最后的阶段是通过图像中的人脸特征与其他人脸进行对比,确认和识别身份信息的人脸识别阶段。其中人脸检测、人脸特征定位与提取和人脸识别这三个阶段是人脸识别最主要的组成部分。
3 算法设计
3.1 AdaBoost人脸检测算法
AdaBoost 人脸检测算法是一种基于积分图、级联分类器和AdaBoost 的方法在这种方法中使用 Harr 特征来作为检测人脸的关键特征,首先使用 AdaBoost 算法对样本进行训练优选 出少量分类能力最强的 Harr 特征作为弱分类器,并将弱分类 器组合成强分类器。在检测时,使用分层策略设计了一种基于 级联结构的强分类器进行人脸检测。在整个检测算法中,AdaBoost 是其核心内容。使用AdaBoost 算法进行特征选择并建立强分类器的过程描述如下:
1) 输入:训练样本集{( x1,y1) ,……,( xn, yn) },其中 xi 为样 本集中第 i 个样本,yi ={1,0},分别对应于正负样本,样本总数 n,需要选择的特征个数为 s。
2) 初始化样本权重: w1, j =1/n。
3) 对 t =1,…… s,进行循环 。
4) 输出强分类器: H( x) = 1 ∑ T t =1 αtht( x) ≥ 1 2 ∑ T t =1 αt{ 0 otherwise ( 5) 其中,αt = log( 1/βt) 。
3.2 KPCA的人脸识别的算法
KPCA的人脸识别算法的基本过程为:
1) 图像预处理:将人脸图像的维数统一为 256×256。
2) 图像曲波变换:把人脸数据库中的每幅图像进行 Wrapping 的曲波变换,提取出曲波的第一层系数C{1},并把它排列成列向量,组成曲波特征 T,其中采用尺度(scale=3)和方向(angle=8)。
3) 核主主元分析(KPCA):对曲波特征 T采用多项式核主元 d i j i j k(x , x ) = (x x +1)
分析的方法,提取出主成分(train_features),作为最后的人脸识别特征。
4) 识别:对于测试图像采用相同的处理方法求出特征(test_features),采用最近邻法进行分类。
4 实现过程
软件实现过程示意图如下图所示。在Android系统下基于OpenCV的人脸检测实现需通过Android NDK工具集将利用JNI编写的本地代码组件嵌入到Android应用程序中、通过KPCA算法进行人脸识别来解除手机锁,所以整个实现过程分为两个步骤:首先,利用Android应用程序框架编写Java端代码,最后通过JNI与OpenCV接口编写本地C/C++代码,并利用AndroidNDK 对其进行编译生成Java代码可调用的共享库,最后通过SDK生产Android应用程序。(图1)
5 小结
当前,基于Android的人脸识别系统正在广泛的开发与应用,所采用的算法与技术也各不相同, 本系统的最大特点是:第一,识别过程低内存控制;第二,实现隐私保护;第三,可对用户脸部进行实时识别。
【参考文献】
[1]基于Android平台人脸识别系统的设计与实现[D],刘超.吉林大学.2013-04 .
[2]Android平台手机防盗系统的设计与实现[D],凡里伟.大连理工大学.2012-03 .
[3]基于OpenCV在Android平台下实现人脸识别[J], 聂鹏鹏; 王二伟; 刘敏丰; 张昊堃.电子元器件应用.2012-12.
[4]基于Android系统的增强现实技术的研究与实现[J],左文豪.湖南大学.2013-04.