目錄
測試環境: 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