Android 手機整合了許多網路大廠服務,除了常用的地圖之外,另一項好用的功能就是語音識別,透過語音識別來控制機器人也是樂趣十足呢。本期專欄中,您將可對手機說出「go」、「back」、「left」以及「right」等四個語音指令,讓機器人執行前進、後退與左右轉等共四種動作。有接觸過App Inventor 的師長朋友們,歡迎從App Inventor 中文學習網下載原始碼回去加入更多有趣的功能。

語音識別服務
只要是Android 手機或平板,都可直接使用網路大廠的語音識別功能,甚至在網路大廠的Chrome 瀏覽器中,只要您的計算機接上麥克風,也能擁有這項貼心的服務。使用網路大廠語音識別功能時,是將您的聲音資料送到網路大廠伺服器,再回傳判斷結果,所以都要用到網路。也正因為如此,App Inventor的SpeechRecognizer 元件不需設定任何屬性。將來如果您有興趣,可以嘗試用Java 程式語言去寫正規的Androidapp 來呼叫網路大廠語音識別服務,就會發現它實際上是根據辨識結果的關聯性由高到低迴傳一整個陣列,例如我們說「right」,辨識結果可能會是「right、night、nine⋯」等念起來很類似的字。
App Inventor 直接省略這個步驟只回傳第一筆資料,也就是關聯性最高的那筆資料,對初學者來說是相當合理又簡便的做法。
本期專題將使用App Inventor 中的SpeechRecognizer 元件來呼叫Google語音識別服務,程式中定義了四個指令來控制機器人的動作。我們使用了SpeechRecognizer1.GetText 指令(圖1a),它會啟動網路大廠語音識別服務並進行辨識,辨識完成後會自動啟動SpeechRecognizer1.AfterGettingText事件(圖1b),並將辨識結果以result這個引數回傳。

開始玩機器人
請把NXT 機器人組裝好,並將左側馬達接在NXT 的輸出端B ,右側則是輸出端C( 注1)。請確認NXT 主機的藍芽是啟動的,接著將NXT 主機與Android 手機進行藍芽配對(注2),完成之後就可以把機器人放到一邊了。啟動藍芽之後您可以從NXT 主機的螢幕左上角看到藍芽的符號。
接下來依序介紹程式的各個功能:
STEP1 登入畫面:
首次進入程式的畫面如圖2a , 只有「NXT 裝置列表/ 聯機」按鈕可以按,其它所有按鈕都無法操作。點選「NXT 裝置列表/ 聯機」按鈕後進入藍芽裝置列表(圖2b),請找到剛剛配對完成的NXT 主機名(本範例為abc),點選之後就會由Android 裝置對NXT 主機發起藍芽聯機。順利聯機成功的話,「NXT 裝置列表/ 聯機」按鈕(圖2c)。

STEP2 程式初始化:
在點選聯機清單之前(ListPickerConnect 的BeforePicking 事件),需先將列表內容指定為Android 裝置上的藍芽配對清單(圖3a)。點選之後則先測試聯機是否成功,成功則將「點我語音識別」與「斷線」按鈕設為可點選(圖3b)。

STEP3 按鈕啟動Google語音識別服務:
按下「點我語音識別」之後,會透過SpeechRecognizer1.GetText 指令來呼叫網路大廠的語音識別服務, 本指令不需要設定任何引數(圖4)。

TEP4 語音識別完成事件:
對著畫面上的麥克風講完話之後,會自動啟動SpeechRecognizer1.AfterGettingText 事件, 並回傳一個result 引數代表辨識結果。我們先將辨識結果顯示在手機螢幕的黃色Label 上, 接著判斷result 是否等於指定文字,並以此要求機器人執行對應的動作。圖5a 中, 辨識結果等於「go」的話,會讓機器人以80% 的電力前進10 公分。完整的事件內容總共包含了四個if 判斷結構,代表四個不同的狀況(圖5b),您可以根據需求來加入更多語音指令。

STEP5 斷線:
按下「斷線」按鈕之後,會中止藍芽聯機(BluetoothClient.Disconnect指令),並使畫面上的各個元件恢復到程式一開始時的狀態(圖6)。

操作
實際執行的時候,請先確認NXT已經開機且藍芽也啟動了。接著在您的Android 裝置上點選畫面中的「NXT 裝置列表/ 聯機」按鈕,會進到如圖2b的藍芽清單畫面,點選您所要的NXT主機名並聯機成功後,就能對手機說話來控制機器人啦(圖7)!辨識過程中,請保持字正腔圓口齒清晰,並注意不要處在太嘈雜的環境裡操作,不然語音識別的效果會打點折扣。圖8 就是把right 辨識為light ,這樣機器人就沒反應啦!

本範例介紹瞭如何對著手機說出特定的字詞, 藉由網路大廠語音識別服務來控制機器人。期待您從本期專欄的內容來激盪出更多有趣的火花。今年的六篇專欄您都喜歡嗎?請繼續關注CAVE 的機器人專欄唷!