IoT-For-Beginners 实战作业:使用双 IoT 设备构建跨语言实时通信的通用翻译器
发布时间:2026/9/16 5:09:53 锦皓数字建站

IoT-For-Beginners 实战作业使用双 IoT 设备构建跨语言实时通信的通用翻译器【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners本篇文章围绕 IoT-For-Beginners 课程《Consumer - Support multiple languages》一课的期末作业展开目标是用两个 IoT 设备搭建一台通用翻译器设备 A 采集用户语音并转成文本经 IoT Hub 与 Azure Functions 发送到设备 B设备 B 将文本翻译成自己的语言并合成为语音播放从而实现两种不同语言使用者之间的实时对话。读完本文你将掌握语音转文本、IoT Hub 消息路由、服务端翻译Translator Service Functions以及文本转语音在端到端双设备场景中的完整组合方式并能根据评估标准自测交付质量。任务目标让两台设备各说一种语言本作业要求复用此前几节课学到的全部能力语音识别、语言理解、语音合成构建一个通用翻译器universal translator。通用翻译器是一种能够在多种语言之间实时翻译的设备它让说着不同语言的人能够直接沟通。核心要求如下使用两个 IoT 设备将其中一个设备配置为语言 A例如法语fr-FR另一个配置为语言 B例如英语en-US每个设备需要完成完整链路采集语音 → 语音转文本 → 通过 IoT Hub 和 Functions 应用发送给另一台设备 → 翻译 → 播放翻译后的语音如果你手上只有一台实体设备可以按照前面课程中的步骤将 虚拟 IoT 设备virtual IoT device作为其中一台设备参与联调。关键技巧当把语音文本从一个设备发送到另一台设备时务必连同源语言标识一起发送这样接收端才能正确翻译。更进一步的做法是让每台设备先通过 Functions 应用向 IoT Hub 注册把自己支持的语言写入 Azure Storage随后用一个 Functions 应用统一处理翻译请求再把翻译后的文本回传给 IoT 设备。本课的工程代码就体现了这一思路可参考 4-multiple-language-support/code 目录。前置准备从单语言智能计时器到双语言互译在做本作业之前需要先完成本课正文《Support multiple languages》以及前三课的内容它们为通用翻译器提供了所有积木块语音转文本Speech to text用 Speech service 将用户语音转成文本用于识别用户说了什么语言理解Language understanding通过 LUIS 理解用户意图例如设置一个 2 分 27 秒的计时器本作业中服务端语言server_language即训练 LUIS 时使用的语言文本转语音Text to speech把服务端的回复文本合成语音播放给用户多语言支持本课在设备与服务端之间插入翻译环节使上述链路可以跨语言工作。作业中设备 A 说的话翻译成设备 B 的语言可以有两种落地方式对应本课的两种官方实现路径均可在 4-multiple-language-support 下找到路径适用平台参考文档源码目录路径一语音识别阶段直接翻译虚拟 IoT 设备Pythonvirtual-device-translate-speech.mdcode/virtual-iot-device/smart-timer路径二识别后用 Translator 服务翻译文本Raspberry PiPythonpi-translate-speech.mdcode/pi/smart-timer路径三Functions 封装翻译 HTTP 触发Wio TerminalArduino/Cwio-terminal-translate-speech.mdcode/wio-terminal/smart-timer三种路径的共性是服务端核心LUIS 意图识别 计时器业务逻辑始终保持单一语言运行只把用户语音和服务端回复在设备侧做翻译。这样只改两个方向上的翻译就能快速为新语言上线支持。第一步创建翻译资源Translator resource无论走哪条路径都需要先创建认知服务 Translator 资源。在终端中执行以下命令在smart-timer资源组中创建翻译资源--kind TextTranslation免费层F0az cognitiveservices account create --name smart-timer-translator \ --resource-group smart-timer \ --kind TextTranslation \ --sku F0 \ --yes \ --location location将location替换为创建资源组时使用的区域。随后获取该服务的访问密钥az cognitiveservices account keys list --name smart-timer-translator \ --resource-group smart-timer \ --output table复制其中一个 Key在后续配置中作为translator_api_keyPython或TRANSLATOR_KEYFunctions / C使用。第二步设计双语变量确定用户语言与服务端语言智能计时器需要同时维护两种语言用户语言user language用户实际开口说的语言例如法语fr-FR、粤语zh-HK服务端语言server language训练 LUIS 时使用的语言也是生成给用户播报消息所用的语言通常是英语en-US。各平台配置方式如下Python 设备Raspberry Pi / 虚拟设备language user language # 例如 fr-FR server_language server language # 例如 en-USWio TerminalC在 config.h 中维护两个常量const char *LANGUAGE user language; const char *SERVER_LANGUAGE server language;在通用翻译器场景中两台设备各自将对方语言作为自己的用户语言、将自己的业务语言作为服务端语言即可实现双向互译。语言名称locale需与 Speech service 支持列表一致。第三步语音文本的发送与接收IoT Hub 消息链路链路的第一半是把设备 A 识别出的文本发送到设备 B。以 Python 为例识别到语音后将其打包为 JSON 消息经设备客户端发送到 IoT Hubif len(text) 0: message Message(json.dumps({ speech: text })) device_client.send_message(message) 在真正实现通用翻译器时建议在消息体中补充language字段如{ speech: text, language: fr-FR }让接收端能根据消息自带的语言信息决定翻译方向。链路的后半段是设备 B 从 IoT Hub 接收消息、执行翻译并播放。如果你选择语音识别阶段直接翻译虚拟设备路径则可以在设备 A 侧用 Speech SDK 的翻译识别器一步完成识别翻译直接把翻译结果发往 IoT Hubfrom azure.cognitiveservices.speech.translation import SpeechTranslationConfig, TranslationRecognizer translation_config SpeechTranslationConfig(subscriptionspeech_api_key, regionlocation, speech_recognition_languagelanguage, target_languages(language, server_language)) recognizer TranslationRecognizer(translation_configtranslation_config)在识别回调中判断ResultReason.TranslatedSpeech再从args.result.translations字典中取出服务端语言对应的翻译结果。需要特别注意的是该字典的键只包含 locale 的语言部分——例如请求fr-FR时字典里存的键是fr而非fr-FR因此匹配时要用server_language.lower().startswith(l.lower())这类前缀判断并且源语言必须同时出现在target_languages中否则不会返回任何翻译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)第四步用 Translator 服务翻译文本双方向调用Speech service 的 REST API 不支持直接翻译该能力仅存在于 Speech SDK因此纯文本翻译要交给Cognitive Services Translator 服务。该服务基于 REST API返回 JSON 数组。以 Python 设备为例定义translate_text函数def translate_text(text, from_language, to_language): 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 } params { from: from_language, to: to_language } body [{ text : text }] response requests.post(url, headersheaders, paramsparams, jsonbody) return response.json()[0][translations][0][text]需要注意的实现细节该 API 的 URL不区分区域区域通过请求头Ocp-Apim-Subscription-Region传递API Key 直接放在Ocp-Apim-Subscription-Key头中无需像 Speech service 那样先去换取访问令牌body是数组允许在同一次调用中翻译多段文本响应同样是 JSON 数组取response.json()[0][translations][0][text]即得到第一段文本的第一条翻译结果。在智能计时器中这个函数需要双向调用识别语音时把用户语言language翻译成服务端语言server_language供 LUIS 理解意图text translate_text(text, language, server_language)生成回复时把服务端语言server_language翻译成用户语言language再交给文本转语音播放def say(text): text translate_text(text, server_language, language) speech get_speech(text) play_speech(speech)在通用翻译器作业中设备 A 的语言与设备 B 的语言正是这样互为对方的 from/to 方向。第五步Wio Terminal 路径——把翻译封装成无服务器函数由于 Wio Terminal 是嵌入式设备直接调用云翻译 API 不便官方做法是在 Functions 应用中新增一个名为translate-text的 HTTP 触发器。先在本机 Functions 项目的 local.settings.json 中加入TRANSLATOR_KEY: key, TRANSLATOR_LOCATION: location再在 VS Code 终端中创建触发器func new --name translate-text --template HTTP trigger该触发器的核心实现完整代码见 translate-text/init.py从请求 JSON 中读取from_language、to_language、text三个字段然后向 Translator REST API 发起调用并返回翻译结果def main(req: func.HttpRequest) - func.HttpResponse: req_body req.get_json() from_language req_body[from_language] to_language req_body[to_language] text req_body[text] url fhttps://api.cognitive.microsofttranslator.com/translate?api-version3.0 headers { Ocp-Apim-Subscription-Key: translator_key, Ocp-Apim-Subscription-Region: location, Content-type: application/json } params {from: from_language, to: to_language} body [{text: text}] response requests.post(url, headersheaders, paramsparams, jsonbody) return func.HttpResponse(response.json()[0][translations][0][text])该触发器在 function.json 中声明为同时支持get和post的 HTTP 触发器。本地启动 Functions 后可以用如下 JSON body 直接验证{ text: Définir une minuterie de 30 secondes, from_language: fr-FR, to_language: en-US }设备侧则在 text_translator.h 中实现TextTranslator类构造 JSON 请求体后通过HTTPClientPOST 到该函数 URL收到 200 后取回翻译文本随后在say函数与processAudio中分别调用translateText(text, LANGUAGE, SERVER_LANGUAGE)完成两个方向的翻译详见 wio-terminal-translate-speech.md。端到端联调运行结果与注意事项以法语用户 → 英语服务端为例三个平台最终都会在终端/串口输出类似的翻译过程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.联调时有几点务必注意保持 Functions 应用处于运行状态所有设备路径都依赖 Functions 处理 LUIS 意图、翻译与语音合成中断会导致链路失效翻译偏差是正常现象不同语言表达方式不同翻译结果可能与训练 LUIS 时给的示例不完全一致。此时应为 LUIS 补充更多示例、重新训练并重新发布模型而非修改翻译逻辑不会说外语也能测试可使用 Bing Translate / Google Translate 等工具把句子翻译成目标语言再用其语音朗读功能读给麦克风设备即能采集到外语语音参见课程中的 bing-translate.png 界面示意双设备验证若只有一台实体设备将虚拟 IoT 设备作为另一台设备接入同一 IoT Hub即可完成整条链路的双向验证。架构要点为什么翻译可以支撑快速多语言上线本作业背后的架构思想详见本课正文 README.md是保持应用核心语言理解 业务逻辑为单一语言在输入与输出两端用翻译桥接。下图为日语输入 → 英语处理 → 日语回复的示意架构正是本作业双设备互译在单设备上的缩影相比为每种语言重新训练一套端到端语音/理解模型这种两端翻译方案能以最低成本快速为设备添加新语言也是科幻作品中通用翻译器在今天的现实版实现——只不过服务对象是不同的人类语言而非外星语言。其代价在于不同语言和文化对同一件事的表达方式不同机器翻译可能与预期措辞存在差异这在作业评估时也应被合理看待。作业评分标准Rubric标准优秀Exemplary合格Adequate待改进Needs Improvement构建通用翻译器成功构建通用翻译器一台设备识别到的语音能转换成另一种语言的语音由另一台设备播放部分组件可工作如语音采集或翻译但未能完成端到端整体方案未能构建出通用翻译器的任何可用部分对照该标准自查交付物是否两台设备分别配置了不同语言语音是否真正跨越了采集 → 转文本 → IoT Hub/Functions 传输 → 翻译 → 语音播放的全链路若只实现了其中一段例如只在单机上翻译而未完成跨设备传输只能算合格而非优秀。课后延伸完成作业后别忘了清理云资源本课是 Consumer 项目的最后一课。完成作业并验证通过后建议按照 clean-up.md 中的指引删除演练用的云资源Translator 资源、IoT Hub、Functions 应用、LUIS、Speech service 等避免持续产生费用。同时可以思考本课 Challenge 提出的问题机器翻译除了语音之外还能为哪些 IoT 应用如文本类内容带来价值【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。