你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Docker 的文本转语音容器

神经网络文本转语音容器使用深度神经网络技术将文本转换为自然语音,使合成语音变得更自然。 本文介绍如何下载、安装以及运行文本转语音容器。

有关先决条件、验证容器是否正在运行、在同一主机上运行多个容器以及运行断开连接的容器的详细信息,请参阅使用 Docker 安装和运行语音容器

容器映像

可在 Microsoft 容器注册表 (MCR) 联合中找到所有受支持版本和区域设置的神经网络文本转语音容器映像。 该映像驻留在 azure-cognitive-services/speechservices/ 存储库中,名为 neural-text-to-speech

A screenshot of the search connectors and triggers dialog.

完全限定的容器映像名称为 mcr.microsoft.com/azure-cognitive-services/speechservices/neural-text-to-speech。 追加特定版本或追加 :latest 以获取最新版本。

版本 路径
最晚 mcr.microsoft.com/azure-cognitive-services/speechservices/neural-text-to-speech:latest

latest 标记提取 en-US 区域设置和 en-us-arianeural 语音。
3.1.0 mcr.microsoft.com/azure-cognitive-services/speechservices/neural-text-to-speech:3.1.0-amd64-en-us-arianeural

latest 以外的所有标记均采用以下格式并区分大小写:

<major>.<minor>.<patch>-<platform>-<voice>-<preview>

为方便起见,这些标记也以 JSON 格式提供。 正文包括容器路径和标记列表。 标记不按版本排序,但 "latest" 始终包含在列表末尾,如以下代码片段所示:

{
  "name": "azure-cognitive-services/speechservices/neural-text-to-speech",
  "tags": [
    <--redacted for brevity-->
    "3.1.0-amd64-en-us-arianeural",
    "3.1.0-amd64-en-us-guyneural",
    "3.1.0-amd64-en-us-jennymultilingualneural",
    "3.1.0-amd64-en-us-jennyneural",
    "3.1.0-amd64-en-us-michelleneural",
    "3.1.0-amd64-es-es-alvaroneural",
    "3.1.0-amd64-es-es-elviraneural",
    "3.1.0-amd64-es-mx-candelaneural",
    "3.1.0-amd64-es-mx-dalianeural",
    "3.1.0-amd64-es-mx-jorgeneural",
    <--redacted for brevity-->
    "latest"
  ]
}

重要

我们已在 2021 年 8 月 31 日停用了标准语音合成声音和标准文本转语音容器。 应改为将神经网络语音与神经网络文本转语音容器版本 3.0 或更高版本一起使用。

从 2024 年 2 月 29 日起,不支持语音转文本和神经文本转语音容器版本 2.19 及更早版本。 有关更新应用程序的信息,请参阅从标准语音迁移到预生成神经语音

使用 docker pull 获取容器映像

需要满足先决条件,包括所需的硬件。 另请参阅为每个语音容器建议的资源分配

使用 docker pull 命令从 Microsoft Container Registry 下载容器映像:

docker pull mcr.microsoft.com/azure-cognitive-services/speechservices/neural-text-to-speech:latest

重要

latest 标记提取 en-US 区域设置和 en-us-arianeural 语音。 有关其他区域设置和语音,请参阅文本转语音容器映像

通过 docker run 运行容器

使用 docker run 命令运行容器。

下表列出了各个 docker run 参数及其对应的说明:

参数 说明
{ENDPOINT_URI} 必须使用该终结点进行计量和计费。 有关详细信息,请参阅计费参数
{API_KEY} API 密钥是必需的。 有关详细信息,请参阅计费参数

运行文本转语音容器时,请根据文本转语音容器的要求和建议配置端口、内存和 CPU。

下面是一个示例 docker run 命令以及占位符值。 必须指定 ENDPOINT_URIAPI_KEY 的值:

docker run --rm -it -p 5000:5000 --memory 12g --cpus 6 \
mcr.microsoft.com/azure-cognitive-services/speechservices/neural-text-to-speech \
Eula=accept \
Billing={ENDPOINT_URI} \
ApiKey={API_KEY}

此命令:

  • 运行容器映像中的某个神经文本转语音容器。
  • 分配 6 个 CPU 核心和 12 GB 内存。
  • 公开 TCP 端口 5000,并为容器分配伪 TTY。
  • 退出后自动删除容器。 容器映像在主计算机上仍然可用。

有关 docker run 和语音容器的详细信息,请参阅使用 Docker 安装和运行语音容器

使用容器

语音容器提供通过语音 SDK 和语音 CLI 访问的基于 Websocket 的查询终结点 API。 默认情况下,语音 SDK 和语音 CLI 使用公共语音服务。 若要使用该容器,需要更改初始化方法。

重要

将语音服务与容器一起使用时,请务必使用主机身份验证。 如果配置密钥和区域,请求将发送到公共语音服务。 语音服务的结果可能不符合预期。 来自断开连接的容器的请求将失败。

不使用此 Azure 云初始化配置:

var config = SpeechConfig.FromSubscription(...);

将此配置用于容器主机

var config = SpeechConfig.FromHost(
    new Uri("http://localhost:5000"));

不使用此 Azure 云初始化配置:

auto speechConfig = SpeechConfig::FromSubscription(...);

将此配置用于容器主机

auto speechConfig = SpeechConfig::FromHost("http://localhost:5000");

不使用此 Azure 云初始化配置:

speechConfig, err := speech.NewSpeechConfigFromSubscription(...)

将此配置用于容器主机:

speechConfig, err := speech.NewSpeechConfigFromHost("http://localhost:5000")

不使用此 Azure 云初始化配置:

SpeechConfig speechConfig = SpeechConfig.fromSubscription(...);

将此配置用于容器主机

SpeechConfig speechConfig = SpeechConfig.fromHost("http://localhost:5000");

不使用此 Azure 云初始化配置:

const speechConfig = sdk.SpeechConfig.fromSubscription(...);

将此配置用于容器主机

const speechConfig = sdk.SpeechConfig.fromHost("http://localhost:5000");

不使用此 Azure 云初始化配置:

SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:...];

将此配置用于容器主机

SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithHost:"http://localhost:5000"];

不使用此 Azure 云初始化配置:

let speechConfig = SPXSpeechConfiguration(subscription: "", region: "");

将此配置用于容器主机

let speechConfig = SPXSpeechConfiguration(host: "http://localhost:5000");

不使用此 Azure 云初始化配置:

speech_config = speechsdk.SpeechConfig(
    subscription=speech_key, region=service_region)

将此配置用于容器终结点

speech_config = speechsdk.SpeechConfig(
    host="http://localhost:5000")

在容器中使用语音 CLI 时,请包含 --host http://localhost:5000/ 选项。 还必须指定 --key none 以确保 CLI 不会尝试使用语音密钥进行身份验证。 有关如何配置语音 CLI 的信息,请参阅 Azure AI 语音 CLI 入门

尝试文本转语音快速入门,它使用主机身份验证而不是密钥和区域。

SSML 语音元素

构造神经文本转语音 HTTP POST 时,SSML 消息需要一个具有 name 属性的 voice 元素。 语音的区域设置必须与容器模型的区域设置相对应。

例如,通过 latest 标记下载的模型(默认为“en-US”)的语音名称为 en-US-AriaNeural

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AriaNeural">
        This is the text that is spoken.
    </voice>
</speak>

后续步骤