tensorflow 幾個android demo源碼環(huán)境搭建
說明
tensorflow上有幾個example,本文重點關注其在android上的應用,源碼在gitHub上有,這個apk是什么樣子,大家可以通過點擊這里進行下載。
系統(tǒng)要求
- 如果需要獨立的庫,需要分開構建tensorflow的源碼
- 物體追蹤以及YUV轉(zhuǎn)RGB在
libtensorflow_demo.so
中 - 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,比較方便,簡單提一下。
- 需要ubuntu14.04及以上
- 需要JDK 8,如果沒安裝請運行
sudo apt-get install openjdk-8-jdk
- 添加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 -
- 安裝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)
注意:
- api_level需要設置成你本地sdk最高的版本,推薦23及以上,在android:build.gradle 以及AndroidManifest.xml也對應修改targetSdkVersion
- 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
- gradle必須要在3.3以上版本
- build_tool_version需要指定在25以上
- 配置好你的ndk
- 很重要:在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去運行了。