翻译语音-RaspberryPi


文档摘要

翻译语音 - Raspberry Pi 在本课的这一部分,你将编写代码以使用翻译服务来翻译文本。 使用翻译服务将文本转换为语音 语音服务的REST API不支持直接翻译,但你可以使用翻译服务来翻译由语音到文本服务生成的文本以及用户语音响应的文本。此服务有一个REST API可以用来翻译文本。 任务 - 使用翻译资源来翻译文本 你的智能计时器将设置两种语言 - 用于训练LUIS(也是用于构建向用户讲话的消息的语言)的服务器语言,以及用户使用的语言。

翻译语音 - Raspberry Pi

在本课的这一部分,你将编写代码以使用翻译服务来翻译文本。

使用翻译服务将文本转换为语音

语音服务的REST API不支持直接翻译,但你可以使用翻译服务来翻译由语音到文本服务生成的文本以及用户语音响应的文本。此服务有一个REST API可以用来翻译文本。

任务 - 使用翻译资源来翻译文本

  1. 你的智能计时器将设置两种语言 - 用于训练LUIS(也是用于构建向用户讲话的消息的语言)的服务器语言,以及用户使用的语言。更新变量 language 以设置用户将要使用的语言,并添加一个名为 server_language 的新变量用于训练LUIS的语言:

    language = '<user language>' server_language = '<server language>'

    替换 <用户语言> with the locale name for language you will be speaking in, for example fr-FR for French, or zh-HK for Cantonese.

    Replace <服务器语言> with the locale name for language used to train LUIS.

    You can find a list of the supported languages and their locale names in the Language and voice support documentation on Microsoft docs.

    If you don't speak multiple languages you can use a service like Bing Translate or Google Translate to translate from your preferred language to a language of your choice. These services can then play audio of the translated text.

    For example, if you train LUIS in English, but want to use French as the user language, you can translate sentences like "set a 2 minute and 27 second timer" from English into French using Bing Translate, then use the Listen translation button to speak the translation into your microphone.

    The listen translation button on Bing translate

  2. Add the translator API key below the speech_api_key

    translator_api_key = '<key>'

    替换 <密钥> with the API key for your translator service resource.

  3. Above the say function, define a translate_text 函数,该函数将把从服务器语言翻译成用户语言的文本:

    def translate_text(text, from_language, to_language):

    从和到的语言将传递给这个函数 - 当识别语音时,你的应用程序需要将用户语言转换为服务器语言,当提供语音反馈时,则将服务器语言转换为用户语言。

  4. 在这个函数内部,定义用于REST API调用的URL和头部:

    url = f'https://api.cognitive.microsofttranslator.com/translate?api-version=3.0' headers = { 'Ocp-Apim-Subscription-Key': translator_api_key, 'Ocp-Apim-Subscription-Region': location, 'Content-type': 'application/json' }

    此API的URL不是位置特定的,而是作为头部传递位置。API密钥是直接使用的,因此与语音服务不同,无需从令牌颁发者API获取访问令牌。

  5. 在这之下定义调用的参数和正文:

    params = { 'from': from_language, 'to': to_language } body = [{ 'text' : text }]

    params defines the parameters to pass to the API call, passing the from and to languages. This call will translate text in the from language into the to language.

    The body 包含要翻译的文本。这是一个数组,因为可以在同一调用中翻译多个文本块。

  6. 调用REST API并获取响应:

    response = requests.post(url, headers=headers, params=params, json=body)

    返回的响应是一个JSON数组,其中包含一个项目,该项目包含了所有传入正文中的文本的翻译。这个项目有一个数组,其中包含所有传入正文中的文本的翻译。

    [ { "translations": [ { "text": "Set a 2 minute 27 second timer.", "to": "en" } ] } ]
  7. 返回第一个翻译项中的第一个翻译的 text 属性:

    return response.json()[0]['translations'][0]['text']
  8. 更新 while True loop to translate the text from the call to convert_speech_to_text 以将从用户语言转换为服务器语言的文本:

    if len(text) > 0: print('Original:', text) text = translate_text(text, language, server_language) print('Translated:', text) message = Message(json.dumps({ 'speech': text })) device_client.send_message(message)

    这段代码还将原始和翻译后的文本打印到控制台。

  9. 更新 say 函数以将从服务器语言翻译为用户语言的文本:

    def say(text): print('Original:', text) text = translate_text(text, server_language, language) print('Translated:', text) speech = get_speech(text) play_speech(speech)

    这段代码也将原始和翻译后的文本打印到控制台。

  10. 运行你的代码。确保你的函数应用正在运行,并请求用户语言的计时器,可以通过自己说这种语言或使用翻译应用程序来实现。

    pi@raspberrypi:~/smart-timer $ python3 app.py Connecting Connected Using voice fr-FR-DeniseNeural Original: Définir une minuterie de 2 minutes et 27 secondes. Translated: Set a timer of 2 minutes and 27 seconds. Original: 2 minute 27 second timer started. Translated: 2 minute 27 seconde minute a commencé. Original: Times up on your 2 minute 27 second timer. Translated: Chronométrant votre minuterie de 2 minutes 27 secondes.

    由于不同语言表达方式的不同,你可能会得到与你提供给LUIS的例子略有不同的翻译结果。如果是这种情况,请向LUIS添加更多示例,重新训练然后重新发布模型。

你可以在 code/pi 文件夹中找到这段代码。

你的多语言计时器程序成功了!

声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。


作者与出处
原作者: microsoft
来源:microsoft
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: microsoft 转发
评论区 (0)
U