使用 Google Cloud Speech API
介绍
与应用程序交互的方式有很多种。显然,键盘曾经是、现在仍然是与计算机通信的最常用设备之一。最近(以人类的时代,而不是计算机的时代)鼠标让我们能够超越基于文本的界面。触摸技术在鼠标的基础上进行了改进,让我们能够使用更自然的交互。但是,当人们近距离地相互交流时,我们不会输入我们想说的话或指向它,而是使用口语。那么,计算机又有什么不同呢?
Google Cloud 语音 API
口头对话有两个方面:说话者和听话者。说话者必须发出声音来表达想法,而听话者则解释这些声音来重构想法。这似乎有些言过其实,因为人们每天都在这样做。但计算机并不理解这一点,除非向它们详细解释这些互动,否则它们无法理解。这就是 Google Cloud 中有两个语音 API 的原因。
首先是文本转语音 (TTS) API。此服务将书面(或键入)文本转换为类似于人声的声音。它提供 40 多种语言的 200 多种声音。它支持语音合成标记语言 (SSML),它允许您使用一组“阶段指令”注释书面文本,这些指令可自定义声音以获得更逼真的效果。这包括文本中的停顿以及首字母缩略词和缩写的发音。
另一个 API 是补充,即语音转文本 (STT)。如果 TTS 是说话者,那么 STT 就是听者。STT API 可以转录 125 多种语言的语音。与 TTS API 一样,它可以自定义。一个常见的用例是识别特定行业中的术语。STT API 甚至可以实时转录流式音频。
文本转语音 API
TTS 和 STT API 均支持 Python、Node.js、C#、Java 和其他流行语言的客户端库。它们还都支持 REST API。在本指南中,我将使用 Python 客户端库。
要开始使用 API,您需要在 Cloud Console 项目中启用 Text-to-Speech API。然后,您需要下载服务帐户的凭据并将凭据文件的路径存储在名为GOOGLE_APPLICATION_SETTINGS的环境变量中。我之前的指南《使用 Google Cloud Vision 的计算机视觉》介绍了此过程。有关详细信息,请参阅链接。
要安装 Python 的客户端库,请使用pip。
$ pip install google-cloud-texttospeech
最简单的示例从导入texttospeech模块开始。
from google.cloud import texttospeech
接下来创建一个新的TextToSpeechClient。
tts_client = texttospeech.TextToSpeechClient()
VoiceSelectionParams配置生成的声音。
params = texttospeech.VoiceSelectionParams(language_code='en-US')
language_code关键字参数是必需的。目前有 40 种不同的语言代码。此处语言代码设置为美国英语。您还可以设置语音名称以使用当前 237 种不同语音中的一种。语音是语言代码和性别的组合。例如,语音“en-GB-Standard-A”使用en-GB语言代码(代表英国英语)和 2 性别(代表女性)。或者,您可以使用ssml_gender关键字参数指定性别。
params = texttospeech.VoiceSelectionParams(language_code='en-US', ssml_gender=texttospeech.SsmlVoiceGender.FEMALE)
SsmlVoiceGender类型是四个值之一:SSML_VOICE_GENDER_UNSPECIFIED、MALE、FEMALE或NEUTRAL。
AudioConfig将为生成的音频文件选择一种格式。
audio = texttospeech.AudioConfig(audio_encoding=texttospeech.AudioEncoding.MP3)
有效的AudioEncoding为MP3、LINEAR16、OGG_OPUS和AUDIO_ENCODING_UNSPECIFIED。
要朗读的文本位于SynthesisInput中。
si = texttospeech.SynthesisInput(text='Peter Piper picked a peck of pickled peppers.')
最后,synthesize_speech方法将返回包含生成音频的SynthesizeSpeechResponse 。
response = tts_client.synthesize_speech(input=si, voice=params, audio_config=audio)
响应的audio_content属性是可以写入文件的音频数据。确保使用wb模式写入二进制数据。
f = open('en_us_female.mp3', 'wb')
f.write(response.audio_content)
f.close()
您可以从Github下载生成的音频文件 (en_us_female.mp3) 。我还通过将language_code关键字参数设置为en-GB,生成了一个男性声音 (en_us_male.mp3) 和一个带有英国口音的声音 (en_gb_male.mp3) 。
超细纤维增强塑料
如果我们为文本“我的邮政编码是 20202”生成一个音频文件会发生什么?在 Github 上收听文件 (zip_code_no_ssml.mp3)。
API 将“20202”读作“twenty million two hundred two”。但这不是我们读邮政编码的方式。我们会读出每个数字,例如“two oh two oh two”。我们如何才能让 Google 理解这一点?
答案是 SSML,即语音合成标记语言。它是一组用于标记要生成的文本的标签。以下是 SSML,它会告诉 Google 读出邮政编码中的每个数字。
ssml = """
<speak>
My zip code is
<say-as interpret-as="characters">
20202
</say-as>
</speak>
"""
通过告诉 Google 将邮政编码解释为字符,它将读取每个数字。要让 Google 使用 SSML,请查看 SynthesisInput并将文本关键字参数更改为ssml。
si = texttospeech.SynthesisInput(ssml=ssml)
生成的音频文件(zip_code_ssml.mp3)可以在 Github 上找到。
这只是 SSML 支持的一个示例。有关更多详细信息,请参阅文本转语音 API 文档。
语音转文本 API
STT API 的设置与 TTS API 类似。您需要为 Cloud Console 项目启用 Speech-to-Text API,并将服务帐号的凭据存储在名为GOOGLE_APPLICATION_CREDENTIALS的环境变量中。最后,使用pip安装客户端库包。
$ pip install google-cloud-speech
要转录的音频文件需要存储在 API 可以访问的地方。Google Cloud Storage 中的存储桶是一个不错的选择。
首先导入语音包。
from google.cloud import speech_v1p1beta1 as gcp_speech
SpeechClient处理与 API 的所有交互。
stt_client = gcp_speech.SpeechClient()
您还必须告诉 API 音频文件中所使用的语言和采样率。我将使用其中一个生成的文件,其采样率为 24000 赫兹。
language = 'en-US'
sr = 24000
对于 MP3 文件,必须指定编码。编码位于枚举模块中。
from google.cloud.speech_v1p1beta1 import enums
MP3 = enums.RecognitionConfig.AudioEncoding.MP3
识别方法将调用API。
response = stt_client.recognize(
{
'language_code': language,
'sample_rate_hertz': sr,
'encoding': MP3
}, {
'uri': 'gs://ps-guide-speech/en_us_male.mp3'
}
)
第二本词典告诉 API 要转录的音频文件的位置。响应包含一个备选列表,每个备选列表都包含转录文本和置信度分数。
transcript: "Peter Piper picked a peck of pickled peppers"
confidence: 0.9863739
这是用于生成音频文件的相同文本。而且置信度相当高。
结论
不要忘记,Python 并不是客户端库使用的唯一语言。而且始终可以使用任何 HTTP 框架直接调用 API。如果您结合使用 Google Cloud 文本转语音和语音转文本 API,您几乎就足以创建一个虚拟助手。剩下的唯一事情就是解析文本并从中提取含义。Google Cloud Natural API 可以提供这一点。STT API 允许您每月免费转录最多 60 分钟的音频。并且您可以使用 TTS API 每月免费生成最多 400 万个字符的文本的音频文件。谢谢阅读!
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~