不用自己准备数据:一键生成自定义唤醒词并在本地离线使用
为什么需要自定义唤醒词?
很多语音应用都需要一个固定入口,例如:
- 对智能家居说“你好管家”;
- 对机器人说“小虎机器人”;
- 在 App 中使用“开始记录”触发操作;
- 在本地工具中使用几个固定语音命令。
这类需求不需要运行完整的语音识别模型。使用 KWS(Keyword Spotting,关键词识别)模型,直接判断音频里是否出现指定关键词,模型更小,也适合持续离线运行。
自己训练 KWS 模型并不只是写几行训练代码。还需要准备多说话人语音、背景噪声、负样本、数据增强和验证集,并解决模型导出与不同平台的推理问题。
如果只是想快速给应用增加一个自定义唤醒词,可以使用听词 Voicute 在线生成模型,再把模型下载到自己的设备中离线运行。
整体流程
整个过程可以概括为三步:
输入自定义关键词
↓
平台自动生成数据并训练
↓
下载 ONNX/TFLite 模型,在本地离线推理
训练阶段在服务器完成,但训练好的模型下载以后,实时音频识别在本地设备中执行,不需要把麦克风音频持续上传到服务器。
目前支持中文、英文、日语、德语和法语关键词。
第一步:注册并输入唤醒词
打开听词平台:
https://www.voicute.com
注册并登录后,进入模型生成页面,选择关键词对应的语言,然后输入准备使用的唤醒词。
例如:
你好管家
唤醒词尽量不要太短。建议选择发音比较独特、日常对话中不经常出现的三到六个字短语。
例如“你好管家”“小虎机器人”通常比“开始”“你好”等日常高频词更容易区分。
第二步:选择模型类型
平台提供三种使用方式。
基础款
只需要输入关键词。平台自动使用多说话人合成语音和数据增强完成训练,不需要自己录音。
适合:
- 快速验证产品想法;
- 发音相对标准的关键词;
- 希望先生成模型进行测试的开发者。
语音增强款
在合成语音基础上加入约 5 段自己的真人录音。
适合:
- 方言或口音比较明显;
- 儿童或特殊发音人群;
- 基础模型对特定用户召回不足;
- 品牌词、外来词等特殊发音。
多关键词模型
将多个固定命令放进同一个模型,例如:
打开灯光
关闭灯光
调亮一点
调暗一点
适合直接用语音控制应用功能,而不仅仅是唤醒设备。
本文以基础款单关键词模型为例。
第三步:提交训练
确认语言、关键词和模型类型后,提交训练任务。
平台会自动完成:
- 多说话人语音生成;
- 不同语速和声学条件增强;
- 正负样本训练;
- 模型导出和打包。
基础模型通常约 30 分钟完成,实际时间会受到训练队列影响。训练期间不需要一直停留在当前页面,可以稍后回到“我的模型”查看状态。
第四步:在线测试并下载
训练完成后,建议先使用平台提供的测试功能检查关键词是否能够正常触发。
测试时可以尝试:
- 正常语速说 5~10 次;
- 改变与麦克风的距离;
- 换一个说话人测试;
- 播放普通对话,观察是否出现误触发。
确认效果后下载模型包。模型包通常包括关键词模型、模型配置等文件。推理时还需要使用项目提供的 melspectrogram.onnx 特征提取模型。
开源推理代码位于:
https://github.com/voicute/onnx-wakeword
第五步:使用 Python 离线运行
先克隆开源推理仓库:
git clone https://github.com/voicute/onnx-wakeword.git
cd onnx-wakeword
安装 Python 依赖:
pip install onnxruntime numpy pyaudio
把下载的模型文件和 model_info.json 放到模型目录,并确认 melspectrogram.onnx 路径正确。
然后加载模型并启动麦克风监听:
from python.wakeword_engine import WakeWordEngine
engine = WakeWordEngine()
engine.load(
"models/model_info.json",
"models/melspectrogram.onnx"
)
# 启用基础连续帧过滤,减少瞬时噪声触发
engine.set_L1(True)
def on_detected(word, probability, info):
print(f"检测到关键词:{word},置信度:{probability:.2f}")
engine.start(on_detected)
运行程序后,对着麦克风说刚才生成的关键词。如果识别成功,回调函数会返回关键词和概率。
之后可以把回调接入自己的业务逻辑:
def on_detected(word, probability, info):
if word == "你好管家":
start_voice_assistant()
模型推理在本地完成,不需要在运行时调用在线识别 API。
还能部署到哪些平台?
同一套模型和配置可以根据项目需要接入不同运行环境:
| 平台 | 推理方式 | 适用场景 |
|---|---|---|
| Python | ONNX Runtime | Windows、Linux、macOS、树莓派 |
| Android | ONNX Runtime Android | App、平板、智能终端 |
| Web | ONNX Runtime Web / WASM | 浏览器语音控制、在线工具 |
| ESP32-S3 | TFLite Micro | 智能开关、语音遥控器、IoT |
| Home Assistant | Wyoming 服务 | 本地智能家居语音助手 |
各平台的示例代码都可以在 onnx-wakeword 仓库中找到。
使用时需要注意什么?
1. 唤醒词不要太常见
“好的”“开始”“你好”等词很容易出现在普通对话中,可能增加误触发。最好使用发音独特的组合短语。
2. 必须在目标设备上测试
手机麦克风、USB 麦克风和嵌入式 I2S 麦克风的效果可能不同。模型在电脑上测试正常,不代表换到远场设备后仍然完全相同。
3. 召回和误触发需要平衡
阈值过高可能导致叫不醒,阈值过低可能增加误触发。不要只测试几次正样本,还要播放普通语音和环境声音。
4. 特殊发音可以加入真人录音
如果基础模型对口音、儿童声音或品牌词识别不足,可以使用语音增强版本加入约 5 段真实录音,补充合成语音没有覆盖的发音特征。
总结
自定义唤醒词的完整流程不一定需要自己搭建训练环境。
通过听词平台可以完成:
输入关键词
→ 自动训练
→ 在线测试
→ 下载 ONNX/TFLite
→ 在自己的设备上离线运行
这种方式比较适合希望快速验证语音唤醒、固定命令词和本地语音控制功能的开发者。
模型生成平台:
https://www.voicute.com
开源推理代码:
https://github.com/voicute/onnx-wakeword
完整技术文档:
https://www.voicute.com/docs
更多推荐



所有评论(0)