作者/攝影 | 曾吉弘 |
時間 | 2小時 |
成本 |
|
難度 |
★★★★☆ |
材料表 |
|
延續先前的水果分類器教學,今天來和機器人結合吧。一樣使用 MIT App Inventor 的 Personal Image Classifier 網站來訓練以下三種路牌。請實際印出來並放在之後機器人要執行的環境中來行走,這樣效果會比較好。最後把訓練好的 .model 檔上傳到您的 App Inventor 專案中。離線視覺辨識app 就完成囉!
訓練神經網路
請參考本文 https://blog.cavedu.com/2019/08/27/app-inventor-image-classifier
樂高機器人
組裝範例,基本上就是雙輪器人搭配一個可以放手機的地方就可以囉。其實按照這樣的架構,除了樂高機器人以外,其他任何支援藍牙或 W-Fi的機器人平台 (Arduino / 7697 / microbit) 都可以依樣畫葫蘆。但有了EV3元件 (CAVEDU寫的喔) 就不需要寫 EV3 端的程式,可以節省很多時間了!
App Inventor結合其他物聯網開發板的文章請參考:http://www.appinventor.tw/iot
App Inventor端
請先與EV3配對完成,這樣才能在app 的 listpicker 中找到它。
Designer頁面設定
請由MIT App Inventor 網站下載 personalImageClassifier擴充檔,或由此下載 .aia原始檔。再匯入您的 App Inventor 專案即可。請注意,PIC元件無法像 Sound元件一樣,無法透過程式指令在執行過程中修改所使用的 model (Sound元件可以隨時修改其 Source 來源檔案)
本專案元件說明如下,您之後可以根據個人需要來修改介面配置:
- personalImageClassifier 元件(本文後簡稱PIC元件),別忘了匯入喔
- 一個 Listpicker 來選取已配對的藍牙裝置 (EV3)
- 一個 中斷藍牙連線的按鈕
- 一個 WebViewer 用來即時預覽相機的畫面
- 切換前後鏡頭的按鈕 (ButtonSwitch)
- 顯示結果用的標籤 (Label_Result)
- BluetoothClient 元件:進行藍牙通訊
- EV3Motor:控制馬達,請設定馬達為 BC (需搭配BluetoothClient 元件)
- EV3Sound:使EV3主機發出聲音 (需搭配BluetoothClient 元件)
Blocks
STEP1 PIC元件相關設定
當PIC元件準備完成之後,把在PIC網站上訓練好的模型的 ModelLabel 顯示在Label 上。可以先檢查有沒有匯入錯的辨識模型檔。
STEP2
如果PIC元件發生錯誤的話,把 errorCode 顯示出來
STEP3 EV3的藍牙連線設定
按下 ListPicker,選擇已配對好的EV3,連線成功的話就會讓 Clock 的 timer 啟動來辨識物體。斷線的則一如往常簡單,呼叫 BluetoothClient 的 Disconnect 指令就好。
EP4 連續辨識影像
水果辨識器的做法是按下按鈕才辨識一次,但在此希望機器人能連續辨識來做出對應的粽剁,所以改用 Clock。在此設定 clock 的 Timerinterval 為100,請根據實際狀況來調整這個參數,太快太慢都要拿捏一下。
STEP4 取得辨識結果與信心指數並控制機器人
在PIC元件的 GotClassification事件中,所回傳的 result 是 (類別名稱, 信心指數) 的清單,例如 (apple, 0.763)。信心指數原為 0~1之間的小數,在此 x 100 轉換為百分比。
在此先檢查信心指數 (value) 是否大於60,並進一步根據辨識結果來執行對應的動作。EV3motor 的 RotateSyncIndefinetly 可設定 power (馬達轉速) 與 turnRatio (轉彎百分比)turnRatio 設為 0 代表前進不轉彎,> 0 則代表右轉,一路到 100 就會變成原地右轉,但轉彎的效果會根據您機器人的架構而定。 < 0 則代表左轉。 如果您發現 turnRatio > 0 機器人卻左轉的話,請把左右馬達的電線對調即可。
注意,在此使用了 local variable 區域變數 (class, value),如果您覺得不太習慣的話,改用全域變數也可以。
執行畫面
開啟程式會直接開啟相機鏡頭並顯示於app中的 WebViewer元件,隨後會看到 ModelLabel (模型可分辨的影像類別)。點選 Listpicker 來選取您的EV3 (利如下圖中的 00:16:53:49:28:47),連線成功之後機器人就會開始移動。沒看到路牌就會前進,如果看到路牌就會執行對應的左轉、右轉與停止等動作,一起來玩玩看吧!
相關連結:
老師您好:
我在測試時,遇到了一個問題。
請問為什麼當藍芽連線成功後,會啟動”clock啟用計時為真”,但手機video辨識畫面卻當機了…無法進行辨識。請問這是遭遇到了甚麼問題呢?
您回頭去看看水果辨識器的範例,先單獨測試影像辨識是否可執行,有可能是手機的問題喔