备注
你好,欢迎加入 SunFounder 的 Raspberry Pi & Arduino & ESP32 爱好者 Facebook 社区!与众多爱好者一起深入探索 Raspberry Pi、Arduino 和 ESP32。
为什么要加入?
专家支持:借助我们的社区和团队,解决售后问题和技术难题。
学习与分享:交流技巧和教程,提升你的技能。
独家预览:抢先获取新产品发布和预告信息。
特别折扣:享受我们最新产品的独家折扣。
节日促销与抽奖:参与抽奖和假日促销活动。
👉 准备好和我们一起探索和创造了吗?点击 [here],立即加入!
15. 使用 Piper 和 OpenAI 进行 TTS
在上一课中,我们在 Raspberry Pi 上尝试了两种内置 TTS 引擎(Espeak 和 Pico2Wave)。现在让我们探索另外两种更强大的选择:Piper(离线、基于神经网络)和 OpenAI TTS(在线、基于云)。
Piper:本地 TTS 引擎,在 Raspberry Pi 上离线运行。
OpenAI TTS:在线服务,提供非常自然、类似人声的语音。
开始之前
请确保已完成以下步骤:
安装所有模块(重要) — 安装
robot-hat、vilib、pidog模块,然后运行脚本i2samp.sh。
测试 Piper
尝试步骤如下:
创建一个新文件:
cd ~/pidog/examples sudo nano test_tts_piper.py
将下面的示例代码复制到文件中。按
Ctrl+X,然后按Y,最后按Enter保存并退出。from pidog.tts import Piper tts = Piper() # List supported languages print(tts.available_countrys()) # List models for English (en_us) print(tts.available_models('en_us')) # Set a voice model (auto-download if not already present) tts.set_model("en_US-amy-low") # Say something tts.say("Hello! I'm Piper TTS.")
available_countrys():打印支持的语言。available_models():列出该语言可用的模型。set_model():设置语音模型(如果缺少会自动下载)。say():将文本转换为语音并播放。
运行程序:
sudo python3 test_tts_piper.py
首次运行时,所选语音模型会自动下载。
然后你应该能听到 Pidog 说:
Hello! I'm Piper TTS.你可以通过调用
set_model()并传入不同的名称来切换其他语言模型。
测试 OpenAI TTS
获取并保存你的 API 密钥
访问 OpenAI Platform 并登录。在 API keys 页面,单击 Create new secret key。
填写相关信息(Owner、Name、Project 及权限,如果需要),然后单击 Create secret key。
密钥创建后,请立即复制——你将无法再次查看。如果丢失,则必须生成一个新的密钥。
在你的项目文件夹中(例如:
/pidog/examples),创建一个名为secret.py的文件:cd ~/pidog/examples sudo nano secret.py
将密钥粘贴到文件中,如下所示:
# secret.py # Store secrets here. Never commit this file to Git. OPENAI_API_KEY = "sk-xxx"
编写并运行测试程序
创建一个新文件:
cd ~/pidog/examples sudo nano test_tts_openai.py
将下面的示例代码复制到文件中。按
Ctrl+X,然后按Y,最后按Enter保存并退出。from pidog.tts import OpenAI_TTS from secret import OPENAI_API_KEY # or use the try/except version shown above # Initialize OpenAI TTS tts = OpenAI_TTS(api_key=OPENAI_API_KEY) tts.set_model('gpt-4o-mini-tts') # low-latency TTS model tts.set_voice('alloy') # pick a voice # Quick hello (sanity check) tts.say("Hello! I'm OpenAI TTS.")
运行程序:
sudo python3 test_tts_openai.py
你应该能听到 Pidog 说:
Hello! I'm OpenAI TTS.
故障排查
No module named ‘secret’
这意味着
secret.py不在你的 Python 文件所在的同一文件夹中。 将secret.py移动到运行脚本的同一目录下,例如:ls ~/pidog/examples # Make sure you see both: secret.py and your .py file
OpenAI: Invalid API key / 401
检查你是否粘贴了完整的密钥(以
sk-开头),且没有多余的空格或换行。确保你的代码正确导入了它:
from secret import OPENAI_API_KEY
确认你的 Pi 可以访问网络(尝试
ping api.openai.com)。
OpenAI: Quota exceeded / billing error
你可能需要在 OpenAI 仪表板中添加计费信息或增加配额。
在解决账户/计费问题后重试。
Piper: tts.say() 运行但无声音
确保语音模型确实存在:
ls ~/.local/share/piper/voices确认代码中的模型名称完全匹配:
tts.set_model("en_US-amy-low")
检查 Pi 上的音频输出设备/音量(
alsamixer),并确保扬声器已连接且通电。
ALSA / 音频设备错误(例如 “Audio device busy” 或 “No such file or directory”)
关闭其他使用音频的程序。
如果设备一直忙碌,重启 Pi。
对于 HDMI 与耳机插孔输出,请在 Raspberry Pi OS 的音频设置中选择正确的设备。
运行 Python 时权限被拒绝
如果你的环境需要,请尝试使用
sudo:sudo python3 test_tts_piper.py
TTS 引擎对比
项目 |
Espeak |
Pico2Wave |
Piper |
OpenAI TTS |
|---|---|---|---|---|
运行平台 |
Raspberry Pi 内置(离线) |
Raspberry Pi 内置(离线) |
Raspberry Pi / PC(离线,需要模型) |
云端(在线,需要 API 密钥) |
语音质量 |
机器人感强 |
比 Espeak 更自然 |
自然(神经 TTS) |
非常自然/接近人声 |
可调参数 |
速度、音调、音量 |
有限的调节选项 |
选择不同的语音/模型 |
选择模型和音色 |
语言支持 |
多语言(质量参差不齐) |
有限的语言集 |
提供多种语音/语言 |
英语效果最佳(其他语言视可用性而定) |
延迟/速度 |
非常快 |
快 |
在 Pi 4/5 上使用 “low” 模型可实时 |
依赖网络(通常延迟较低) |
设置步骤 |
极少 |
极少 |
下载 |
创建 API 密钥,安装客户端 |
最佳用途 |
快速测试、基本提示 |
稍好的离线语音 |
质量更好的本地项目 |
最高质量、丰富的语音选项 |