PaddleSpeech 是基于飞桨 PaddlePaddle 的语音方向的开源模型库,用于语音和音频中的各种关键任务的开发,提供 TTS 与 ASR 能力

本文将介绍 PaddleSpeech 的安装及如何接入 HomeAssistant,最终实现在 HA 中进行 TTS 语音播报。

1 安装 PaddleSpeech

完整教程请参考官方教程: https://github.com/PaddlePaddle/PaddleSpeech

本文将介绍使用 docker 镜像进行部署。

1.1 检查 GPU 驱动

/image/paddlespeech-tts-homeassistant-nvidia-smi.png

使用 nvidia-smi 检查 GPU 驱动是否正常。正常情况下,命令会输入类似上图的信息,会有温度、显存等信息展示。

1.2 部署 docker 镜像

docker run -d --name paddlespeech \
--runtime=nvidia \
-v $PWD/paddlespeech_data:/mnt \
-p 8888:8888 \
paddlecloud/paddlespeech:develop-gpu-cuda10.2-cudnn7-fb4d25 paddlespeech_server start

/image/paddlespeech-tts-homeassistant-paddlespeech-started-nvidia-smi.png

paddlespeech 启动成功后,观察 nvidia-smi 命令输出,可以看到目前占用了 2.6G 显存。

1.3 测试 PaddleSpeech

使用工具进行 paddlespeech api 测试。

curl --location 'http://localhost:8888/paddlespeech/tts' \
--header 'Content-Type: application/json' \
--data '{
    "text": "今天天气不错"
}'

会返回如下的 json 响应。注意 audio 字段实际非常长,本处作了截断处理。

{
    "success": true,
    "code": 200,
    "message": {
        "description": "success."
    },
    "result": {
        "lang": "zh",
        "spk_id": 0,
        "speed": 1.0,
        "volume": 1.0,
        "sample_rate": 24000,
        "duration": 1.2875,
        "save_path": null,
        "audio": "UklGRgLjAQBXQVZFZm10I...MBTuQ=="
    }
}

响应耗时为 200ms 左右。

至此,paddlespeech 服务运行成功,接下来接入 homeassistant。

2. 接入 HomeAssistant

2.1 HACS 添加插件

在 HomeAssistant HACS 自定义存储库中添加 https://github.com/idreamshen/hass-paddlespeech 并重启 HA

/image/paddlespeech-tts-homeassistant-hacs-add-repo.png

2.2 HA 添加集成

在 HA 集成中搜索 paddlespeech,点击进入配置页面。

/image/paddlespeech-tts-homeassistant-hacs-add.png

2.3 配置集成

输入 TTS 的地址,比如:http://192.168.1.200:8888

192.168.1.200 需要更换为 paddlespeech 的实际 ip。

/image/paddlespeech-tts-homeassistant-hacs-config.png

稍等片刻,在设备中就能找到新创建的 TTS 实体 /image/paddlespeech-tts-homeassistant-hacs-config-succ.png

2.4 TTS 播报测试

HA导航,选择媒体 - PaddleSpeech TTS。在消息中填入期望的文本,然后点击“朗读”即可验证 TTS 播报是否正常。

Image 1 Image 2 Image 3

2.5 HA 自动化

/image/paddlespeech-tts-homeassistant-auto.png

  • 动作:选择 Text-to-speech
  • 目标:选择 PaddleSpeech
  • 媒体播放器实体:选择自己的播放器
  • 消息:填写实际文本内容