文| 谷歌開發技術專家 (GDE) 王玉成 (York Wang)java
前面絮叨了這麼多。好像尚未一個總體的概念。咱們怎樣寫一個完整的代碼呢?android
現在深度學習很是火,那咱們就在Android Things中,利用攝像頭抓拍圖片,讓 TensorFlow 去識別圖像,最後用揚聲器告訴咱們結果。git
是否是很是酷?說主要的功能就說了這麼長一串。那壘代碼得壘多久啊?github
咱們就從 Android Studio 的環始境開始提及吧。編程
啓動 Android Studio 以後。務必把 SDK Tools 的版本號升級到 24 及以上。而後再把 SDK 升級到 Android 7.0 及以上。讓 Android Studio 本身完畢相關組件的更新。導入項目。項目的結構例如如下:
代碼中的 imageclassifier 是用於跟 TensorFlow 作交互的。還有攝頭。圖片處理的相關 handler。markdown
咱們再來看看外部的引用庫:
網絡
包含了 Android Things 和 TensorFlow 的相關庫,固然。Android 的 API 的版本號是24。gradle 的依賴和 Manifest 中的 filer 是和以前搭建開發環境的解說一致的。函數
引用的 TensorFlow 的庫是 aar 打包的 Tensorflow-Android-Inference-alpha-debug.aar,這就意味着,咱們不需要 NDK 環境就可以編譯整個項目了。post
主要是留意 dependencies 這一項。包含了 TensorFlow 的庫和 Android thing 的庫:
學習
再申請了攝頭相關的權限。
補充一下,Android Things 是不支持動態權限的申請的。
接下來即是硬件怎樣鏈接了。
硬件清單例如如下:
Android Things 兼容的開發板,比方 Raspberry Pi 3
Android Things 兼容的攝像頭,比方 Raspberry Pi 3 攝頭模塊
元器件:
1 個button,見面包板
2 個電阻。這塊兒必需要說明一下:由於圖片是接的 5V 的電壓。通常來講 GPIO 和 led 的承壓能力是 3V,有些 GPIO 是兼容 5V 的,因此中間需要串聯 100~200 歐的電阻。
固然。爲了保險。建議用 3.3V 的電壓。
1 個LED燈
1 個麪包板
杜邦線若干
可選:揚聲器或者耳機
可選:HDMI輸出
連完了硬件。咱們這時候就要理解操做流程了。
依照前面解說的內容。用 Andorid Studio,鏈接 ADB。配置好開發板的 Wi-Fi,而後把應用載入到開發板上。
操做流程例如如下:
從新啓動設備,執行程序,直到 LED 燈開始閃爍。
把鏡頭對準貓啊。狗啊。或者一些傢俱。
按下開關。開始拍攝圖片;
在 Raspberry Pi 3 中。通常在 1s 以內。可以完畢圖片抓拍,經 Tensorflow 處理,而後再經過 TTS 放出聲音。在執行的過程當中 LED 燈是熄滅的;
Logcat 中會打印出終於的結果。假設是有顯示設備鏈接的話,圖片和結果都會顯示出來;
假設有揚聲器或者是耳機的話,會把結果語音播報出來。
由於代碼的結構特別簡單,注意一下幾段關健的操做就能夠。想必圖形、攝頭的操做在Android 的編程中你們都會了,因此不作解說了。
主要是看 LED 的初始化操做:
有必要說一下。ImageClassifierActivity.java 是應用惟一的 Activity 的入口。
在 Manifest 中已經有定義,它初始化了 LED, Camera, TensorfFlow 等組件。
當中,咱們用到的 Button 是 BCM32 這個管腳,用到的 LED 是 BCM6 管腳,相關的初始化在這個 Activity 中已經完畢。
這部分代碼是捕捉按鍵按下的代碼。當按下按鍵時,攝頭開始捕捉數據。
把攝像頭拍攝的數據轉成 Bitmap 文件以後,咱們會調用 TensorFlow 來處理圖像。
這個函數調用了 TensorFlow 進行處理,最後把結果輸出到 logcat 中。假設代碼中調用了 tts 引擎。那麼則把結果轉成語音讀出來。
看來,最重要的就是 TensorFlowClassifie 類的 recognizeImage() 這個接口了。咱們繼續往下看。
這是最後的一步,調用 TensorFlow 進行圖像識別:
把 RGB 圖像轉成 TensorFlow 可以識別的數據;
把數據拷到 TensorFlow 中。
識別出圖像,給出結果。
調用 TensorFlow 的過程仍是挺好玩的,也挺方便。那麼,爲啥 TensorFlow 一會兒就可以識別出是什麼圖片呢?Tensorflow 的官網給出的解答:
www.tensorflow.org/tutorials/image_recognition
有一點需要提示,TensorFlow 的圖像識別分類可以用網絡提交到server識別。也可以離線的數據識別。可以先把 200M 左右的識別數據放在本地,而後提交後識別。
現在大概能分出 1000 個類別的圖像,哪 1000 個類別呢?項目代碼中已經包含了哦。
是否是運用 TensorFlow 來處理物聯網的數據會特別簡單,不光是 TensorFlow, Firebase 也可以用到 Android Things 中來。這功能。強大的沒話說了!
今天提到的這個項目,來源於 Google 在 GitHub 上維護的項目。項目的地址是
github.com/androidthings/sample-tensorflow-imageclassifier
固然。GitHub 上還有很是多 Android Things 的代碼可以參考。
是否是迫不急待的本身寫一個應用呢?實際上,這個項目稍加修改便能有新的玩法。
好比加上一個紅外感應器,一旦有生物在附近就當即拍圖片,並且識別。
大開你的腦洞吧
這一篇文章是這個專題的最後一篇了。寫完整個專題。發現 Android Things 帶給開發人員太多太多的便利,怎樣燒寫文件?怎樣運用 SDK?甚至怎樣用 Google 的其餘服務作物聯網相關的數據處理?都有太多太多的現成的方案供咱們選擇,感嘆使用 Android Things 進行物聯網應用開發實在太方便了。
您假設有不論什麼涉及到 Android Things 方面的想法。都歡迎你們在下方留言,咱們會把好的建議轉交給 Android Things 的產品部門。
或許在某一天,你的建議就是 Andorid Things 的一部分。