ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

IoT 智能定时器多语言支持实战:Virtual IoT Device 上使用 Azure 语音翻译与 Translator 服务构建双语语音助手

IoT 智能定时器多语言支持实战:Virtual IoT Device 上使用 Azure 语音翻译与 Translator 服务构建双语语音助手 IoT 智能定时器多语言支持实战Virtual IoT Device 上使用 Azure 语音翻译与 Translator 服务构建双语语音助手【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners导读本文是 6-consumer 第 4 课支持多语言Support multiple languages中面向虚拟 IoT 设备Virtual IoT Device的实战指南讲解如何在smart-timer智能定时器项目中叠加两层翻译能力先用 Azure 认知服务语音Speech service在语音转文本的同时把用户语音直接翻译成服务器语言用于 LUIS 意图理解再用 Translator 服务的 REST API 把服务器生成的回复文本翻译回用户语言最后通过语音合成TTS朗读出来。读者学完后将掌握SpeechTranslationConfig/TranslationRecognizer的翻译式语音识别用法以及调用api.cognitive.microsofttranslator.com文本翻译 REST API 的完整流程并能在本地虚拟设备上实现用任意语言与 LUIS 训练语言对话的多语言 IoT 语音应用。多语言架构用户语言与服务器语言的双轨设计本课的多语言方案基于一个务实的前提让整个应用端到端理解所有语言工作量巨大因此引入翻译服务来加速交付。核心思路是核心逻辑保持单语言翻译放在输入与输出的两端服务器语言server language训练 LUIS 所用的语言也是应用内部生成回复文本所采用的语言用户语言user language用户实际开口说话的语言。用户用母语说出设置 2 分 27 秒的定时器后设备端完成语音识别 翻译两步合一将译文以speech字段发送到 IoT Hub由函数应用Functions交给 LUIS 做意图理解而 LUIS 返回的定时器提示语如 Times up on your 2 minute 27 second timer.在朗读之前会先通过 Translator 服务翻译回用户语言。整个链路可以参照架构图 translated-smart-timer.png日语语音 → 翻译成英语处理 → 再翻译回日语播报。用语音服务同时完成识别与翻译语音服务不仅能将语音转成同语言的文本还支持在识别的同时把输出翻译成其他语言。这一步完全由语音 SDK 完成是本文档的第一个核心实战环节。完整代码位于 code/virtual-iot-device/smart-timer/app.py。步骤一补充导入语句在app.py现有 import 之下追加from azure.cognitiveservices import speech from azure.cognitiveservices.speech.translation import SpeechTranslationConfig, TranslationRecognizer import requests前两行导入翻译式语音识别所需的配置类与识别器类requests库则用于稍后调用 Translator 服务的 REST API。步骤二声明双语言变量language user language server_language server languageuser language替换为你将要口述的语言的区域设置locale名称例如法语fr-FR、粤语zh-HKserver language替换为训练 LUIS 时所用语言的 locale 名称。 如果你只会一种语言可以先用 Bing Translate 或 Google Translate 之类的服务把诸如 set a 2 minute and 27 second timer 的句子翻译成目标语言再点击Listen translation按钮让翻译工具把译文朗读到麦克风里。注意语音识别器会忽略设备的部分音频输出因此可能需要额外的设备来播放译文。下图展示了 Bing Translate 上的 Listen translation 按钮步骤三用翻译配置替换原识别配置将上一课中的recognizer_config与recognizer声明替换为translation_config SpeechTranslationConfig(subscriptionspeech_api_key, regionlocation, speech_recognition_languagelanguage, target_languages(language, server_language)) recognizer TranslationRecognizer(translation_configtranslation_config)这段配置的含义是以language用户语言作为识别输入语言同时请求翻译到language和server_language两种目标语言随后基于该配置创建TranslationRecognizer——一个能把语音识别结果翻译成多语言的识别器。关键细节原始语言必须出现在target_languages中否则你不会收到任何翻译结果。步骤四改写 recognized 事件处理将recognized回调的整个函数体替换为if args.result.reason speech.ResultReason.TranslatedSpeech: language_match next(l for l in args.result.translations if server_language.lower().startswith(l.lower())) text args.result.translations[language_match] if (len(text) 0): print(fTranslated text: {text}) message Message(json.dumps({ speech: text })) device_client.send_message(message)这段代码做了三件事事件类型判断recognized事件并非只在翻译成功时触发也可能在已识别但未翻译的情况下触发因此必须用speech.ResultReason.TranslatedSpeech做过滤按服务器语言提取译文args.result.translations字典的键是 locale 的语言部分而非完整设置。例如请求翻译到fr-FR时字典里的键是fr。因此代码用server_language.lower().startswith(l.lower())来匹配兼容fr与fr-FR这类差异发送到 IoT Hub将译文封装为 JSON 字段speech通过device_client.send_message(message)发送。在仓库的完整实现 app.py 中事件通过recognizer.recognized.connect(recognized)挂接随后recognizer.start_continuous_recognition()启动连续识别。步骤五运行验证确保函数应用Functions正在运行然后以用户语言请求一个定时器——可以自己开口说或用翻译应用播放译文(.venv) ➜ smart-timer python app.py Connecting Connected Translated text: Set a timer of 2 minutes and 27 seconds.当用户用法语说出请求时控制台打印的却是英语译文说明语音服务已在识别阶段完成翻译LUIS 得以用服务器语言继续处理。用 Translator 服务把回复文本翻译回用户语言语音服务不支持把文本翻译回语音因此反向链路需要借助Translator 服务的 REST API 来翻译回复文本。这一步对应本文档的第二个核心实战环节在 app.py 中有完整实现函数应用侧的等价版本可见 translate-text/init.py。步骤一配置翻译器 API Key在speech_api_key下方添加translator_api_key key将key替换为你的 Translator 服务资源的 API Key如何创建资源与获取 Key参见 README.md 中的az cognitiveservices account create与az cognitiveservices account keys list命令资源类型为TextTranslationSKU 为 F0。步骤二定义 translate_text 函数在say函数上方定义translate_text(text)负责把文本从服务器语言翻译成用户语言。函数内部依次完成四步1. 定义 URL 与请求头url fhttps://api.cognitive.microsofttranslator.com/translate?api-version3.0 headers { Ocp-Apim-Subscription-Key: translator_api_key, Ocp-Apim-Subscription-Region: location, Content-type: application/json }与语音服务不同Translator 的 URL不区分区域区域信息通过Ocp-Apim-Subscription-Region请求头传入API Key 直接使用无需像 TTS 那样先向令牌颁发接口sts/v1.0/issuetoken换取访问令牌——这一对比在函数应用的 text-to-speech/init.py 中可以清楚看到。2. 定义查询参数与请求体params { from: server_language, to: language } body [{ text : text }]params指定翻译方向从服务器语言from到用户语言tobody为待翻译文本数组——设计为数组是因为一次调用可以翻译多个文本块。3. 发起 POST 请求response requests.post(url, headersheaders, paramsparams, jsonbody)返回的响应是一个 JSON 数组每个元素对应body中的一个条目其translations字段包含该条目在所有目标语言下的译文[ { translations: [ { text: Chronométrant votre minuterie de 2 minutes 27 secondes., to: fr } ] } ]4. 提取译文return response.json()[0][translations][0][text]即取数组第一个条目的第一条翻译的text属性。步骤三在 say 函数中接入翻译在生成 SSML 之前翻译待朗读文本print(Original:, text) text translate_text(text) print(Translated:, text)这两条print会把原文与译文同时输出到控制台便于排查翻译是否符合预期。在完整实现中翻译后的text会被拼入 SSMLspeak与voice标签语音名来自get_voices_async()按 locale 匹配到的语音随后speech_synthesizer.speak_ssml(ssml)播报为免播报被麦克风误识别播报前会stop_continuous_recognition()播报后恢复识别。步骤四运行验证保持函数应用运行再次以用户语言请求定时器(.venv) ➜ smart-timer python app.py Connecting Connected Translated text: 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 训练样本可能不一致不同语言表达同一含义的方式不同译文可能与你在 LUIS 中提供的示例略有出入。若出现这种情况应在 LUIS 中补充更多示例、重新训练并重新发布模型而不是修改代码中的翻译逻辑。机器翻译的固有局限不同语言对同一句话的措辞习惯不同翻译结果未必符合期望的表达且翻译并不总是对称的——A 语译 B 语再译回 A 语得到的句子可能略有差异。这是机器翻译含统计机器翻译与神经翻译混合方案的普遍现象也是本课架构中核心逻辑保持单一语言这一设计的原因。原语言必须列入 target_languages否则TranslationRecognizer不产生任何翻译recognized回调中将无法匹配到译文。翻译字典的键是语言部分请求fr-FR得到的键是fr匹配时应采用前缀匹配策略即startswith写法而不要直接比较完整 locale。小结本文档完成了smart-timer多语言化的设备端全部编码工作输入侧利用SpeechTranslationConfig与TranslationRecognizer在识别语音的同时翻译到服务器语言直接对接 LUIS 管道输出侧利用 Translator 服务的 REST APIapi-version3.0Key 与 Region 通过请求头传递把回复文本翻译回用户语言后再合成语音。完整可运行代码见 code/virtual-iot-device/smart-timer/app.py云侧函数应用含translate-text、text-to-speech、text-to-timer、get-voices四个触发器位于 code/functions/smart-timer-trigger。作为该项目的收尾一课完成本文后别忘了按 clean-up.md 清理云资源若想进一步挑战可参考 assignment.md 使用两台设备构建通用翻译器。【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表