3 步把 MeloTTS 模型转换成 Sherpa-Onnx 格式:Colab 实操教程
【免费下载链接】sherpa-onnxSpeech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, HarmonyOS, Raspberry Pi, RISC-V, RK NPU, Axera NPU, Ascend NPU, x86_64 servers, websocket server/client, support 12 programming languages项目地址: https://gitcode.com/GitHub_Trending/sh/sherpa-onnx
sherpa-onnx 是一个基于 onnxruntime 的离线语音推理框架,支持 TTS、语音识别、VAD,全程不需要联网。本文以 MeloTTS 模型转换为例,把它转成 onnx 格式——一种跨平台、可直接部署运行的模型文件,转完即可被 sherpa-onnx 运行时加载,在 Android、iOS、树莓派上离线跑。
直接用原版 MeloTTS 会卡住的三个地方
- 依赖链太重:跑原版要整套 Python + torch + melo 包,动辄上百 MB 的运行时代码
- 权重不能被推理引擎读:官方发布的 checkpoint 是训练框架原生格式,onnxruntime 这类引擎无法直接加载
- 移动端没法嵌入:Android/iOS 应用里没有现成的嵌入路径
转成 onnx 一次性解决:推理时只需要一个model.onnx加两个文本文件,sherpa-onnx 的 C++ 运行时在 CPU 上就能直接跑,不再需要 Python 环境。
Colab 上准备 TTS 模型转换环境
| 依赖 | 版本 | 作用 |
|---|---|---|
| torch / torchaudio | 2.3.1(CPU 版即可) | 加载原版 MeloTTS 完成导出 |
| onnx | 1.15.0 | 向 onnx 文件写入元数据 |
| onnxruntime | 1.16.3 | 在 Colab 本地做推理验证 |
| soundfile / jieba | 最新 | 保存 wav / 中文分词 |
装依赖并拿到转换脚本:
pip install onnx==1.15.0 onnxruntime==1.16.3 soundfile jieba git clone https://gitcode.com/GitHub_Trending/sh/sherpa-onnx转换脚本在 scripts/melo-tts/,其中的 run.sh 已把克隆 MeloTTS、安装 requirements、下载日语 unidic 词典等步骤全部串好;在自己电脑上跑可以直接执行它。
3 步完成 MeloTTS 模型转换
第 1 步:导出中英混合模型
python3 scripts/melo-tts/export-onnx.py这一步在做什么:加载 MeloTTS 的 ZH 模型,用 pypinyin 把中文逐字转成音素 + 声调,以 opset 18 导出 onnx。除model.onnx外还会生成tokens.txt(音素到 ID 的映射)和lexicon.txt(词到音素的词典),并向 onnx 写入model_type=melo-vits、sample_rate=44100、n_speakers等元数据。想要 5 位说话人的纯英文版,换export-onnx-en.py即可。
第 2 步:检查输入输出与元数据
运行show-info.py。这一步在做什么:把 onnx 读回并打印张量名和元数据,确认 7 个输入(x、x_lengths、tones、sid、noise_scale、length_scale、noise_scale_w)、1 个输出 y(mel 谱),以及元数据完整。缺元数据的话,sherpa-onnx 会直接拒绝加载。
第 3 步:生成语音试听验证
运行test.py。这一步在做什么:对一段中英混合文本做分词、查音素、CPU 推理,输出test.wav。听一下——发音正确、中英文切换自然,转换就算完成。
容易踩的坑与调优
⚠️
- 版本别乱升:脚本钉死 onnx==1.15.0 / onnxruntime==1.16.3,换新版报元数据或算子错误时,先降回这两个版本
- 说话人数不一致:中英混合模型只有 1 位女声;纯英文版有 5 位(EN-US / EN-BR / EN-INDIA / EN-AU / EN-Default),多音色场景要改纯英文版并按 sid 切换
- 生僻词读错:多半是词不在音素词典里,可参照 export-onnx.py 中
add_new_english_words的注释示例,往 cmudict.rep 或 lexicon 里补条目 - 语言覆盖:仓库官方脚本目前只导出中英混合、纯英文两套,日语暂没有独立的导出脚本,见 scripts/melo-tts/README.md
转换后的模型怎么选、怎么部署
| 模型集 | 说话人 | 采样率 | 适用场景 |
|---|---|---|---|
| zh_en | 1 位 | 44.1 kHz | 中英混读、字幕配音、多语言 TTS 部署 |
| en | 5 位 | 44.1 kHz | 多口音英语 |
把model.onnx+tokens.txt+lexicon.txt三个文件放同一目录即可,sherpa-onnx/csrc/ 中的 C++ 运行时直接加载,Android、iOS、Flutter、Python、Rust 等封装层都复用同一套逻辑,多语言 TTS 部署不用再维护两份推理代码。
✅ 仓库里的 flutter-examples/tts/ 示例可以直接用来在真机上验证效果。
🚀 Colab 里 30 分钟,你就能拿到一个可以直接塞进离线多语言 TTS 项目的模型包。
【免费下载链接】sherpa-onnxSpeech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, HarmonyOS, Raspberry Pi, RISC-V, RK NPU, Axera NPU, Ascend NPU, x86_64 servers, websocket server/client, support 12 programming languages项目地址: https://gitcode.com/GitHub_Trending/sh/sherpa-onnx
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考