caffe mobile编译运行

来源:互联网 发布:传奇数据库添加物品 编辑:程序博客网 时间:2024/06/07 09:25

本文介绍如何在安卓端利用caffe模型进行识别。caffe mobile库已经有环境搭建说明,但是自己搭建的时候还是遇到了点问题,于是就进行了下总结,减少踩坑。

1. caffe mobile库

https://github.com/solrex/caffe-mobile

2.  Win7, 搭建caffe mobile环境,进行编译(仅安卓端)

1)环境配置(以下链接在 caffe mobile github工程里能直接连接)

  1. Git for Windows: A shell environment(MinGW64) to run the build.
  2. tdm64-gcc-5.1.0-2.exe: The GNU toolchain, remember to copy/path/to/TDM-GCC-64/bin/mingw32-make.exe to /path/to/TDM-GCC-64/bin/make.exe.
  3. cmake-3.8.2-win64-x64.msi: Cmake
注意,TDM缺少Fortran编译器的话,需要下载带有Fortran的版本。链接:http://tdm-gcc.tdragon.net/download


2)编译

$ git clone --recursive https://github.com/solrex/caffe-mobile.git$ export NDK_HOME=/path/to/your/ndk  # C:/path/to/your/ndk on MinGW64 (/c/path/to/your/ndk not work for OpenBLAS)$ ./tools/build_android.sh
注意, a. 用git下载,直接打包下载,包会不完整。(在想要下载的文件目录下,右击打开git bash键入命令)

           b.export NDK的路径斜杠需要用右斜杠!

export NDK_HOME=D:/Android/android-ndk-r10 

           c.特特特别注意!!!编译前要修改【caffe-mobile\src\jni\caffe_jni.cpp】文件,将里面的Java_com_hiscene_zn_mycaffesample_CaffeMobile_setBlasThreadNum替换成调用native方法的类所在的包名。

JNIEXPORT void Java_com_example_something_MyClass_getMyString(JNIEnv * env, jobject obj) {

其中:com_example_something为 package名的分解,MyClass为调用该.so的class
3)编译结果


4. Android Studio 加载caffe mobile库

1)找到caffe mobile库文件。

      编译好的caffe mobile已经把caffe封装好了,在.os文件里。

      编译后的caffe mobile文件结构如下,我们需要的os文件在画红框的文件夹的lib目录里。


2)在安卓工程里加载caffe mobile 库。

     法一: 将各目录(caffe-mobile\build_arm64-v8a\lib)下的os文件(libcaffe-jni.so)整理成如下,

                  【新建一个jniLibs文件夹,再新建armeabi等三个文件夹,复制入os文件】

                   然后直接将jniLibs文件夹复制到Android Studio工程里(也就是【D:\MyProject\MyCaffeSample\app\src\main】目录下)


     法二:a. 直接将armeabi等三个文件夹复制到【D:\MyProject\MyCaffeSample\app\libs】目录里

                  b. 更改build.gradle文件夹,添加

    sourceSets {        main {            jniLibs.srcDirs = ['libs']        }    }

更改后的build.gradle文件内如下:

apply plugin: 'com.android.application'android {    compileSdkVersion 25    buildToolsVersion "25.0.3"    defaultConfig {        applicationId "com.yangwenbo.caffesimple"        minSdkVersion 19        targetSdkVersion 25        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"        externalNativeBuild {            cmake {                cppFlags "-fexceptions"            }        }    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    sourceSets {        main {            jniLibs.srcDirs = ['libs']        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:25.1.0'    // Specifid for MNIST grayscale png file reading. You can remove it as you need.    //compile 'ar.com.hjg:pngj:2.0.1'    testCompile 'junit:junit:4.12'}

至此,caffe mobile库加载入安卓工程里了。

参考:http://blog.csdn.net/wxz1179503422/article/details/74974421


5.产生caffe mobile需要调用的文件。

   Android Studio调用caffe mobile需要三个文件:weight.caffemodel,test_image.jpg,net.protobin。

   net.protobin生成需要caffe-mobile\tools\prototxt2bin.py文件,直接运行python文件就能生成。

tools/prototxt2bin.py net.prototxt

6. Android 使用caffe mobile库

1)在MainActivity.java类里需要加入:

    // Used to load the 'caffe-jni' library on application startup.    static {        System.loadLibrary("caffe-jni");    }

这段代码就是调用caffe mobile库,其中 caffe-jni就是libcaffe-jni.so文件去除lib以及.so的剩下的字符串,作为库的名字。

2)CaffeMobile.java类,MainActivity.java类, activity_main.xml可以参照caffe-mobile\examples\android\CaffeSimple里的相应文件

3)在运行加载入caffe mobile库的安卓工程前,需要进行取消勾选NDK支持。

     file ->settings->Plugins->取消勾选 Android NDK Support.



4)Android Studio连接真机

点击红框1,设置成红框2.


5)利用ADB将模型,测试图片加载入手机sdcard。

     a.需要安装ADB,下载ADB文件后,解压即安装。

        解压后得到除了红框里的其它四个文件,cmd.exe文件要从C:\Windows\System32拷贝到ADB目录里

     b.打开cmd.exe键入

adb shell
得到如下,则adb安装成功。注意,此时需要手机连接到电脑,要不然会找不到device。


      c.将caffe模型以及测试图片放入手机sdcard内。

$ adb push $CAFFE/examples/mnist/lenet_iter_10000.caffemodel \     /sdcard/weight.caffemodel$ adb push $CAFFE_MOBILE/examples/ios/simple/CaffeSimple/data/net.protobin \     /sdcard/net.protobin$ adb push $CAFFE_MOBILE/examples/ios/simple/CaffeSimple/data/test_image.jpg \     /sdcard/test_image.jpg

前一个路径为模型、图片等的路径【D:\MyProject\data\test_image.jpg】。

6. 运行安卓应用程序,得到结果。

注意,确保手机开启了开发者模式,以及赋予了相应权限。(手机设置里可以开启开发者模式,手机管家里可以赋予各种权限)


原创粉丝点击