使用 Amazon Polly 创建逼真的语音
介绍
我们与计算机的互动方式有很多种。其中最常见的方式是使用键盘和鼠标。最近,触摸屏为我们提供了更自然的界面。但人类之间交流的最常见方式是通过说话,而且直到最近几年,语音界面才成为人类与计算机和应用程序交流的可行方式。
AWS Polly
口头对话中有两个角色:说话者和倾听者。AWS Polly 允许应用程序扮演说话者的角色。Polly 是一种文本转语音 (TTS) 服务。给定一组书面文本,Polly 将合成模仿人类阅读文本的音频。
这听起来可能很简单,但实际上远不止于此。首先,说话者有不同的性别,声音也会因年龄的不同而不同。Polly 会考虑这些因素,并提供不同的“角色”。此外,Polly 还能理解 30 多种语言和方言。您可以使用语音合成标记语言 (SSML) 来控制数字或首字母缩略词的发音,或在生成的音频中设置暂停,以便更自然地朗诵。生成的音频可以以多种格式保存或实时流式传输。
AWS 控制台
要试用 Polly 提供的声音,您可以创建音频文件并从 AWS 控制台下载。在浏览器中转到https://console.aws.amazon.com/polly。您需要使用 AWS 凭证登录。这是界面。
在文本区域输入一些文本并选择一个声音。按“收听语音”按钮收听生成的音频。
请注意,还有一个下拉菜单可以更改语言和地区。默认为美国英语。不同语言有不同的声音。您还可以下载几种不同格式的音频文件。长时间运行的文本将保存到 S3 存储桶中。除了文本之外,您还可以输入 SSML 以更好地控制音频。您将在本指南的后面部分看到更多相关内容。但就目前而言,控制台非常适合进行实验,但 Polly 的真正强大之处在于将其与您自己的应用程序集成。您可以使用几种不同的编程语言。
编程 Polly
我将使用 Python 来演示如何使用语言访问 Polly API。但也支持其他语言,例如 Java。无需安装特殊的 Polly Python 包。相反,boto3 包可让您从同一位置访问所有 AWS API。我不会详细介绍配置boto3的过程,但它相当简单。您需要创建一个 IAM 用户,获取用户的 ID 和访问密钥,并将它们存储在主目录中.aws目录中的凭证文件中。这是boto3查找文件的默认位置。
要将 Polly 与boto3一起使用,请导入boto3模块。
import boto3
客户端将成为 API 的入口点。客户端需要知道您的应用程序使用哪个 AWS。这可以通过需要导入的Config对象来完成。
from botocore.config import Config
polly_client = boto3.client('polly', config=Config(
region_name='us-east-1'
))
本示例使用北弗吉尼亚地区。我将使用流行的绕口令来合成文本。
text = """
Peter Piper picked a peck of pickled peppers.
"""
synthesize_speech方法将接受文本并返回合成的语音。
response = polly_client(Text=text, VoiceId='Matthew', OutputFormat='mp3')
此示例还使用默认en-US区域中的Matthew语音并将生成mp3文件。稍后您将看到有关关键字参数的更多信息,但首先,让我们将其写入文件。
打开文件句柄,然后将AudioStream写入文件。不要忘记使用wb模式以二进制形式打开文件。
f = open('polly.mp3', 'wb')
f.write(response['AudioStream'].read())
在关闭文件之前,请关闭AudioStream。
response['AudioContent'].close()
f.close()
就这样!现在您将有一个名为polly.mp3的文件可以收听。本指南的音频文件已上传到Github。您可以下载存储库的 zip 文件并播放文件。此示例位于名为polly.mp3的文件中。
那么英国口音怎么样?添加LanguageCode关键字参数并将其设置为en-GB。Matthew的声音在该地区无效,因此我将改用Amy。
response = polly_client(Text=text, VoiceId='Amy', OutputFormat='mp3', LanguageCode='en-GB')
收听polly_gb.mp3听 Amy 朗读文本。
或者西班牙语?请查看repo 中的polly_es.mp3 。
text_es = """
Peter Piper recogió un picotazo de pimientos en vinagre
"""
response = polly_client(Text=text_es, VoiceId='Miguel', OutputFormat='mp3', LanguageCode='es-ES')
超细纤维增强塑料
绕口令对 Polly 来说根本不是难题,即使是用不同的语言。考虑到这一点,你会认为这个简单的句子没有问题。
zip_code = """
My zip code is 20202.
"""
收听polly_zip_code.mp3来听 Matthew 读出 zip 文件。
这与您所期望的不一样。在美国,我们通常读邮政编码的数字,例如“二零二零二”。但默认情况下,Polly 会读出数字“二万二百二”。使用语音合成标记语言 (SSML),您可以添加“舞台指示”,这样 Polly 就会知道要读出数字。
ssml_zip_code = """
<speak>
My zip code is <say-as interpret-as='digits'>20202</say-as>
</speak>
"""
整个文本都包含在<speak>标签中。邮政编码包含在say-as标签中,而explain-as属性告诉 Polly 一次读出一个数字,而不是读出整个数字。要听到语音,请打开repo 中的polly_ssml_zip_code.mp3文件。
听起来好多了。这只是 SSML 功能的开始。请查看文档以了解支持标签和功能。
结论
使用 AWS Polly,您的应用程序可以以逼真的声音与用户对话。它支持不同方言的不同声音,为您的用户提供适合其位置和地理位置的真实体验。使用 SSML,您可以精确控制合成语音中文本的读取和发音方式。不同的声音还可以模拟年龄和性别。boto3 软件包让您仅用几行代码即可将 Polly 集成到 Python 应用程序中。但这只是对话的一个方面。AWS Lex 提供了另一部分,即语音识别,以便您的应用程序可以拥有完整的语音界面。谢谢阅读!
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~