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工程里能直接连接)
- Git for Windows: A shell environment(MinGW64) to run the build.
- 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
. - cmake-3.8.2-win64-x64.msi: Cmake
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的class3)编译结果
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. 运行安卓应用程序,得到结果。
注意,确保手机开启了开发者模式,以及赋予了相应权限。(手机设置里可以开启开发者模式,手机管家里可以赋予各种权限)
- caffe mobile编译运行
- caffe编译/运行错误
- Mobile 编译 运行 java 文件步骤
- caffe windows 编译成功,但是运行时遇到GPU错误
- Win10上编译Caffe之Libcaffe,运行mnist案例
- 安装、编译、运行caffe遇到的一些问题
- 编译caffe
- 编译Caffe
- 编译caffe
- Caffe编译
- caffe编译
- caffe编译
- 深度学习工具箱CAFFE在64位win7+VS2013环境下编译及运行
- caffe在windows编译工程及运行mnist数据集测试
- caffe在windows编译工程及运行mnist数据集测试
- Windows下编译CAFFE+CUDA, 运行时提示status == CUDNN_STATUS_SUCCESS错误
- 深入理解deep learning之ubuntu下安装caffe源代码编译并且运行
- Windows下编译CAFFE+CUDA, 运行时提示status == CUDNN_STATUS_SUCCESS错误
- 常用的块级元素(block)、行内元素(inline)以及行内块元素(inline-block)的解析
- 在win7下python的xlrd和xlwt的安装
- java.lang.IllegalStateException
- 省市区三级联动
- Linux中制作静态库的命令
- caffe mobile编译运行
- 数人云|9大开源工具,助你迈向崛起的云原生之路
- 高性能IO设计模式之阻塞/非阻塞,同步/异步解析
- 现代OpenGL+Qt学习笔记之七:Phong光照及在GLSL中使用函数
- ORB-SLAM2中使用ROS遇到Bad argument (Invalid pointer to file storage) in cvGetFileNodeByName
- Python学习笔记:Python逆向输出集合
- jQuery:基础学习(1)核心,选择器
- Oracle小白笔记#1_Oracle数据库状态
- SpringBoot学习笔记02