目录
测试环境: 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