你是不是已经不满足于固定的"你好小智"唤醒词?现在,CanMV K230/K230D 可以用你自己的声音,现场注册任意唤醒词,全程离线、无需联网重训模型,说完到唤醒仅约 0.3 秒。

过去做语音唤醒,唤醒词通常固定在出厂模型里,想换词就得重新训练、烧录。CanMV K230 新示例 Open-KWS 彻底改变了这一点:
唤醒词随你定:不限词表,对着麦克风录 3 遍就能注册成功,建议 4 个字以上,比如「你好小楠」「小楠同学」。
最多 8 个唤醒词同时在线:所有词共用一次神经网络推理,增加词数几乎不增加 KPU 开销,还能区分到底喊的是哪一个。
相似词也不会误唤醒:「小楠同学」和「小智同学」只差一个字也能分清;注册时还会提前拦下读音太像的词。
响应快:每 160 ms 处理一帧音频,说完到唤醒约 0.3 秒;神经网络在 KPU 上跑,其余计算在固件 C/C++ 模块完成。
离线、私密:录音和注册结果只存在开发板 SD 卡的 enroll/ 目录,不上传任何云端。
在 VS Code 的 CanMV 插件中打开示例,运行:
/sdcard/examples/31-OPEN-KWS/open_kws_app.py
注册新词:点击「注册新词」→ 对着麦克风清楚说出唤醒词,说完停顿约 0.6 秒自动结束;重复录满 3 段。
音量条绿色为正常,变红说明声音太大,程序会自动调低麦克风增益。
3 段合格后自动计算阈值,并和已注册词做相似度检查。
开始检测:点击「开始检测」,说出任意已注册的词,扬声器播放提示音,屏幕以该词专属颜色高亮显示「唤醒!kw_n」。
调灵敏度:右上角「灵敏 / 正常 / 保守」三档一键切换,同时调整两道判定关卡的松紧——安静环境切灵敏,周围人多选保守。
管理唤醒词:单个删除需二次确认,也可一键清空;注册过程中随时可取消。
显示方式支持 IDE 虚拟屏(800×480)、开发板 LCD 触摸屏和 HDMI,界面按分辨率和横竖屏自动排版。
Open-KWS 的声学模型并不直接识别某个具体词,而是把声音转换成 59 类拼音单元的概率(21 个声母 + 35 个韵母 + 空白/静音/未知)。任意唤醒词都能写成一串声母韵母(比如「小楠同学」= x iao n ant ong x ve),因此无需重训模型即可支持任意词。
为了防止相似词误唤醒,系统采用两阶段判定:
第一阶段:整词得分超过阈值;
第二阶段:强制对齐逐字核对,把最弱音节也拉出来打分——真正说的是这个词时每个音节都正常,相似词那个不同的音节会明显偏低,从而被拦下。
注册阶段还会用"留一法"标定每个词独立的阈值,并做正/反向相似度检查,避免新词和旧词互相误触发。
open_kws 是固件内置模块,直接 import open_kws 即可接入你自己的产品:
import open_kws, jsonROOT = "/sdcard/examples/31-OPEN-KWS/"eng = open_kws.Engine(ROOT + "model/kws.kmodel", ROOT + "assets")with open(ROOT + "enroll/kw_0.json") as f:eng.add_keyword(json.load(f))eng.set_sensitivity("normal")eng.set_verify(n_hyps=8, alpha=2.0, delta=1.25)events = eng.push(pcm) # 16kHz/单声道/16bit,每块 2560 采样for kw_id, score, threshold, start_ms, end_ms in events:print("唤醒:", kw_id) # 在这里接你自己的动作
注册流程、录音质检、相似度检查都封装为 enroll_begin / enroll_add / enroll_step / enroll_result 等接口,可直接集成到自己的产品中。
注册环境和使用环境尽量一致(同一个麦克风、相近距离和音量);
选词 4 个字以上,避开 lan/nan、in/ing、ai/an 这类易混音;
漏唤醒多就切「灵敏」,误唤醒多就切「保守」;
重新烧录固件会清空 enroll/,重要唤醒词记得先备份。
📚 参考文档(官方)
官方使用说明文档:
https://www.kendryte.com/k230_canmv/zh/main/example/ai/open_kws_app.html
视频教程:
https://www.bilibili.com/video/BV1i5nz6ZEvy