我們就從 Android Studio 的環始境開始說起吧。
啟動 Android Studio 之後, 務必把 SDK Tools 的版本升級到 24 及以上。 然後再把 SDK 升級到 Android 7.0 及以上。 讓 Android Studio 自己完成相關元件的更新, 導入專案, 專案的結構如下:
代碼中的 TensorflowImageClassifier 是用於跟 TensorFlow 做交互的, 還有攝頭的 handler 級及影像處理相關的代碼。 我們再來看看外部的引用庫。
包括了 Android Things 和 TensorFlow 的相關庫, 當然, Android 的 API 的版本是24。 gradle 的依賴和 Manifest 中的 filer 是和之前搭建開發環境的講解一致的。
引用的 TensorFlow 的庫, 是 aar 打包的 Tensorflow-Android-Inference-alpha-debug.aar, 這就意味著我們不需要 NDK 環境就能夠編譯整個項目了。
主要是留意 dependencies 這一項, 包括了 TensorFlow 的庫和 Android Things 的庫:
再申請了攝頭相關的許可權。 補充一下, Android Things 是不支援動態許可權的申請的。
硬體連接
接下來便是硬體如何連接了。
硬體清單如下:
Android Things 相容的開發板, 比如 Raspberry Pi 3
Android Things 相容的攝像頭,
元器件:
1 個按鈕, 見麵包板
2 個電阻, 這塊兒必須要說明一下:由於硬體連接的示意圖是接的 5V 的電壓, 一般來說 GPIO 和 LED 的承壓能力是 3V, 有些 GPIO 是相容 5V 的, 所以中間需要串聯100~200 歐的電阻。
1 個 LED 燈
1 個麵包板
杜邦線若干
可選:揚聲器或者耳機
可選:HDMI輸出
連完了硬體, 我們這時候就要理解操作流程了。
操作流程
按照前面講解的內容, 用 Andorid Studio, 連接 ADB, 配置好開發板的 Wi-Fi, 然後把應用載入到開發板上。
操作流程如下:
重啟設備, 運行程式, 直到 LED 燈開始閃爍;
把鏡頭對準貓啊, 狗啊, 或者一些傢俱;
按下開關, 開始拍攝圖片;
在 Raspberry Pi 3 中, 一般在 1s 之內, 可以完成圖片抓拍, 經 Tensorflow 處理, 然後再通過 TTS 放出聲音。 在運行的過程中 LED 燈是熄滅的;
Logcat 中會列印出最終的結果, 如果是有顯示裝置連接的話,
如果有揚聲器或者是耳機的話, 會把結果語音播報出來。
由於代碼的結構特別簡單, 注意一下幾段關健的操作即可。 想必圖形、攝頭的操作在Android 的程式設計中大家都會了, 所以不做講解了。
主要是看 LED 的初始化操作:
有必要說一下, ImageClassifierActivity 是應用唯一的 Activity 的入口。 在 Manifest 中已經有定義, 它初始化了 LED, Camera, TensorfFlow 等組件。 其中, 我們用到的Button 是 BCM32 這個管腳, 用到的 LED 是 BCM6 管腳, 相關的初始化在這個 Activity 中已經完成。
這部分代碼是捕捉按鍵按下的代碼。 當按下按鍵時, 攝頭開始捕捉資料。
把攝像頭拍攝的資料轉成 Bitmap 資料之後, 我們會調用 TensorFlow 來處理圖像。
這個函式呼叫了 TensorFlow 進行處理, 最後把結果輸出到 logcat 中。 如果代碼中調用了 tts 引擎,
這是最後的一步, 調用 TensorFlow 進行圖像識別:
把 Bitmap 圖像轉成 TensorFlow 能夠識別的資料;
把數據拷到 TensorFlow 中;
識別出圖像, 給出結果。
調用 TensorFlow 的過程還是挺好玩的, 也挺方便。 那麼, 為啥 TensorFlow 一下子就能夠識別出是什麼圖片呢?Tensorflow 的官網給出的解答:
www.tensorflow.org/tutorials/image_recognition
有一點需要提示,TensorFlow 的圖像識別分類可以用提交到網路服務器識別,也可以在本地用離線資料識別。可以先把 200M 左右的識別資料放在本地,然後進行本地識別。現在大概能分出 1000 個類別的圖像,哪 1000 個類別呢?專案代碼中已經包含了哦。
是不是運用 TensorFlow 來處理物聯網的資料會特別簡單,不光是 TensorFlow, Firebase 也可以用到 Android Things 中來。這功能,強大的沒話說了!
今天提到的這個項目,來源於 Google 在 GitHub 上維護的項目,項目的地址是
github.com/androidthings/sample-tensorflow-imageclassifier
當然,GitHub 上還有很多 Android Things 的代碼可以參考。
是不是迫不急待的自己寫一個應用呢?實際上,這個項目稍加改動便能有新的玩法。例如加上一個紅外感應器,一旦有生物在附近就馬上拍圖片,並且識別。
www.tensorflow.org/tutorials/image_recognition
有一點需要提示,TensorFlow 的圖像識別分類可以用提交到網路服務器識別,也可以在本地用離線資料識別。可以先把 200M 左右的識別資料放在本地,然後進行本地識別。現在大概能分出 1000 個類別的圖像,哪 1000 個類別呢?專案代碼中已經包含了哦。
是不是運用 TensorFlow 來處理物聯網的資料會特別簡單,不光是 TensorFlow, Firebase 也可以用到 Android Things 中來。這功能,強大的沒話說了!
今天提到的這個項目,來源於 Google 在 GitHub 上維護的項目,項目的地址是
github.com/androidthings/sample-tensorflow-imageclassifier
當然,GitHub 上還有很多 Android Things 的代碼可以參考。
是不是迫不急待的自己寫一個應用呢?實際上,這個項目稍加改動便能有新的玩法。例如加上一個紅外感應器,一旦有生物在附近就馬上拍圖片,並且識別。