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 的机器人专栏唷!