跳到主要内容

第 8 课 · 语音识别

这一课学什么?

这一课只讲一个核心点:语音命令。

语音模块不会持续给你一串变化数值,它更像是在“听到一次命令”之后,返回一个对应的编号。

ASR 语音识别模块

学习目标

  • 知道默认唤醒词和常用命令词
  • 会读取语音模块返回的命令 ID
  • 会把几个常用命令 ID 映射成动作
  • 理解语音输入和持续型传感器输入的区别
  • 能完成一个简单的“听口令行动”程序

用到的硬件和功能

这一课需要接入 ASR 语音识别模块。

会用到的接口主要有:

  • cm.power_on():给扩展模块上电。
  • cm.asr_get_command():读取最新命令 ID。没有新命令时通常返回 0
  • cm.asr_play_command(cmd_id):播报指定命令。cmd_id 是你想让模块播报的命令编号,例如 192021 或自学习得到的 456
  • cocube.move_ms(direction, speed, ms):按时间执行一次动作。directioncocube.FORWARD / cocube.BACKWARDspeed 是速度;ms 是持续时间。
  • cocube.rotate_ms(direction, speed, ms):按时间转向。directioncocube.LEFT / cocube.RIGHTspeed 是转向速度;ms 是持续时间。
  • cocube.brake():刹车停车。

先认识这个能力

语音识别和距离、光照这类输入有一个明显区别:

  • 距离和光照是持续变化的
  • 语音命令更像一次事件

所以这一课的程序会特别像“等待触发”:

  • 听到了,再执行
  • 没听到,就继续等待

在真正开始写代码前,还要先知道这套模块的基本使用顺序:

  1. 先说唤醒词
  2. 等模块进入聆听状态
  3. 再说命令词
  4. 程序里读取返回的命令 ID

默认可用的唤醒词有:

  • 你好小智
  • 小智你好

如果之前做过自学习,也可能还存在一个“学习的唤醒词”,对应 ID 1

常用的基础命令词可以先记这几组:

ID命令词适合拿来做什么
19前进第一组移动测试
20后退第一组移动测试
21停车第一组移动测试
22左转九十度扩展动作
25右转九十度扩展动作
28加速一档扩展动作
29减速一档扩展动作
82打开夹爪扩展模块联动
83关闭夹爪扩展模块联动

开始编程

1. 先看看模块返回了什么命令 ID

import time
import cocube_module as cm

cm.power_on()
time.sleep_ms(500)

while True:
command = cm.asr_get_command()

if command:
print("command =", command)

time.sleep_ms(50)

先跑这段程序,确认模块能稳定返回命令编号。

1.1 使用时先说什么?

推荐先按这个节奏测试:

  1. 先说 你好小智小智你好
  2. 等模块响应
  3. 再说 前进后退停车

如果模块已经被重新学习过,也可以先试自己设置过的唤醒词。

2. 把 3 个常用命令绑定成动作

先从最小组合开始,只用 3 个命令:

  • 19:前进
  • 20:后退
  • 21:停车
import time
import cocube
import cocube_module as cm

cm.power_on()
time.sleep_ms(500)

while True:
command = cm.asr_get_command()

if command == 19:
print("收到前进命令")
cm.asr_play_command(19)
cocube.move_ms(cocube.FORWARD, 25, 500)
elif command == 20:
print("收到后退命令")
cm.asr_play_command(20)
cocube.move_ms(cocube.BACKWARD, 25, 500)
elif command == 21:
print("收到停车命令")
cm.asr_play_command(21)
cocube.brake()

time.sleep_ms(50)

这段程序的重点是:
同样是一个数字编号,真正执行什么动作,完全由你来定义。

运行时观察什么

运行这段程序时,重点看这些现象:

  • 没有新命令时,asr_get_command() 通常返回 0
  • 收到命令后,动作是一次性触发的,不是持续变化的
  • 前进、后退、停车这类命令最适合作为第一组测试
  • 先把命令识别稳定,再增加更复杂的动作组合

常见问题 / 使用提醒

  • 初次上电后,模块需要一点准备时间
  • 环境越安静,识别越稳定
  • 先说唤醒词,再说命令词;只说命令词通常不会触发
  • 先用 2 到 3 个命令跑通,再慢慢往上加
  • 如果程序没有反应,先只打印命令 ID,不要一开始就排查动作逻辑

