Tensorflow-1-Tensorflow Moblie Android平臺編譯安裝

之前就看到Tensorflow有手機平臺的API了,今天終於抽了點時間出來鼓搗一下。

首先是把tensorflow克隆到本地一份。

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

既然是谷歌官方要求的,最好把--recurse-submodules加上,文檔說可以避免一些數據結構序列化時的編譯問題。

這是android demo的github主頁。

準備編譯

1.安裝bazel

bazel是谷歌自己的構建工具。tensorflow只能部分支持cmake或者gradle,而bazeltensorflow工程的主要構建工具。

點這裏下載Bazel。

這裏寫圖片描述

Mac和Linux用戶根據文檔進行安裝。Windows用戶,按照官方建議到下面的鏈接下載demo的二apk文件,目前bazel在windows平臺還處於試驗階段。

Windows用戶點這裏直接下載apk

bazel安裝成功與否,用bazel version檢查版本即可。

2.下載NDK

點這裏下載最新版本NDK。

最好下載r12b版本的,最新的r13b可能與bazel有兼容問題。

下載完成後解壓到自定義目錄,然後在~/.bash_profilelinux~/.bashrc)下添加環境變量。環境變量的添加過程大家百度一下吧,不是這裏的重點。

3.下載>=23 Android SDK

Tensorflow Android Demo必須在大於等於23API環境中編譯。可以打開Android Studio中的SDK Manager來安裝最新的SDK

4. 編輯Tensorflow根目錄下的WORKSPACE文件

回到tensorflow根目錄,(當前在android目錄就往上兩級)。打開WORKSPACE文件。

在文件開頭部分找到

# Uncomment and update the paths in these entries to build the Android demo.
#android_sdk_repository(
#    name = "androidsdk",
#    api_level = 23,
#    # Ensure that you have the build_tools_version below installed in the
#    # SDK manager as it updates periodically.
#    build_tools_version = "25.0.2",
#    # Replace with path to Android SDK on your system
#    path = "/path/to/your/sdk",
#)

# Android NDK r12b is recommended (higher may cause issues with Bazel)
#android_ndk_repository(
#    name="androidndk",
#    path="/path/to/your/ndk",
#    # This needs to be 14 or higher to compile TensorFlow.
#    # Note that the NDK version is not the API level.
#    api_level=14)

這兩部分定義了SDKNDK的路徑,把/path/to/your的部分改成系統相應的路徑。然後將每一行前的註釋去掉。如下:

# Uncomment and update the paths in these entries to build the Android demo.
android_sdk_repository(
    name = "androidsdk",
    api_level = 23,
    # Ensure that you have the build_tools_version below installed in the
    # SDK manager as it updates periodically.
    build_tools_version = "25.0.2",
    # Replace with path to Android SDK on your system
    path = "/Users/XXX/Library/Android/sdk",
)
#
# Android NDK r12b is recommended (higher may cause issues with Bazel)
android_ndk_repository(
    name="androidndk",
    path="/usr/local/lib/android-ndk-r12b",
    # This needs to be 14 or higher to compile TensorFlow.
    # Note that the NDK version is not the API level.
    api_level=14)

開始編譯

tansorflow根目錄執行,

bazel build -c opt //tensorflow/examples/android:tensorflow_demo

進行編譯,變異過程如下:

這裏寫圖片描述

一切順利的話,編譯成功,如下圖:

這裏寫圖片描述

安裝APK DEMO

變異成功之後bazel會在bazel-bin目錄下面生成apk文件。用數據線連上手機,執行

adb install -r bazel-bin/tensorflow/examples/android/tensorflow_demo.apk

即可安裝到手機。

DEMO截圖

  1. TF Classify

    圖片分類的Demo。可以看到tf識別出了臺式電腦和顯示器。

    這裏寫圖片描述

  2. TF Stylize

    這個Demo很好玩,不只是將一張圖片的風格渲染到攝像頭,還能通過調節來綜合兩張圖片的風格。

    這裏寫圖片描述

    點擊左上角的數字按鈕,可以從128一直選到720。剛開始以爲這個數值跟訓練過程中的神經元數量有關。後來想想這些模型應該都是訓練好了的,移動平臺還沒有能力進行這樣的訓練。看源碼得知這個就是最終呈現的圖片的尺寸,越高圖片越清晰。但是相應的,對手機性能的要求就越高。我在魅族pro 6 plus上測試,選擇256之後,就開始卡頓的厲害,720的話,定在一個點上大概5-7秒才能看到渲染之後的圖像。

總結

市面上已經有很多運用深度學習的應用的例子。但是大多數都是隻能讓用戶使用已經訓練好的模型,而無法讓用戶自定義。比如我想用我自己喜歡的兩張圖片作爲風格,來渲染視頻,而不是圖庫中已有的。受限於移動平臺自身的計算能力,目前還做不到;而把計算放到雲端,用戶體驗又太差(prizma網絡不好的時候要等很久,還可能失敗…)。

期待用量子計算機來做深度計算哈哈哈~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章