前言
這幾年大量出現影像辨識的應用,而 App Inventor 2 雖然一直沒有內建的元件可提供類似功能,但是其實 MIT 並不是完全對此棄之不顧。MIT 提供了名為 Look 的延伸元件 (extension),可用來判斷畫面中的物件類別。在這篇文章中,我們就來了解此一元件,並實際動手開發出具備影像判斷能力的 App Inventor 2 應用程式。
匯入 Look Extension
因為 Look 元件尚未收錄在 App Inventor 2 的預設元件內,因此我們需要先進行匯入才能加以使用。步驟如下:
- 利用瀏覽器開啟 MIT App Inventor Extension 頁面,網址是 http://appinventor.mit.edu/extensions/。
- 下載 Look.aix 檔案。
- 登入 App Inventor 線上開發環境。
- 開啟或新增一個 App Inventor 專案。
- 點選左方的 Extension 選項。
- 點選 “Import extension” 連結開啟匯入設定畫面。
- 點選 “Choose File” 按鈕。
- 選擇剛剛下載的 Look 元件檔案,如畫面中的 LookExtension-20181124.aix。
- 點選 “Import” 進行匯入。
- 匯入需要一點時間,請耐心等待上傳完成並出現在 Extension 選項中。
使用說明
當我們成功匯入 Look 元件之後就可以將其拖拉到畫面設計視窗並加以使用,就跟其他內建元件一樣。使用時需注意的事項如下:
- Look 元件屬於不可視元件,只有兩個參數,也就是 InputMode 與 WebViewer。
- Look 元件需要一小段的初始化時間後才可正常使用,可以使用下列積木來取得初始化完成的通知:
- InputMode 參數用來指定使用影片 (Video) 或影像 (Image) 來取得物件的畫面資料。
- 不管是使用 Video 或 Image 當作資料來源都必須指定 WebViewer 屬性才可正常運作,因此我們需要從 User Interface 選項中拉出一個 Web Viewer 元件並指定給這個參數。需特別注意的是此一 Web Viewer 元件在 Look 元件初始化完成前必須維持在可視 (Visible) 的狀態 。而當使用 Video 作為資料來源時,因為程式會使用 Web Viewer 來顯示 Video 畫面,因此使用時也必須維持在可視的狀態以便我們對準需要判斷的物體。
- 當 Look 元件完成判斷後會通過下列積木通知程式:
- 判斷回傳結果 result 為一個二維 List,而第一個維度表示各種物件的名稱與可能機率,並且可能機率越高的物件排在越前面。例如如果回傳結果是 ((sunglasses 0.71465) (mouse 0.10956) (car mirror 0.09595) (scissors 0.00826)),則表示判斷結果為 sunglass 的機率為 0.71465,而 mouse 的機率則為 0.10956,並以此類推。通常我們只需關心第一筆,也就是最有可能的物件類別,而取得該類別名稱的積木組合如下:
不過有時候即使是第一筆,其機率也可能很低,所以在取得資料後可以先加以判斷以便排除不是那麼有把握的情況,而取得該類別的可能性的積木組合如下:
我們利用 Look 元件就可以輕鬆建立物件辨識的功能應用,而在這裡可以看到兩個完整的範例專案。其中 look_demo_for_image.aia 使用手機內的圖片當作物件判斷的資料來源,而 look_demo_for_video.aia 則以影像當作資料來源。當判斷出的結果高於一定的可能性 (0.3) 時,程式會將物件名稱顯示在畫面上,並透過文字轉語音的元件念出該物件名稱。
結語
在技術上,這個套件的運作方式是將訓練過的辨識用模型下載至手機端,所以使用時不需要網路也可進行辨識,算是終端運算的一種。這個套件目前並沒有提供修改模型甚至是使用自訂模型的功能,所以僅能辨識預設所提供的物件類別。幸好目前 Look 所提供的模式可辨識 423 種物件,應足以滿足一般所需。如果我們真的需要辨識其他種類的物件,請參考我的另外一篇文章。在該篇文章中,我們利用 Azure Custom Vision 來訓練自己的模型,並在 App Inventor 2 中利用 Web 套件呼叫 Azure Custom Vision 所提供的 Web API 以進行物件的判斷。不過使用這種做法,程式需要依賴網路才能進行物件的判斷,因此我們可視實際使用情境選擇較為合適的方式來完成影像識別的功能。