如果想换成自己的口令

这一类功能在 cocube-learn 里有更完整的操作说明,这里把编程时最需要的部分提炼出来。

1. 学习新的唤醒词

唤醒词的作用是让模块从待机状态进入聆听状态。

操作顺序:

  1. 先用默认唤醒词 你好小智小智你好 唤醒模块
  2. 学习唤醒词
  3. 按语音提示,说出你想设置的新唤醒词
  4. 等模块确认后,再用新的唤醒词测试一次

使用时注意:

  • 重新学习前,最好先删除旧的学习唤醒词
  • 新唤醒词尽量简短、清晰,避免和常用命令太像
  • 环境安静一些,成功率会更高

2. 学习新的命令词

如果你不想只用默认的 前进后退停车,可以自己录入新的命令词。

操作顺序:

  1. 先用唤醒词唤醒模块
  2. 学习命令词
  3. 按提示依次录入自己的命令词
  4. 每学习成功一条,都会占用一个新的命令 ID

这里最关键的一点是:

  • 自学习命令词的 ID 从 4 开始
  • 第一条通常是 4
  • 第二条通常是 5
  • 第三条通常是 6

所以你学完之后,最好先跑一遍打印 command 的程序,确认自己的命令词分别对应哪个 ID,再写动作映射。

3. 删除已经学习的词条

如果之前学错了,或者想重新录,可以这样做:

  1. 先用唤醒词唤醒模块
  2. 我要删除
  3. 再根据提示选择:
  • 删除命令词
  • 删除唤醒词
  • 全部删除
  • 退出删除

唤醒词与命令表

如果你需要查完整的唤醒词和命令词,可以直接看下面这张表。

完整命令 ID 列表(从 cocube-learn 搬过来,默认折叠)
ID命令词功能类型播报语句
1学习的唤醒词唤醒词我在
2你好小智唤醒词我在
3小智你好唤醒词我在
4第一个自定义命令词好的
5第二个自定义命令词好的
6第三个自定义命令词好的
7第四个自定义命令词好的
8第五个自定义命令词好的
9第六个自定义命令词好的
10第七个自定义命令词好的
11第八个自定义命令词好的
12第九个自定义命令词好的
13第十个自定义命令词好的
14第十一自定义命令词好的
15第十二自定义命令词好的
16第十三自定义命令词好的
17第十四自定义命令词好的
18第十五自定义命令词好的
19前进命令词开始前进
20后退命令词开始后退
21停车命令词已停车
22左转九十度命令词左转九十度
23左转四十五度命令词左转四十五度
24左转三十度命令词左转三十度
25右转九十度命令词右转九十度
26右转四十五度命令词右转四十五度
27右转三十度命令词右转三十度
28加速一档命令词已加速
29减速一档命令词已减速
30打开车灯命令词车灯已打开
31关闭车灯命令词车灯已关闭
32巡线模式命令词已进入+巡线模式
33追光模式命令词已进入+追光模式
34蓝牙控制模式命令词已进入+蓝牙控制模式
35避障模式命令词已进入+避障模式
36人脸识别命令词已进入+人脸识别模式
37物体追踪命令词已进入+物体追踪模式
38物体识别命令词已进入+物体识别模式
39巡线追踪命令词已进入+巡线追踪模式
40颜色识别命令词已进入+颜色识别模块
41标签识别命令词已进入+标签识别模式
42物体分类命令词已进入+物体分类模式
43二维码识别命令词已进入+二维码识别模式
44清除屏幕命令词已清除屏幕
45学习一次命令词开始学习
46遗忘命令词已遗忘
47加载模型命令词模型加载中
48保存模型命令词模型已保存
49拍照并保存命令词拍照完成
50保存并返回命令词已保存
51显示数字零命令词好的
52显示数字一命令词好的
53显示数字二命令词好的
54显示数字三命令词好的
55显示数字四命令词好的
56显示数字五命令词好的
57显示数字六命令词好的
58显示数字七命令词好的
59显示数字八命令词好的
60显示数字九命令词好的
61显示笑脸命令词好的
62显示哭脸命令词好的
63显示爱心命令词好的
64读取当前位置命令词读取中
65读取环境光命令词读取中
66读取指南针命令词读取中
67读取温度命令词读取中
68读取加速度命令词读取中
69读取声音强度命令词读取中
70读取按键A命令词读取中
71读取按键B命令词读取中
72打开摄像头命令词摄像头已打开
73关闭摄像头命令词摄像头已关闭
74打开风扇命令词风扇已打开
75关闭风扇命令词风扇已关闭
76风速一档命令词一档启动
77风速二档命令词二档启动
78风速三档命令词三档启动
79开启摇头命令词开始摇头
80停止摇头命令词停止摇头
81归位命令词正在归位
82打开夹爪命令词夹爪已打开
83关闭夹爪命令词夹爪已关闭
84打开蜂鸣器命令词蜂鸣器已打开
85关闭蜂鸣器命令词蜂鸣器已关闭
86打开喇叭命令词喇叭已打开
87关闭喇叭命令词喇叭已关闭
88播放音乐命令词开始播放
89停止播放命令词停止播放
90上一曲命令词切换上一曲
91下一曲命令词切换下一曲
92单曲循环命令词单曲循环
93列表循环命令词列表循环
94随机播放命令词随机播放
95增大音量增大音量音量已增大
96减小音量减小音量音量已减小
97最大音量最大音量音量已最大
98最小音量最小音量音量已最小
99中等音量中等音量中等音量
100开播报开播报开启播报功能
101关播报关播报关闭播报功能
102打开灯光命令词灯光已开
103关闭灯光命令词灯光已关
104调高亮度命令词亮度调高
105调低亮度命令词亮度调低
106最高亮度命令词最高亮度
107最低亮度命令词最低亮度
108调高色温命令词色温调高
109调低色温命令词色温调低
110日光模式命令词日光模式
111月光模式命令词月光模式
112设置为红色命令词已设红色
113设置为橙色命令词已设橙色
114设置为黄色命令词已设黄色
115设置为绿色命令词已设绿色
116设置为青色命令词已设青色
117设置为蓝色命令词已设蓝色
118设置为紫色命令词已设紫色
119设置为白色命令词已设白色
120打开空调命令词空调已开
121关闭空调命令词空调已关
122温度调高命令词温度调高
123温度调低命令词温度调低
124制冷模式命令词制冷模式
125制热模式命令词制热模式
126自动模式命令词自动模式
127除湿模式命令词除湿模式
128通风模式命令词通风模式
129打开上下扫风命令词上下扫风
130关闭上下扫风命令词停止扫风
131打开左右扫风命令词左右扫风
132关闭左右扫风命令词停止扫风
133打开窗户命令词窗户已开
134关闭窗户命令词窗户已关
135打开窗帘命令词窗帘已开
136关闭窗帘命令词窗帘已关
137开门命令词门已打开
138关门命令词门已关闭

