基于OpenCV在Android平台下实现人脸识别资料下载.pdf

上传人:b****1 文档编号:16086740 上传时间:2022-11-19 格式:PDF 页数:6 大小:842KB
下载 相关 举报
基于OpenCV在Android平台下实现人脸识别资料下载.pdf_第1页
第1页 / 共6页
基于OpenCV在Android平台下实现人脸识别资料下载.pdf_第2页
第2页 / 共6页
基于OpenCV在Android平台下实现人脸识别资料下载.pdf_第3页
第3页 / 共6页
基于OpenCV在Android平台下实现人脸识别资料下载.pdf_第4页
第4页 / 共6页
基于OpenCV在Android平台下实现人脸识别资料下载.pdf_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

基于OpenCV在Android平台下实现人脸识别资料下载.pdf

《基于OpenCV在Android平台下实现人脸识别资料下载.pdf》由会员分享,可在线阅读,更多相关《基于OpenCV在Android平台下实现人脸识别资料下载.pdf(6页珍藏版)》请在冰豆网上搜索。

基于OpenCV在Android平台下实现人脸识别资料下载.pdf

首先,本文介绍了OpenCV2.4的人脸识别算法类FaceRecognizer的使用以及在Windows平台下的实现,接着详细的阐述了利用Android下的JNI(JavaNativeInterface),并结合AndroidNDK(NativeDevelopmentKit)调用和编译OpenCV下的相关函数,生成共享函数库。

经过实验的在Android下人脸识别效果良好。

关键词:

人脸识别,人脸归一化;

Android;

OpenCV;

NDK;

JNIFaceRecognitionBasedonOpenCVinAndroidSystemNIEPeng-peng1,WANGEr-Wei2,LIUMin-feng1,ZHANGHao-kun1(XidianUniversity,Xian,710071)Abstract:

ThispaperproposesawayoffacerecognitionbasedonOpenCVinAndroidSystem.Firstly,thispaperintroducestheuseoffacerecognitionstructFaceRecognizerandimplementsthisstructinWindowsSystem.ThentheinvokingandcompilingofOpenCVfunctionswithJNI(JavaNativeInterface)andAndroidNDK(NativeDevelopmentKit)isintroducedindetailandsharedlibraryisgot.Finally,facerecognitioninAndroidworkswellintheexperiment.Keywords:

facerecognition,facenormalization;

Android;

OpenCV;

NDK;

JNI83图3AT&

T人脸数据库一部分图2人脸归一化处理效果了FaceRecognizer类,实现了三种人脸识别方法Eigenfaces、Fisherfaces和LocalBinaryPatternsHistograms。

1在Windows平台下实现人脸识别功能在Android平台开发前,需要先在Windows下将所需要算法的C/C+函数先进行开发并测试好。

这是因为结合VisualStudio开发工具,可以能够很好的调试C/C+代码。

需要实现的功能模块包括人脸归一化处理和识别功能。

1.1人脸归一化处理在新来了一张图片后,首先需要做的是检测出是否有人脸,并做归一化处理。

归一化处理的原因是为了尽可能减小光照和姿势对人脸识别的影响。

新来一张图片后,需要的处理流程如图1所示。

人脸检测和人眼定位是使用OpenCV自带的库函数进行实现的,关于具体如何配置VisualStudio环境下的OpenCV的开发,不再赘述。

在OpenCV的中文官网“http:

