OpenCV学习笔记(五)—— OpenCV for Android剔除OpenCV Manager依赖

        在上篇中,我们成功配置了OpenCV在Eclipse中的开发环境,并成功运行其中一个demo,但是对于OpenCV Manager的依赖让其用户体验变得很差,那么我们应该如何剔除对OpenCV Manager依赖呢?在此之前,我们应先了解一下OpenCV Manager。

 

一、OpenCV Manager简介:

        OpenCV Manager是一个android服务,用于初始化OpenCV库,使用此服务的作用:

1. 压缩apk大小,所有程序使用同样的二进制代码,而不是各自使用各自的本地库;

2. 所有支持平台上自动进行特定的硬件优化;

3. 自动更新和bug修复;

4. opencv库已被信任,所有调用opencv库的包apk可以直接发布到googleplay上;


        用解压工具打开OpenCV Manager,发现里面其实就是大量的.so库文件:

        OpenCV学习笔记(五)—— OpenCV for Android剔除OpenCV Manager依赖_第1张图片


二、剔除OpenCV Manager:

        想要不安装OpenCV Manager,且通过JNI方式调用OpenCV,其实有三种方式:

a.使用静态的OpenCV库的方式

b.使用动态OpenCV库的方式

c.同时使用Java的API和JNI的接口的方式(动态链接OpenCV库)

        关于这三种方式更详细的介绍请查看:http://blog.csdn.net/yanzi1225627/article/details/27863615


        这里我们以OpenCV Sample - face-detection这个demo为例进行修改,其中需要修改的有两个文件:Android.mkFdActivity.java

        OpenCV学习笔记(五)—— OpenCV for Android剔除OpenCV Manager依赖_第2张图片


1.修改makefile:

        在jni文件目录下【Android.mk】文件,将原本被屏蔽掉的几行配置进行修改:

        

       上图中OPENCV_CAMERA_MODULESOPENCV_INSTALL_MODULESOPENCV_LIB_TYPE这三个参数的作用分别是:

        OPENCV_CAMERA_MODULES:为on时,会自动将带camera的so拷贝至工程下的libs目录下面;

        OPENCV_INSTALL_MODULES:为on时,自动将依赖的OpenCV的so库拷贝到工程下的libs目录下面,但是只对OPENCV_CAMERA_MODULES有效;

        OPENCV_LIB_TYPE:链接库的方式,分为静态动态两种,静态时为STATIC,动态时为SHARED,常用的是动态链接库的方式


注:以上三种方式都无需安装OpenCVManager,区别在于mk文件的不同。)


        其他的参数意义:

        LOCAL_MODULE:是生成的库的名称;

        LOCAL_SRC_FILES:是jni文件夹下的.cpp文件。


2.修改【FdActivity.java】文件:

    

        查看可以发现在此处,通过OpenCVLoader进行了OpenCV Manager的初始化和启动,这是剔除OpenCV Manager的关键所在,所以我们应该屏蔽OpenCVLoader.initAsync该行代码:

    OpenCV学习笔记(五)—— OpenCV for Android剔除OpenCV Manager依赖_第3张图片

        完成以上修改之后,我们删除手机设备中的OpenCV Manager.apk,然后在手机上运行修改后的程序,发现启动程序时不会再提示需要安装OpenCV Manager,至此我们成功将demo对OpenCV Manager API的依赖剔除掉。

        

        有没有发现demo中人脸识别的准确度其实很低,并没有那么地精确。

你可能感兴趣的:(OpenCV学习笔记(五)—— OpenCV for Android剔除OpenCV Manager依赖)