tensorflow上有幾個example,本文重點關注其在android上的應用,源碼在gitHub上有,這個apk是什麼樣子,你們能夠經過點擊這裏進行下載。html
libtensorflow_demo.so
中這個apk安裝完成後會有3個圖標,啓動不一樣的Activity對應不一樣的demo,每一個demo均可以經過音量鍵來開啓和關閉後臺信息。java
TF Classify:linux
啓動頁面爲/src/org/tensorflow/demo/ClassifierActivity.java
,其做用是啓動相機,自動識別出相機預覽框中的物體。android
TF Detectgit
啓動頁面爲/src/org/tensorflow/demo/DetectorActivity.java
,使用深度神經網絡模型進行運行物體檢測。github
TF Stylize
啓動頁面爲src/org/tensorflow/demo/StylizeActivity.java
,實時將相機的預覽界面處理成特定畫風。ubuntu
最新版本的apk資源,能夠訪問https://ci.tensorflow.org/view/Nightly/job/nightly-android/ ,點擊view節點下面的output,點擊tensorflow_demo.apk進行下載。api
好了,以上是一些基本的介紹,如今咱們開始下載demo的源碼,進行編譯。網絡
關於tensorflow的安裝,能夠直接前往官方文檔地址https://www.tensorflow.org/install/ ,也能夠參照我以前寫的博客 http://www.jianshu.com/p/5b4e961f010f ,此處再也不贅述。curl
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
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 -
sudo apt-get update && sudo apt-get install bazel
若是隻是要更新,則運行
sudo apt-get upgrade bazel
好了,終於到了下載源碼部分了,首先,新建一個文件夾,好比AI,而後進入到AI文件夾,使用git下載代碼。
git clone --recurse-submodules https://github.com/tensorflow/tensorflow.git
注意:--recurse-submodules
參數是用來防止後面出現的protobuf錯誤的。
載好源碼後,會出現一個tensorflow的文件夾,這裏面放着全部tensorflow的源碼,可是咱們要關注的源碼位於..\AI\tensorflow\tensorflow\examples\android目錄下。
由於本地環境的不一樣,所以咱們須要先修改/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編譯的時候會報錯。
進入到AI/tensorflow目錄下,輸入如下命令:
bazel build -c opt //tensorflow/examples/android:tensorflow_demo
若是有報protocol buffers的相關錯誤,運行git submodule update --init
命令,而且確保WORKSPACE文件配置對了
開啓手機的調試模式,運行:
adb install -r bazel-bin/tensorflow/examples/android/tensorflow_demo.apk
能夠在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去運行了。