tensorflow 幾個android demo源碼環(huán)境搭建

tensorflow 幾個android demo源碼環(huán)境搭建

說明

tensorflow上有幾個example,本文重點關注其在android上的應用,源碼在gitHub上有,這個apk是什么樣子,大家可以通過點擊這里進行下載。

系統(tǒng)要求

  1. 如果需要獨立的庫,需要分開構建tensorflow的源碼
  2. 物體追蹤以及YUV轉(zhuǎn)RGB在libtensorflow_demo.so
  3. android5.0 ( API21 )及以上

幾個例子的說明

這個apk安裝完成后會有3個圖標,啟動不同的Activity對應不同的demo,每個demo都可以通過音量鍵來開啟和關閉后臺信息。

  • TF Classify:

    啟動頁面為/src/org/tensorflow/demo/ClassifierActivity.java,其作用是啟動相機,自動識別出相機預覽框中的物體。

  • TF Detect

    啟動頁面為/src/org/tensorflow/demo/DetectorActivity.java,使用深度神經(jīng)網(wǎng)絡模型進行運行物體檢測。

  • TF Stylize
    啟動頁面為src/org/tensorflow/demo/StylizeActivity.java,實時將相機的預覽界面處理成特定畫風。

新版本apk的下載

最新版本的apk資源,可以訪問https://ci.tensorflow.org/view/Nightly/job/nightly-android/ ,點擊view節(jié)點下面的output,點擊tensorflow_demo.apk進行下載。

好了,以上是一些基本的介紹,現(xiàn)在我們開始下載demo的源碼,進行編譯。

1. 安裝tensorflow

關于tensorflow的安裝,可以直接前往官方文檔地址https://www.tensorflow.org/install/ ,也可以參照我之前寫的博客 http://www.lxweimin.com/p/5b4e961f010f ,此處不再贅述。

2. 安裝構建工具bazel

bazel的安裝,比較簡單,可以直接參考官方文檔https://bazel.build/versions/master/docs/install.html ,但值得注意的是,bazel目前還不支持在window上構建Android,官方說的是后期可以支持gradle。

博主用的是ubuntu,比較方便,簡單提一下。

  1. 需要ubuntu14.04及以上
  2. 需要JDK 8,如果沒安裝請運行
sudo apt-get install openjdk-8-jdk
  1. 添加APT庫
echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list`

curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
  1. 安裝bazel
sudo apt-get update && sudo apt-get install bazel

如果只是要更新,則運行

sudo apt-get upgrade bazel

3. 下載源碼

好了,終于到了下載源碼部分了,首先,新建一個文件夾,比如AI,然后進入到AI文件夾,使用git下載代碼。

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

注意--recurse-submodules參數(shù)是用來防止后面出現(xiàn)的protobuf錯誤的。

4. 配置本地環(huán)境

載好源碼后,會出現(xiàn)一個tensorflow的文件夾,這里面放著所有tensorflow的源碼,但是我們要關注的源碼位于..\AI\tensorflow\tensorflow\examples\android目錄下。

1. 修改WORKSPACE文件

因為本地環(huán)境的不同,因此我們需要先修改/tensorflow目錄下的WORKSPACE文件,找到如下一段代碼,對應配置好你的sdk版本以及位置,還有ndk的版本和位置,并且去掉注釋:

  # 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_SDK>",
  #)
  #
  # Android NDK r12b is recommended (higher may cause issues with Bazel)
  #android_ndk_repository(
  #    name="androidndk",
  #    path="<PATH_TO_NDK>",
  #    # This needs to be 14 or higher to compile TensorFlow. 
  #    # Note that the NDK version is not the API level.
  #    api_level=14)

比如我的就修改成了:

android_sdk_repository(
    name = "androidsdk",
    # 設置成你安裝sdk的最高版本,對應修改manifest.xml以及gradle的target
    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.3",
    # Replace with path to Android SDK on your system
    path = "/home/cxq/android-sdk-linux",
)

# 推薦使用r12版本,更高的版本可能會造成bazel出錯
android_ndk_repository(
    name="androidndk",
    path="/home/cxq/android-sdk-linux/ndk-bundle",
    # This needs to be 14 or higher to compile TensorFlow. 
    # Note that the NDK version is not the API level.
    api_level=14)

注意

  1. api_level需要設置成你本地sdk最高的版本,推薦23及以上,在android:build.gradle 以及AndroidManifest.xml也對應修改targetSdkVersion
  2. ndk的版本,推薦使用r12,否則bazel編譯的時候會報錯。

2. 構建

進入到AI/tensorflow目錄下,輸入以下命令:

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

如果有報protocol buffers的相關錯誤,運行git submodule update --init命令,并且確保WORKSPACE文件配置對了

3. 安裝apk

開啟手機的調(diào)試模式,運行:

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

4. 使用Android Studio

可以在Android Studio中直接打開tensorflow/examples/android,但是需要配置好你的gradle、sdk、ndk

  1. gradle必須要在3.3以上版本
  2. build_tool_version需要指定在25以上
  3. 配置好你的ndk
  4. 很重要:在android:build.gradle 中配置好你的bazel路徑,默認的是如下的:
def bazelLocation = '/usr/local/bin/bazel'

但是在該路徑下并沒有bazel,因此會報如下錯誤:

Error:Execution failed for task ':buildNativeBazel'.
A problem occurred starting process 'command '/usr/local/bin/bazel''

此時只需要把路徑改成你的bazel路徑就好,比如我的是:

def bazelLocation = '/usr/bin/bazel'

這樣配置完畢后,就能直接在AS中使用run去運行了。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容