一个快速的本地神经网络文本转语音系统,音质优美,针对Raspberry Pi 4进行了优化。 Piper 被用于多种项目。
echo '欢迎来到语音合成的世界!' | \
./piper --model en_US-lessac-medium.onnx --output_file welcome.wav
聆听语音样本并查看Thorsten Müller 的视频教程
语音是使用VITS训练并导出到onnxruntime。
这是Open Home Foundation的一个项目。
语音
我们的目标是支持 Home Assistant 以及语音年。
- 阿拉伯语 (ar_JO)
- 加泰罗尼亚语 (ca_ES)
- 捷克语 (cs_CZ)
- 威尔士语 (cy_GB)
- 丹麦语 (da_DK)
- 德语 (de_DE)
- 希腊语 (el_GR)
- 英语 (en_GB, en_US)
- 西班牙语 (es_ES, es_MX)
- 芬兰语 (fi_FI)
- 法语 (fr_FR)
- 匈牙利语 (hu_HU)
- 冰岛语 (is_IS)
- 意大利语 (it_IT)
- 格鲁吉亚语 (ka_GE)
- 哈萨克语 (kk_KZ)
- 卢森堡语 (lb_LU)
- 尼泊尔语 (ne_NP)
- 荷兰语 (nl_BE, nl_NL)
- 挪威语 (no_NO)
- 波兰语 (pl_PL)
- 葡萄牙语 (pt_BR, pt_PT)
- 罗马尼亚语 (ro_RO)
- 俄语 (ru_RU)
- 塞尔维亚语 (sr_RS)
- 瑞典语 (sv_SE)
- 斯瓦希里语 (sw_CD)
- 土耳其语 (tr_TR)
- 乌克兰语 (uk_UA)
- 越南语 (vi_VN)
- 中文 (zh_CN)
每个语音包需要两个文件:
- 一个
.onnx
模型文件,例如en_US-lessac-medium.onnx
- 一个
.onnx.json
配置文件,例如en_US-lessac-medium.onnx.json
每个语音包的 MODEL_CARD
文件包含重要的许可证信息。Piper 旨在用于文本转语音研究,并不会对语音模型施加任何额外限制。然而,一些语音可能有较严格的许可限制,请仔细阅读它们!
安装
你可以用Python运行Piper或下载二进制版本:
如果你想从源码构建,请参见Makefile和C++源码。
在构建前,你必须下载并解压piper-phonemize到 lib/Linux-$(uname -m)/piper_phonemize
。
例如,AMD/Intel 机器上应该存在 lib/Linux-x86_64/piper_phonemize/lib/libpiper_phonemize.so
(以及libpiper_phonemize-amd64.tar.gz
中的其他内容)。
使用
- 下载语音包并解压
.onnx
和.onnx.json
文件 - 使用标准输入中的文本运行
piper
二进制文件,命令格式为--model /path/to/your-voice.onnx
和--output_file output.wav
例如:
echo '欢迎来到语音合成的世界!' | \
./piper --model en_US-lessac-medium.onnx --output_file welcome.wav
对于多说话人模型,使用 --speaker <number>
以改变说话人(默认: 0)。
参见 piper --help
获取更多选项。
音频流
Piper 可以将原始音频流写入标准输出:
echo '这句话首先被说出。这句话在第一句话被说出时被合成。' | \
./piper --model en_US-lessac-medium.onnx --output-raw | \
aplay -r 22050 -f S16_LE -t raw -
这是原始音频,而不是 WAV 文件,因此请确保你的音频播放器设置为播放16位单声道PCM样本,并且语音的采样率正确。
JSON 输入
在使用 --json-input
标志时,piper
可执行文件可以接受 JSON 输入。每行输入必须是一个包含 text
字段的 JSON 对象。例如:
{ "text": "第一句要说的话。" }
{ "text": "第二句要说的话。" }
可选字段包括:
speaker
- 字符串- 使用的说话人的名字,来自配置中的
speaker_id_map
(仅限多说话人语音)
- 使用的说话人的名字,来自配置中的
speaker_id
- 数字- 使用的说话人id,从0到说话人数减1(仅限多说话人语音,覆盖 "speaker")
output_file
- 字符串- 输出WAV文件的路径
以下示例将两句话用不同的说话人写入不同的文件:
{ "text": "第一个说话人。", "speaker_id": 0, "output_file": "/tmp/speaker_0.wav" }
{ "text": "第二个说话人。", "speaker_id": 1, "output_file": "/tmp/speaker_1.wav" }
使用 Piper 的人们
Piper 已被以下项目/论文使用:
- Home Assistant
- Rhasspy 3
- NVDA - 非视觉桌面访问
- 为视力受损和盲人提供的图像描述:低资源语言的解决方案
- Open Voice 操作系统
- JetsonGPT
- LocalAI
- Lernstick EDU / EXAM: 利用语言检测朗读剪贴板内容
- Natural Speech - 一个 Runelite 的OSRS客户端插件
- mintPiper
- Vim-Piper
训练
预训练的检查点在Hugging Face上可用。
在Python中运行
使用 pip
安装:
pip install piper-tts
然后运行:
echo '欢迎来到语音合成的世界!' | piper \
--model en_US-lessac-medium \
--output_file welcome.wav
这将在第一次使用时自动下载语音文件。使用 --data-dir
和 --download-dir
来调整语音文件的位置及下载目录。
如果你想使用GPU,安装 onnxruntime-gpu
包:
.venv/bin/pip3 install onnxruntime-gpu
然后使用 --cuda
参数运行 piper
。你需要有一个正常运行的CUDA环境,例如NVIDIA的 PyTorch 容器中提供的环境。