两套语音入口,先分清
K10 板载双麦克风与扬声器,本地语音识别、自定义语音命令与语音合成都在板内离线运行,不联网也能用。语音功能有两条互相独立的入口:Mind+ 图形化积木(需 V1.8.1 RC1.0 及以上版本加载 K10 扩展)与 MicroPython 的 asr 库。两条入口的唤醒词并不相同,动手前先确认自己走的是哪一条。
图形化(Mind+)侧,中文模式唤醒词是「你好小行」「你好小新」,英文模式是「Hi, Telly」「Jarvis」。唤醒词要跟当前模式对应,拿中文词去叫英文模式,是常见的「叫不醒」原因。MicroPython 官方 asr 示例的注释里,唤醒词写作「你好,小鑫」——这是另一套入口各自的写法,不要混用,也不要断言两者是同一个词:图形化的唤醒词以 Mind+ 文档为准,MicroPython 的以官方库示例为准。
MicroPython:从初始化到释放
官方示例全文如下,整个流程是「初始化 → 定义并注册回调 → 启动识别与合成 → 设置命令词条 → 保持运行 → 中断时释放」:
import asr
import time
#asr.ASR_MODE_SINGLE 单次
#asr.ASR_MODE_CONTINUOUS 连续
#asr.init_asr(6000,asr.ASR_MODE_SINGLE)#配置检测时间和识别模式
asr.init_asr()
def cb(data):
if data == 1:
asr.add_tts_data("灯光已打开")
else:
asr.add_tts_data("灯光已关闭")
print("ID:", data)
#注册识别处理回调函数
asr.set_asr_callback(cb)
#启动语音识别
asr.start_asr()
#启动语音合成
asr.start_tts()
#设置命令词条
asr.add_asr_command(1,"kai deng")
asr.add_asr_command(2,"guan deng")
print("请说'你好,小鑫'唤醒")
try:
while(True):
time.sleep(1)
except KeyboardInterrupt:
print("\n捕获到 Ctrl+C 中断!")
#释放语音识别资源
asr.free_asr()
把每一步拆开,对照着写自己的程序:
-
初始化:
asr.init_asr()按默认配置初始化语音识别;示例注释里给出asr.init_asr(6000,asr.ASR_MODE_SINGLE)的写法,用来配置检测时间和识别模式,单次、连续两种模式可选。预期结果:初始化完成,REPL 无报错。 -
定义并注册回调:先写
def cb(data),回调按识别到的命令编号分支,在回调内调用asr.add_tts_data("灯光已打开")或asr.add_tts_data("灯光已关闭"),再用asr.set_asr_callback(cb)注册。add_tts_data 不是主流程里独立的一步,它在回调里按识别结果触发。预期结果:注册成功后,识别事件进入 cb,按 data 值走对应分支。 -
启动:
asr.start_asr()启动语音识别,asr.start_tts()启动语音合成。预期结果:板子开始拾音,语音合成的通路也就绪。 -
设置命令词条:
asr.add_asr_command(1,"kai deng")与asr.add_asr_command(2,"guan deng")两条词条,编号 1、2 与回调里 data 的分支一一对应。预期结果:唤醒后说出与拼音词条匹配的命令,回调收到对应编号,扬声器读出对应的中文反馈。 -
保持运行:示例先打印「请说'你好,小鑫'唤醒」提示唤醒词,再让
while(True): time.sleep(1)挂在 try 里保持程序不退出,识别与回调在后台进行。预期结果:程序持续运行,识别命中时终端打印 ID 和编号。 -
中断时释放:
except KeyboardInterrupt捕获 Ctrl+C,在退出分支调用asr.free_asr()释放语音识别资源。预期结果:终端打印中断提示,资源释放,程序退出。
命令词条是拼音字符串,图形化侧的自定义语音命令则是 Mind+ 里用积木配置,两者只是功能相似,配置方式完全不同。不要把示例里的 kai deng 当成图形化积木的参数去填,反过来也别在 MicroPython 里照搬积木的用法,各查各的文档。
图形化侧的音频积木
除了唤醒、识别与合成,图形化的音频类积木还包括:后台播放内置音乐、按音高与节拍奏音、后台播放 TF 卡音频、录音指定时长存成 wav 到 TF 卡。三个可核验的约束值得记住:内置音乐只能被「停止内置音乐」积木停止,其他停止类积木停不掉它;播放 TF 卡音频目前只支持双声道 wav,不满足时会有噪声或播放加速;录音时板子右上角的指示灯会亮,可以据此确认录音正在进行。
TF 卡与固件边界
AI 功能涉及 TF 卡时,劣质卡可能导致程序崩溃,官方建议 16G 或 32G 的官方卡、FAT32 格式。语音合成目前只支持中文,需要英文播报的项目要提前改用屏幕显示或预录音频方案。
MicroPython 固件处于测试阶段,可能有 bug。烧录后想切回 Mind+ 图形化,需要在 Mind+ V1 里「恢复初始设置」,或用 Mind+ V2 连接 K10 后「擦除」;做恢复操作时先按住 BOOT 再接数据线,识别出端口后松开,再按 RST 复位。在 Thonny 里保存程序时,main.py 要存到 MicroPython 设备,只存到「此电脑」的话,板子重启后程序会丢失。
语音识别与合成不依赖网络,排障时优先核对三件事:唤醒词和当前模式是否对应、TF 卡是否符合官方建议规格、当前固件入口(图形化还是 MicroPython)是否和自己的代码一致。板上语音玩熟后,可以去看「行空板 K10 WiFi 与 SIoT 物联网」,把语音触发的动作传到局域网另一头。