在实践深度学习过程有个感觉,就是把pc上图像识别算法放到手机上运行,不是后端模式,这块相对是一个蓝海。
网上的大都是类似的介绍,主要在Ubuntu上进行环境构建,编译,运行。
但我这希望是windows环境,还有就是不希望去编译tf的so,jar包,尽量简单去完成移植,有更多时间去验证算法,改善算法。
实践过程中也是各种问题。现把实际过程分享给有类似需求的朋友。
过程如下:
1、下载android studio(简称AS),NDK并安装。
这部分简单,但花费时间。我安装的是2.3。NDK也可以在as安装后,启动as后在安装(比较容易)。
步骤是setting->Appearance&Behavior->system setting->android sdk,然后点击sdk tools,看到NDK框,
选择后Apply,就自动下载安装了。(同时最好把cmake也同样步骤安装了)
特别注意的是选用ndk r16b版本,不要用r17版本。这能避免后续很多问题。
2、下载AndroidTensorFlowMachineLearningExample,这是一个网友的开源代码,比较好用。
然后放到本地目录下F:\temp\android-dl\android\。
3、下载编译所需要的android的tf库,有libandroid_tensorflow_inference_java.jar,libtensorflow_demo.so。
下载位置:链接: https://pan.baidu.com/s/1nuQ4UpF 密码: hust(网友贡献的,赞)
注意:libtensorflow_demo.so,用的是x86_64下的(根据os系统来选择)。
4、修改android/下的 build.gradle文件
修改内容,如下:
classpath 'com.android.tools.build:gradle:2.3.0'
compileSdkVersion 27
buildToolsVersion '27.0.3'
。。。
targetSdkVersion 27
这些都是跟as的版本有关的内容。
除此以外,还有有个坑,一定要注意自己的as版本,如果是3.0此代码直接可用,如果是2.3则要把build.gradle文件
中的dependencies部分进行如下修改。(一开始我没注意到,花费了不少时间)
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:27.+'
compile 'com.android.support:design:27.+'
//compile 'com.android.support:support-vector-drawable:27.+'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
5、把这两个库libandroid_tensorflow_inference_java.jar,libtensorflow_demo.so加入到项目中。
添加的步骤是:
5.1先添加jar包
a.将jar文件复制、粘贴到app->libs目录中;
b.右键点击jar文件,并点击弹出菜单中的“Add As Library”,将jar文件作为类库添加到项目中;
c.选择指定的类库。
5.2再添加so文件
a.将.so文件拷贝到 app/src/main/jniLibs下(jniLibs文件夹若没有则新建)
b. 在as中的build.gradle中就添加如下几行,
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
然后点击as工具栏上的"Sync Project with Gradle files"按钮进行gradle同步。
之后切换到android结构下,你会看到jniLibs中.so已经变成了.jar文件,证明已经成功;
到此为止,完成后的界面如下:
6、点击build apk,生成apk。
7、将手机设置为开发者模式
打开安卓手机,找到 usb debugging 按钮,每个手机可能具体的不太一样。
然后手机通过USB数据线连接电脑,此时手机屏幕会提示:
allow USB debugging?然后点击ok。(之后再连接则不会提示)
8、点击AS下方的 monitor,查看手机是否连接成功。
9、点击AS 的 run ,开始编译和安装。
在手机上找到图标点击运行即可。
至此编译调试完成。
以下列举一些注意的内容。
注意点1;
有时候打开AS时,启动很慢,原因是卡在下载gradle这一步。其下载后保存位置是在如下目录:
C:\Users\neusoft\.gradle\wrapper\dists
当下载完成后,之后在启动会比较快。
注意点2;
编译或gradle同步过程中一定要联网,且网速得比较快点,否则很慢,各种问题。
注意点3:Error:Execution failed for task ':app:transformNative_libsWithStripDebugSymbolForDebug'.
> A problem occurred starting process 'command 'D:\gradle\SDK\ndk-bundle\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-strip''
解决方法:如果ndk版本在r17版, 则替换为r16b版本。步骤是;
先清苦sdk/ndk-bundle/ 下的内容。下载16b版本的ndk到本地, 将解压缩后的所有文件拷贝到sdk/ndk-bundle/目录下,再重新build工程。
16b版本的位置是https://developer.android.google.cn/ndk/downloads/older_releases。