备注

你好,欢迎加入 SunFounder 的 Raspberry Pi & Arduino & ESP32 爱好者 Facebook 社区!与众多爱好者一起深入探索 Raspberry Pi、Arduino 和 ESP32。

为什么要加入?

  • 专家支持:借助我们的社区和团队,解决售后问题和技术难题。

  • 学习与分享:交流技巧和教程,提升你的技能。

  • 独家预览:抢先获取新产品发布和预告信息。

  • 特别折扣:享受我们最新产品的独家折扣。

  • 节日促销与抽奖:参与抽奖和假日促销活动。

👉 准备好和我们一起探索和创造了吗?点击 [here],立即加入!

15. 使用 Piper 和 OpenAI 进行 TTS

在上一课中,我们在 Raspberry Pi 上尝试了两种内置 TTS 引擎(EspeakPico2Wave)。现在让我们探索另外两种更强大的选择:Piper(离线、基于神经网络)和 OpenAI TTS(在线、基于云)。

  • Piper:本地 TTS 引擎,在 Raspberry Pi 上离线运行。

  • OpenAI TTS:在线服务,提供非常自然、类似人声的语音。

开始之前

请确保已完成以下步骤:

测试 Piper

尝试步骤如下

  1. 创建一个新文件:

    cd ~/pidog/examples
    sudo nano test_tts_piper.py
    
  2. 将下面的示例代码复制到文件中。按 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():将文本转换为语音并播放。

  3. 运行程序:

    sudo python3 test_tts_piper.py
    
  4. 首次运行时,所选语音模型会自动下载。

    • 然后你应该能听到 Pidog 说:Hello! I'm Piper TTS.

    • 你可以通过调用 set_model() 并传入不同的名称来切换其他语言模型。

测试 OpenAI TTS

获取并保存你的 API 密钥

  1. 访问 OpenAI Platform 并登录。在 API keys 页面,单击 Create new secret key

    ../_images/llm_openai_create.png
  2. 填写相关信息(Owner、Name、Project 及权限,如果需要),然后单击 Create secret key

    ../_images/llm_openai_create_confirm.png
  3. 密钥创建后,请立即复制——你将无法再次查看。如果丢失,则必须生成一个新的密钥。

    ../_images/llm_openai_copy.png
  4. 在你的项目文件夹中(例如:/pidog/examples),创建一个名为 secret.py 的文件:

    cd ~/pidog/examples
    sudo nano secret.py
    
  5. 将密钥粘贴到文件中,如下所示:

    # secret.py
    # Store secrets here. Never commit this file to Git.
    OPENAI_API_KEY = "sk-xxx"
    

编写并运行测试程序

  1. 创建一个新文件:

    cd ~/pidog/examples
    sudo nano test_tts_openai.py
    
  2. 将下面的示例代码复制到文件中。按 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.")
    
  3. 运行程序:

    sudo python3 test_tts_openai.py
    
  4. 你应该能听到 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 vs Pico2Wave vs Piper vs OpenAI TTS

项目

Espeak

Pico2Wave

Piper

OpenAI TTS

运行平台

Raspberry Pi 内置(离线)

Raspberry Pi 内置(离线)

Raspberry Pi / PC(离线,需要模型)

云端(在线,需要 API 密钥)

语音质量

机器人感强

比 Espeak 更自然

自然(神经 TTS)

非常自然/接近人声

可调参数

速度、音调、音量

有限的调节选项

选择不同的语音/模型

选择模型和音色

语言支持

多语言(质量参差不齐)

有限的语言集

提供多种语音/语言

英语效果最佳(其他语言视可用性而定)

延迟/速度

非常快

在 Pi 4/5 上使用 “low” 模型可实时

依赖网络(通常延迟较低)

设置步骤

极少

极少

下载 .onnx + .onnx.json 模型

创建 API 密钥,安装客户端

最佳用途

快速测试、基本提示

稍好的离线语音

质量更好的本地项目

最高质量、丰富的语音选项