Piper:离线中文 TTS 的轻量选项
要给树莓派 4 上的智能家居加语音播报,我先排除了云端 TTS:要联网、要计费,断网就变哑巴。也试过本地模型,多数依赖 GPU,树莓派带不动。后来试了 Piper——一个本地神经网络 TTS,模型只有几十 MB,CPU 推理就能实时出声,中文支持完整。这篇笔记记录安装、用法和边界。
它解决什么问题
Piper 是本地运行的神经 TTS 引擎,不需要联网,不调云端 API。支持超过 30 种语言,含中文(zh_CN),每种语言下有不同发音人和音质档位(low / medium / high)。中文模型体积约 60 MB,最小的约 20 MB。
引擎采用 VITS 训练,导出为 ONNX 格式,CPU 推理足够流畅,无需 GPU。原文给出的参考数据是:树莓派 4 上接近 95% 的实时率。仓库当时约 5.1k star,已被 Home Assistant、NVDA、LocalAI 等采用为默认或推荐语音引擎,还被用在这类场景:
- 视障人士的图像描述辅助
- Runelite 游戏插件配音
安装与首次合成
需要 Python 的 pip:
pip install piper-tts
列出可下载的模型:
python3 -m piper.download_voices
输出几十种语言,中文在列表末尾。官方提供试听站,建议先听再选:
https://rhasspy.github.io/piper-samples
下载中文模型:
python3 -m piper.download_voices zh_CN-chaowen-medium
模型默认下载到当前目录,换目录加 --data-dir 。
合成一句语音:
python3 -m piper -m zh_CN-chaowen-medium -f test.wav --"你好,我是开源君!"
直接生成 wave 文件。原文没有给出 piper-tts 的具体版本号,也没有写测试所用的操作系统和 Python 版本,这两点需要自己确认。
Python 集成
import wave
from piper import PiperVoice
voice = PiperVoice.load("zh_CN-chaowen-medium")
with wave.open("test.wav", "wb") as wav_file:
voice.synthesize_wav("你好,开源君。", wav_file)
Piper 也支持把音频流式输出到标准输出,边合成边播放。第一句还没合成完,后面的句子已开始处理,播报延迟较低,适合实时语音助手。
多端接入
除了命令行,还提供:
- Python API
- C / C++ 接口
- Web 服务
相关文档:
- 命令行完整用法:https://github.com/OHF-Voice/piper1-gpl/blob/main/docs/CLI.md
- HTTP API:https://github.com/OHF-Voice/piper1-gpl/blob/main/docs/API_HTTP.md
- Python API:https://github.com/OHF-Voice/piper1-gpl/blob/main/docs/API_PYTHON.md
- 训练自定义音色:https://github.com/OHF-Voice/piper1-gpl/blob/main/docs/TRAINING.md
限制与取舍
适用场景:
- 需要离线可用、断网持续工作的语音播报
- 设备算力有限,没有 GPU
- 不想为简单 TTS 功能引入云端依赖和费用
需要注意的边界:
- 中文模型只有几十 MB,声音表现力比不上云端大模型。原文没有给音质对比数据,是否满足需求只能自己听。
- 原文没有列出完整的发音人清单,只给了
zh_CN-chaowen-medium一个可操作示例。其他中文发音人和档位需要进download_voices列表查。 - 实时率参考值(95%)没有注明具体模型档位和硬件环境,只能当方向参考。
- 训练专属声音需要自己准备语音数据,原文未展开数据规模、时长和格式要求。
- 失败表现:原文未提供任何报错、版本冲突或模型下载失败的排查案例。真遇到问题,只能靠仓库 issue 和实际输出定位。
项目地址:https://github.com/OHF-Voice/piper1-gpl