/scale_factorCV_DEFAULT(1.1),intmin_neighborsCV_DEFAULT(3),intflagsCV_DEFAULT(0),CvSizemin_sizeCV_DEFAULT(cvSize(0,0),CvSizemax_sizeCV_DEFAULT(cvSize(0,0);

人脸旋转的目的是把有旋转角度的人脸变换成正立的人脸。

实现手段是计算左右眼的中心连成线与水平线所成的角度,然后将图片中所有的像素点的坐标进行旋转。

人脸尺寸归一化是需要将人脸从原始图片中截取出来,制作成统一大小的图片。

假定所需要的人脸图片的宽度是w,则两个人眼中心的距离为w/2。

因此得到一张人脸图片后,计算其人眼中心的距离与要求的距离的比值,即为整个图片的缩放比例系数如下图2所示。

2.2人脸识别实现在利用OpenCV进行人脸识别算法前,需要从网上下载libfacerec库,该库已经给出了实例。

我们需要做的是理解三种算法Eigenfaces,Fisherfaces和LBPH(LocalBinarypatternsHistograms),以及如何调用底层库来实现。

这里以Eigenfaces为例,对其实现的过程做出解释。

首先需要准备好需要测试的人脸图片库。

函数库推荐的是AT&

T人脸数据库,从网络下载下来后,还需制作一个文件路径的文本文档,命名为csv.txt,每一行的格式如下为/path/to/image.ext;

label,其中/path/to/image.ext是图片的绝对路径或相对路径,label必须是整数,同一个人的label是一样的如下图3所示。

现解释其中重要的函数:

图1人脸归一化流程84PtrcreateEigenFaceRecognizer(intnum_components,doublethreshold)num_components是特征值的个数,也就是说在做PCA分析时,选取的主成分向量的个数,也可以不设定,直接使用默认值。

Threshold是人脸识别的阈值,当设定为0值,人脸预测时返回的标号为-1时,则表明人脸库没有相应的人脸。

训练的图片,也就是你想训练的人脸,数据格式为vectorlabels:

对应图片的标号,数据格式为:

vector;

intEigenfaces:

predictsrc:

需要进行识别的图片。

返回值是对应的标号。

3搭建Android下的JNI开发环境3.1环境设置Android在的开发语言是JAVA,所使用的集成开发环境是Eclipse。

在标准的Android开发环境下开发OpenCV,还需要准备AndroidNDK,Cygwin和OpenCVAndroid。

首先从网上下载准备好三个库文件,下载网址分别为:

http:

/配置好系统环境变量,需要对/cygwin/home/username/bash_profil文件进行修改,在文件的末尾加上“NDK=/cygdrive/”和“exportNDK”。

第一句是配置AndroidNDK的路径。

假如下载并解压缩的AndroidNDK路径为“D:

/android-ndk-r8b”,则第一句应该为:

“NDK=/cygdrive/d/android-ndk-r8b”。

接着需要配置OpenCV的开发环境,在Eclipse中导入OpenCVAndroid-2.4文件里所有的Android工程,导入后会发现有几个OpenCVsample和OpenCVTutorial几个例程,最重要的是还有一个OpenCVLibrary2.4.2的工程。

这时候,开始建立一个空的标准Android工程,并在工程目录下新建一个文件夹,取名为jni,所有的C/C+文件都放在该目录。

在这个工程中,进行如下操作Project-Properties-Android-Library-Add,这时候就会看需要导入的OpenCVLibrary2.4.2。

然后是配置jni文件下的C/C+文件自动编译的问题,Project-Properties-Builders-New-Program,这是进入了编译器的配置选项卡。

选择Main选项页,在Location框中输入cygwinbinbash.exe的绝对路径,在WorkingDirectory框中输入cygwinbin的绝对路径,在Arguments输入“-login-ccd/cygdrive/&

$NDK/ndk-build”,其中是要输入该工程的路径,至于后半部分是调用ndk-build命令;

选择Buildoptions选项页下将Runthebuilder下的都选中,这是表示在制定的情况下调用编译命令,在specifyworkingsetofrelevantresources下指定jni文件的路径即可。

这样就配置完了jni下文件的编译器。

编译文件的规则是根据jni目录下的Android.mk和Application.mk文件,这将在后面介绍编写。

4实现程序过程在建立好了编译环境后,需要进行源代码开发,主要有两部分需要开发,一部分是Android程序的JAVA平台的开发,主要涉及到UI界面和程序的逻辑流程;

另一部分是Jni接口的开发,也就是用来链接JAVA与C/C+的部分如下图4所示。

4.1建立UI界面在界面上需要两个布局,一个是用于人脸识别的界面,另一个是用于人脸注册的界面。

在res/图4Android应用程序构成图585layout文件夹,新建两个xml布局文件,分别命名为main.xml和register.xml。

在main.xml中主要两个Button,分别是“识别”和“注册”按键,以及一个imageview组件。

在register.xml中有两个Button,分别是“拍照”和“注册结束”按键,一个Edittext输入框,用于接收姓名,以及一个imageview组件。

4.2JAVA平台程序开发为上述两个UI界面编写两个Activity,分别命名为FacerecActivity.java和register.java,对应着FacerecActivity和register两个Activity。

为此需要在AndroidManifest.xml里组成这两个Activity,同时需要加入允许程序读写SD卡,因此加入权限语句:

在两个Activity里面都需要实现照相功能,获取图片。

实现照相机功能,一般是有两种方法:

一种是使用内置的摄像头应用程序;

另一种是自定义照相Activity。

在这里使用一种简单的方法,既使用内置的摄像头程序。

步骤如下:

构建摄像头Intent:

ntentcameraIntent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);

启动摄像头的Intent:

startActivityForResult(cameraIntent,0);

接受Intent结果:

在应用程序中设置onActivityResult()方法,用于接受摄像头intent返回的数据。

首先实现FacerecActivity.java文件,它作为主界面,主要是响应上述的main.xml中各个组件。

分别实现对“识别”和“注册”两个按钮的监听,在“识别”按键的响应为调用JNI的识别算法。

该人脸识别函数的原型应该接受的参数是一张照片,返回值应该是该照片中人脸对应的姓名或者找不到该人。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 交通运输

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1