测试页面集成了基于 Sherpa-ONNX 的高精度语音唤醒功能,支持自定义唤醒词和实时检测。使用轻量级关键词检测模型,提供毫秒级响应速度。
重要说明: 项目不包含模型文件,需要提前下载配置。
sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01# 方法1:直接下载(推荐)
cd main/digital-human/wakeword_runtime/
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/kws-models/sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01.tar.bz2
# 解压
tar xvf sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01.tar.bz2
# 方法2:使用ModelScope
pip install modelscope
python -c "
from modelscope import snapshot_download
snapshot_download('pkufool/sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01', cache_dir='./models')
"
模型包下载后包含以下文件:
sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01/
├── encoder-epoch-12-avg-2-chunk-16-left-64.int8.onnx # 速度优先
├── encoder-epoch-12-avg-2-chunk-16-left-64.onnx
├── encoder-epoch-99-avg-1-chunk-16-left-64.int8.onnx # 速度优先
├── encoder-epoch-99-avg-1-chunk-16-left-64.onnx # 精度优先
├── decoder-epoch-12-avg-2-chunk-16-left-64.onnx
├── decoder-epoch-99-avg-1-chunk-16-left-64.onnx # 精度优先
├── joiner-epoch-12-avg-2-chunk-16-left-64.int8.onnx # 速度优先
├── joiner-epoch-12-avg-2-chunk-16-left-64.onnx
├── joiner-epoch-99-avg-1-chunk-16-left-64.int8.onnx # 速度优先
├── joiner-epoch-99-avg-1-chunk-16-left-64.onnx # 精度优先
├── tokens.txt # Token映射表(必需)
├── keywords_raw.txt # 模型包里可能附带(可选,runtime 不依赖)
├── keywords.txt # 现成的
├── test_wavs/ # 测试音频(可选)
├── configuration.json # 模型元信息(可选)
└── README.md # 说明文档(可选)
方案一:精度优先(推荐)
cd sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01
# 创建模型目录
mkdir -p ../models
# 复制精度优先的epoch-99 fp32三件套
cp encoder-epoch-99-avg-1-chunk-16-left-64.onnx ../models/encoder.onnx
cp decoder-epoch-99-avg-1-chunk-16-left-64.onnx ../models/decoder.onnx
cp joiner-epoch-99-avg-1-chunk-16-left-64.onnx ../models/joiner.onnx
# 复制配套文件
cp tokens.txt ../models/tokens.txt
# keywords_raw.txt 如果模型包里附带,可自行保留;runtime 不依赖它
方案二:速度优先
cd sherpa-onnx-kws-zipformer-wenetspeech-3.3M-2024-01-01
# 创建模型目录
mkdir -p ../models
# 复制速度优先的epoch-99 int8三件套
cp encoder-epoch-99-avg-1-chunk-16-left-64.int8.onnx ../models/encoder.onnx
cp decoder-epoch-99-avg-1-chunk-16-left-64.onnx ../models/decoder.onnx
cp joiner-epoch-99-avg-1-chunk-16-left-64.int8.onnx ../models/joiner.onnx
# 复制配套文件
cp tokens.txt ../models/tokens.txt
注意事项:
encoder.onnx + decoder.onnx + joiner.onnx + tokens.txt + keywords.txt配置完成后,模型文件应放在 wakeword_runtime/models/ 目录下,完整路径为 main/digital-human/wakeword_runtime/models/:
wakeword_runtime/models/
├── encoder.onnx # 编码器模型(重命名后)
├── decoder.onnx # 解码器模型(重命名后)
├── joiner.onnx # 连接器模型(重命名后)
├── tokens.txt # 拼音 Token 映射表(228行版本)
├── keywords.txt # 关键词配置文件(首次启动自动生成)
└── keywords_raw.txt # 可选,runtime 不依赖
在 main/digital-human 目录执行:
pip install -r wakeword_runtime/requirements.txt
python start.py
启动后默认地址:
http://127.0.0.1:8006/index.htmlws://127.0.0.1:8006/wakeword-wshttp://127.0.0.1:8006/health停止方式:
Ctrl+C配置文件位于 main/digital-human/wakeword_runtime/config.json。
当前主要配置项:
{
"wakeword": {
"enabled": true
},
"model_dir": "models",
"audio": {
"input_device": null,
"sample_rate": 16000,
"channels": 1
},
"detector": {
"num_threads": 4,
"provider": "cpu",
"max_active_paths": 2,
"keywords_score": 1.8,
"keywords_threshold": 0.1,
"num_trailing_blanks": 1,
"cooldown_seconds": 1.5
},
"logging": {
"level": "INFO",
"dir": "logs",
"file": "wakeword-runtime.log"
}
}
各字段含义:
| 参数 | 说明 |
|---|---|
wakeword.enabled |
是否启用本地唤醒词检测 |
model_dir |
模型和词表所在目录 |
audio.input_device |
麦克风输入设备,默认使用系统默认设备 |
audio.sample_rate |
采样率,默认 16000 |
audio.channels |
声道数,默认 1 |
detector.num_threads |
检测器线程数 |
detector.provider |
推理 provider,当前通常为 cpu |
detector.max_active_paths |
搜索路径数 |
detector.keywords_score |
关键词增强分数 |
detector.keywords_threshold |
检测阈值 |
detector.num_trailing_blanks |
尾随空白数量 |
detector.cooldown_seconds |
连续触发冷却时间 |
logging.level |
日志等级 |
logging.dir |
日志目录 |
logging.file |
日志文件名 |
models/ 目录下的模型文件和 tokens.txtmodels/keywords.txt 存在digital-human 目录运行 python start.pyhttp://127.0.0.1:8006/index.html禁用后: