如果你關注我的前一篇文章,并按照其中的内容實踐,你可能已經學會了如何在linux上安裝一個gpu加速的tensorflow,并建構了你自己的圖像分類器。老實講,在筆記本上對圖檔進行分類是很花時間的:需要下載下傳分類用的圖檔,并在終端裡輸入很多行指令來運作分類。
不過,盡管沒有很多的公開資料,好消息是你也可以在有攝像頭的手機上運作tensofrflow的inception分類器,甚至是你自定義的分類器。然後你隻要把攝像頭對準你希望做分類的東西,tensorflow就會告訴你它認為這是什麼東西。tensorflow是可以在ios和樹莓派上面運作,不過在這個教程裡,我會介紹如何在安卓裝置上運作tensorflow。
我會一步一步地介紹如何在安卓裝置上運作定制化的圖檔分類器。實作這個功能需要很多步驟,而且其他地方沒有這樣的介紹,隻能通過反複地檢視tensorflow的github論壇。我希望這篇文章能幫你避免很多的麻煩。
下載下傳安卓的sdk和ndk
你可以在系統終端裡用下面的指令下載下傳安卓sdk并解壓縮到你的tensorflow目錄裡。
$ wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
$ tar xvzf android-sdk_r24.4.1-linux.tgz -c ~/tensorflow
還需要下載下傳一些額外的sdk編譯工具。我在開始為安卓5.1.1版下載下傳開始後關掉了這個終端。
$ cd ~/tensorflow/android-sdk-linux
$ tools/android update sdk –no-ui
随後你需要用下面的指令下載下傳安卓ndk,并解壓:
$ wget https://dl.google.com/android/repository/android-ndk-r12b-linux-x86_64.zip
$ unzip android-ndk-r12b-linux-x86_64.zip -d ~/tensorflow
下載下傳inception
$ cd ~/tensorflow
$ wget https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip -o /tmp/inception5h.zip
$ unzip /tmp/inception5h.zip -d tensorflow/examples/android/assets/
修改workspace檔案
為了使用安卓工具編譯我們的應用,需要修改workspace檔案。
$ gedit ~/tensorflow/workspace
你可以拷貝下面的代碼,并替換掉你的workspace檔案裡的相應行。
android_sdk_repository(
name = “androidsdk”,
api_level = 24,
build_tools_version = “24.0.3”,
path = “android-sdk-linux”)
android_ndk_repository(
name=”androidndk”,
path=”android-ndk-r12b”,
api_level=21)
開啟usb調試和adb工具
為了能用adb工具,你必須把你的手機設定成開發模式,并開啟usb調試功能。在開啟前,确認你的手機沒有通過usb和電腦連接配接,然後進行如下操作:
進入“設定”-“通用”-“我的手機”
進入“軟體資訊”并連續按“版本号”7次
這樣就開啟了一個計數器,并會告訴你什麼時候你的手機已經進入了開發模式
進入“設定”-“通用”-“開發選項”
開啟usb調試
每一個安卓手機都是不同的,我的安卓版lg g4手機就必須在ptp模式下才能使用adb。你需要在設定後通過把手機連到電腦上來确認調試模式已經開啟。當連接配接後手機上出現“允許usb調試”,確定你選擇的是“總是允許從這個電腦”,并按下ok。
為了測試調試設定是否成功,可以把手機連上電腦,并用下面的指令安裝adb,并測試裝置:
$ sudo apt-get install android-tools-adb
$ adb devices
你應該能看到類似于下面的響應内容:
編譯apk
$ bazel build //tensorflow/examples/android:tensorflow_demo
安裝apk
這一步是唯一的我無法客觀測試的步驟。每個安卓裝置都不一樣。如果你在這一步中碰到什麼問題,我建議你更新安卓到6.0版。對于我朋友的moto g手機,就必須把下面的指令裡面的–g選項去掉:
$ adb install -r -g bazel-bin/tensorflow/examples/android/tensorflow_demo.apk
至此,你就可以在安卓裝置上使用tensorflow和inception分類器了。我發現最有趣的是這個分類器偶爾出錯的時候。需要注意的是,原版的inception分類器隻能識别imagenet挑戰裡出現的1000種圖檔分類。
使用定制化的圖檔分類器
為了能對我們自己的圖檔來做分類,我們必須先用我們移動裝置的圖檔檔案資料重新訓練,并把訓練結果放入assets目錄
首先我們要編譯圖檔訓練優化器:
$ bazel build tensorflow/python/tools:optimize_for_inference
然後再用這個訓練優化器對我們自己的圖檔資料做訓練:
$ bazel-bin/tensorflow/python/tools/optimize_for_inference \
–input=tf_files/retrained_graph.pb \
–output=tensorflow/examples/android/assets/retrained_graph.pb
–input_names=mul \
–output_names=final_result
把訓練後的标簽放入assets目錄
$ cp ~/tensorflow/tf_files/retrained_labels.txt ~/tensorflow/tensorflow/examples/android/assets/
編輯tensorflowimagelistener.java
$ gedit ~/tensorflow/tensorflow/examples/android/src/org/tensorflow/demo/tensorflowimagelistener.java
private static final int input_size = 299;
private static final int image_mean = 128;
private static final float image_std = 128;
private static final string input_name = “mul:0”;
private static final string output_name = “final_result:0”;
private static final string model_file = “file:///android_asset/retrained_graph.pb”;
private static final string label_file = “file:///android_asset/retrained_labels.txt”;
重新編譯apk
重新安裝apl
原文釋出時間為:2016-11-12
本文來自雲栖社群合作夥伴“大資料文摘”,了解相關資訊可以關注“bigdatadigest”微信公衆号