挑战一下

做一个“自定义口令遥控车”:

  1. 先学习 3 条自己的命令词
  2. 用打印程序确认它们对应的 ID
  3. 把这 3 个 ID 分别绑定成前进、后退、停车
  4. 再额外加 1 条扩展命令,例如左转或打开夹爪

如果想继续升级,可以试这几个方向:

  • 同时兼容默认命令词和自定义命令词
  • 给不同命令配不同的屏幕提示或播报
  • 再增加一条“转向”或“抓取”动作
参考代码:自定义命令词控制 CoCube(先自己试,再展开)
import time
import cocube
import cocube_module as cm

cm.power_on()
time.sleep_ms(500)

while True:
command = cm.asr_get_command()

if command == 4:
cocube.move_ms(cocube.FORWARD, 25, 600)
elif command == 5:
cocube.move_ms(cocube.BACKWARD, 25, 600)
elif command == 6:
cocube.brake()
elif command == 7:
cocube.rotate_ms(cocube.LEFT, 25, 500)

time.sleep_ms(50)

这段代码默认把前 4 条自学习命令,映射成前进、后退、停车、左转。
如果你的学习顺序不一样,就把 4/5/6/7 换成自己实际测到的命令 ID。

快速参考

这一课最常用的写法是:

import cocube_module as cm

cm.power_on()
print(cm.asr_get_command())
cm.asr_play_command(19)
  • cm.power_on():打开扩展模块电源
  • cm.asr_get_command():读取最新命令 ID
  • cm.asr_play_command(id):播放对应语音反馈
  • cocube.move_ms(...):执行一次短动作
  • cocube.brake():停车

如果想继续查外设接口,可以查看 cocube_module 快速参考