Tensorflow Android Demo 测试

目录

下载源码:

​​​​​安装 Android Studio:

 

编译

调试手机连接问题

应用安装

主要参考文献:


测试环境: Ubuntu 18.04

 

下载源码:

实际只是用examples/android文件夹下的,但是tensorflow没有提供单独的文件夹下载,所以这里要下载整个tensorflow

git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git

​​​​​安装 Android Studio:

在AS官网下载页面https://developer.android.com/studio#downloads 选择相应系统版本的压缩包下载.

参考https://developer.android.com/studio/install?hl=zh-cn 安装 AS, SDK和NDK

NDK不需要单独下载,在选择好要使用的版本的SDK后,在SDK tools 里勾选NDK即可,如下图

 

编译

打开前面下载的tensorflow中的android文件夹为工程文件夹

将 Gradle Scripts/build.gradle中的第45行

def nativeBuildSystem = 'bazel' 修改为
def nativeBuildSystem = 'none'

然后就可以编译了.

调试手机连接问题

编译成功后,在用手机调试安装时,我又遇到了AS无法识别手机的情况(尽管开启了USB调试),然后参照https://blog.csdn.net/w19961009/article/details/54952777这篇博文进行设置

首先在未连接手机的情况下,在terminal 中输入lsusb,获取当前usb设备列表

然后将手机与电脑连接,再次输入lsusb获取新的usb列表,前后对比即可找到自己的手机usbid,主要找到 xxxx:yyyy一共八位字符,然后

sudo vim /etc/udev/rules.d/90-android.rules

新建90-android.rules文件(此处推测前面的数字与手机的系统版本有关,之前试过51不起作用,换成90就可以了,我的系统是安卓9.0),将上面找到的xxxx:yyyy 分别写入下面的位置

SUBSYSTEM=="usb", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", MODE="0666"

然后保存退出,修改文件权限

chmod a+x /etc/udev/rules.d/90-android.rules

随后执行下面命令,重启udev

sudo /etc/init.d/udev restart 

然后在AS上面工具栏手机列表位置下拉选择Troubleshoot device connections

在打开窗口中next->next->到最后一个页面,点击Restart ADB server

等ADB重启后应该就可以正确识别手机设备了,可以插拔两次试试,注意手机屏幕弹出的调试请求要确认

 

应用安装

本来以为这样应该就可以了,没想到又碰到了下载模型一直连接失败,多次尝试发现应该是GFW的原因,连接不上storage.google,试了各种代理也不行(此处吐槽一下AS的代理是真的难用),后面找到了下载models的网址就直接在浏览器下载后copy到对应文件夹了

就是这几个models:

我上传到了限速云,有需要的可以自取:

链接: https://pan.baidu.com/s/1aIu7R37ChRAM1eH-oz-Elg 提取码: mmy5 复制这段内容后打开百度网盘手机App,操作更方便哦

 

因为手动下载了需要的models,所以需要把原来下载的代码注释掉,在android文件夹下面的Gradle Scripts/download-models.gradle中找到下面内容全部注释

然后把下载的models(不要copy文件夹,直接复制文件)到project.ext.TMP_DIR

在build.gradle中可以找到TMP_DIR的定义(project.ext.TMP_DIR = project.buildDir.toString() + '/downloads')所以应该知道copy到哪了吧

然后重新构建,在运行就可以正常启动了~安装成功后手机上会多出4个APP.

 

 

主要参考文献:

官方源码文档readme: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android