为什么需要自定义唤醒词?

很多语音应用都需要一个固定入口,例如:

  • 对智能家居说“你好管家”;
  • 对机器人说“小虎机器人”;
  • 在 App 中使用“开始记录”触发操作;
  • 在本地工具中使用几个固定语音命令。

这类需求不需要运行完整的语音识别模型。使用 KWS(Keyword Spotting,关键词识别)模型,直接判断音频里是否出现指定关键词,模型更小,也适合持续离线运行。

自己训练 KWS 模型并不只是写几行训练代码。还需要准备多说话人语音、背景噪声、负样本、数据增强和验证集,并解决模型导出与不同平台的推理问题。

如果只是想快速给应用增加一个自定义唤醒词,可以使用听词 Voicute 在线生成模型,再把模型下载到自己的设备中离线运行。

整体流程

整个过程可以概括为三步:

输入自定义关键词
    ↓
平台自动生成数据并训练
    ↓
下载 ONNX/TFLite 模型,在本地离线推理

训练阶段在服务器完成,但训练好的模型下载以后,实时音频识别在本地设备中执行,不需要把麦克风音频持续上传到服务器。

目前支持中文、英文、日语、德语和法语关键词。

第一步:注册并输入唤醒词

打开听词平台:

https://www.voicute.com

注册并登录后,进入模型生成页面,选择关键词对应的语言,然后输入准备使用的唤醒词。

例如:

你好管家

唤醒词尽量不要太短。建议选择发音比较独特、日常对话中不经常出现的三到六个字短语。

例如“你好管家”“小虎机器人”通常比“开始”“你好”等日常高频词更容易区分。

第二步:选择模型类型

平台提供三种使用方式。

基础款

只需要输入关键词。平台自动使用多说话人合成语音和数据增强完成训练,不需要自己录音。

适合:

  • 快速验证产品想法;
  • 发音相对标准的关键词;
  • 希望先生成模型进行测试的开发者。

语音增强款

在合成语音基础上加入约 5 段自己的真人录音。

适合:

  • 方言或口音比较明显;
  • 儿童或特殊发音人群;
  • 基础模型对特定用户召回不足;
  • 品牌词、外来词等特殊发音。

多关键词模型

将多个固定命令放进同一个模型,例如:

打开灯光
关闭灯光
调亮一点
调暗一点

适合直接用语音控制应用功能,而不仅仅是唤醒设备。

本文以基础款单关键词模型为例。

第三步:提交训练

确认语言、关键词和模型类型后,提交训练任务。

平台会自动完成:

  1. 多说话人语音生成;
  2. 不同语速和声学条件增强;
  3. 正负样本训练;
  4. 模型导出和打包。

基础模型通常约 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。

还能部署到哪些平台?

同一套模型和配置可以根据项目需要接入不同运行环境:

平台推理方式适用场景
PythonONNX RuntimeWindows、Linux、macOS、树莓派
AndroidONNX Runtime AndroidApp、平板、智能终端
WebONNX Runtime Web / WASM浏览器语音控制、在线工具
ESP32-S3TFLite Micro智能开关、语音遥控器、IoT
Home AssistantWyoming 服务本地智能家居语音助手

各平台的示例代码都可以在 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

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