将物联网设备的信息转换为语音指令:使用 AWS IoT Core 和 Amazon Polly
作者:Adilson Perinei 和 Erica Goldberger,发于2023年2月23日,AWS IoT Core,物联网永久链接 分享
关键要点
AWS IoT Core 是一个完全托管的服务,允许连接数十亿个物联网设备,并将信息转发到 AWS 服务。使用 Rules Engine,您可以将 IoT 设备数据传输到其他 AWS 服务,并根据状态进行及时响应。本文介绍了如何将来自物联网设备的 JSON 消息转换为音频,以便通过 Amazon Polly 播放。在本例中,机器人在超市中工作,能够发送信息以通知员工机器人状态。AWS IoT Core 是一项完全托管的服务,它可以让用户连接数十亿个物联网设备,并将信息无缝地路由到 AWS 服务,而无需管理基础设施。其中一个关键特性是 Rules Engine。
通过 Rules Engine,您可以将 IoT 设备的数据发送到 AWS 中的其他服务。这使您能够针对 IoT 数据采取即时行动,例如触发警报和通知、收集日志或运行分析和机器学习模型。在本篇文章中,我们将展示如何将从设备接收到的 JSON 消息转换为音频,使用的是 Amazon Polly 的文本到语音机器学习模型。Amazon Polly 利用深度学习技术合成自然音质的人声,让您可以将文章转换为语音。Amazon Polly 提供数十种栩栩如生的声音,支持多种语言,可以用来构建语音激活的应用程序。
场景
在本例中,我们将处理在超市内导航以清洁地面的清扫机器人。这些机器人在状态变化时,会通过 MQTT 主题 robot/ltclientIDgt/data 发送消息,这些状态包括 [running waiting stuck charging]。消息包含机器人的当前状态以及它在超市的位置。
以下是来自机器人的一个示例 MQTT 消息:主题 robot/cleaningrobot1/data
json{ state stuck location aisle 6}
在我们的例子中,超市希望在机器人卡住时通过无线耳机通知员工。他们希望公告播放一个音频片段,指出哪个机器人卡住以及位置,以便员工可以轻松导航到机器人那里解决问题。
以下是员工将听到的音频示例:sampleaudiomessagemp3 片段内容:“清扫机器人 1 卡在第 6 过道。”
下载文件并在您的计算机上播放
图 1 下载示例音频
解决方案概述
为了为超市提供此解决方案,您需要构建以下内容:
物联网设备,用以表示机器人,并在机器人状态变更时发布消息。物联网设备,表示播放音频消息的扬声器。IoT 规则:监听主题 robot//data 上的消息。当机器人处于“卡住”状态时,将 JSON 消息转换为所需的字符串句子。将新消息发布到主题 speaker/message。图 2 解决方案示意图
前提条件
在进行此操作之前,您应具备以下前提条件:
一个AWS 账户。如果您没有 AWS 账户,请按照说明创建一个。拥有管理员访问权限的用户角色当工作流上线时,该角色的服务访问权限可以进一步约束。现代浏览器最新版本的 Firefox 或 Chrome。已安装的 Python 和 Pip。构建此解决方案不需要专业知识,但基本的 Linux 和 Python 知识将有助于您。操作步骤
步骤 1:克隆 GitHub 存储库并下载 AWS IoT 设备 SDK
克隆用于模拟机器人和扬声器的示例应用程序的 GitHub 存储库。如果您想在真实的机器人和扬声器上尝试此工作流程,请将 robot1 和 speaker1 文件夹复制到各自的设备上。否则,可以选择在本地计算机上进行模拟。bash git clone https//githubcom/awssamples/iotpolly
安装 AWS IoT Device SDK for Python。
如果您的机器人和扬声器分开运行,您需要对所有设备运行以下命令。bash python3 m pip install AWSIoTPythonSDK
步骤 2:为设备设置权限
机器人首先,为任何机器人设置适当的权限。这些机器人需要能够连接到 AWS IoT 并向主题 robot/ltrobotIDgt/data 发布消息。这可以通过 IoT 策略来实现。导航至 AWS IoT Core 控制台。在导航菜单中,选择 安全性 ,然后选择 策略。选择 创建策略。在 策略名称 输入 policyrobot。在 策略声明 中选择 JSON,然后粘贴以下策略文档:json { Version 20121017 Statement [ { Effect Allow Action iotConnect Resource arnawsiotltregiongtltaccountIDgtclient/{iotConnectionThingThingName} } { Effect Allow Action iotPublish Resource arnawsiotltregiongtltaccountIDgttopic/robot/{iotConnectionThingThingName}/data } ] }
将 ltregiongt 和 ltaccountIDgt 插入策略中,然后选择创建。图 3 IoT 策略机器人
扬声器接下来,为扬声器设备设置适当的权限。扬声器需要能够连接到 AWS IoT 并订阅主题 speaker/message。扬声器还需要访问 Amazon Polly 的权限以进行文本到音频的转换。要让设备访问其他 AWS 服务,您需要提供设备假定角色别名的权限。选择 创建策略。在 策略名称 输入 policyspeaker。在 策略声明 中选择 JSON,然后粘贴以下策略:json { Version 20121017 Statement [ { Effect Allow Action iotAssumeRoleWithCertificate Resource arnawsiotltregiongtltaccountIDgtrolealias/speakerrolealias } { Effect Allow Action iotConnect Resource arnawsiotltregiongtltaccountIDgtclient/{iotConnectionThingThingName} } { Effect Allow Action iotSubscribe Resource arnawsiotltregiongtltaccountIDgttopicfilter/speaker/message } { Effect Allow Action iotReceive Resource arnawsiotltregiongtltaccountIDgttopic/speaker/message } ] }
将 ltregiongt 和 ltaccountIDgt 插入策略中,然后选择创建。图 4 IoT 策略扬声器
步骤 3:为 Amazon Polly 操作设置权限
要给扬声器提供访问 Amazon Polly 的权限,您需要创建一个 AWS 身份和访问管理IAM角色,并创建一个 IoT 角色别名,以将 IAM 角色附加到 IoT 物体。
导航至 AWS IAM 控制台。在导航菜单中选择 角色。选择 创建角色。选择自定义信任策略。粘贴以下 JSON 策略:json { Version 20121017 Statement [ { Effect Allow Principal { Service credentialsiotamazonawscom } Action stsAssumeRole } ] }
选择 下一步。在 权限策略 下,搜索 polly 并选中 AmazonPollyReadOnlyAccess 的复选框。选择 下一步。对于角色名称,输入 speakerrole。选择 创建角色。导航至 AWS IoT Core 控制台。在导航菜单中,选择 安全性,然后选择 角色别名。选择 创建角色别名。在角色别名名称中输入 speakerrolealias。在角色中,从下拉列表中选择 speakerrole。保持凭证持续时间为 3600 秒1 小时,然后选择 创建。步骤 4:将设备连接到 AWS IoT Core
在 AWS IoT Core 中为您的机器人和扬声器设备创建 IoT 物体。
导航至 AWS IoT Core 控制台。在导航菜单中,选择 管理,然后选择 所有设备,再选择 物体。选择 创建物体。选择 创建单个物体,然后选择 下一步。首先,创建机器人。给机器人设定一个 物体名称 为 cleaningrobot1。保持其他设置不变,选择 下一步。图 5 在 AWS IoT Core 创建 IoT 物体
选择 自动生成新的证书推荐。选择 下一步。选中 policyrobot 的复选框。选择 创建物体。图 6 附加策略
下载所有四个文件:设备证书、公开密钥文件、私钥文件、RSA 2048 位密钥:Amazon Root CA 1。选择 完成。图 7 下载证书
将四个文件移动到 iotpolly 存储库中的 robot1 文件夹内。将私钥和证书文件重命名如下:xxxxprivatepemkey 变更为 robot1privatepemkeyxxxxcertificatepemcrt 变更为 robot1certificatepemcrt对扬声器设备重复上述步骤,以下更改:将 IoT 物体命名为 speaker1选择 IoT 策略: policyspeaker。重命名私钥和证书文件如下:xxxxprivatepemkey 变更为 speaker1privatepemkeyxxxxcertificatepemcrt 变更为 speaker1certificatepemcrt步骤 5:测试机器人和扬声器
在 AWS IoT Core 控制台中,选择 MQTT 测试客户端。在 订阅到主题 中输入 robot//data。在导航菜单中,选择 设置,并复制 设备数据终端。在您的终端中输入以下命令。导航到 iotpolly 存储库。bash cd robot1
# 在 PC 上:
bashpy m venv envcd envScriptsactivatecd /
# 在 Mac/Ubuntu 上:
日本免费加速器下载bashpython3 m venv envsource env/bin/activate
用您刚复制的设备数据终端替换 ltiot endpointgt。bash pip install r requirementstxt aws iot describeendpoint endpointtype iotDataATS python3 robotpy clientId cleaningrobot1 endpoint ltiot endpointgt key robot1privatepemkey cert robot1certificatepemcrt rootCA AmazonRootCA1pem
返回 MQTT 测试客户端,查看来自 robot/cleaningrobot1/data 的消息:
json{ state stuck location aisle 17 robotID cleaning robot 1}
保持 robot1 在后台运行,稍后再回来查看。
在一个新的终端标签页中,导航到 iotpolly 存储库。bash cd speaker1
# 在 PC 上:
bashpy m venv envcd envScriptsactivatecd /
# 在 Mac/Ubuntu 上:
bashpython3 m venv envsource env/bin/activate
# 在两者上:
bashpip install r requirementstxt
获取您的 IoT 终端和凭证提供者 URL:
bashaws iot describeendpoint endpointtype iotDataATSaws iot describeendpoint endpointtype iotCredentialProvider region ltregiongt
确保您计算机的音频开关已打开。运行扬声器设备:确保用上述命令的输出替换您的端点和凭证提供者。bashpython3 speakerdevicepy thingname speaker1 region ltregiongt endpoint ltiot endpointgt key speaker1privatepemkey cert speaker1certificatepemcrt rootCA AmazonRootCA1pem credentialsurl https//ltcredentialproviderendpointgt/rolealiases/speakerrole/alias/credentials
返回 MQTT 测试客户端。选择 发布到主题 标签。主题名称: speaker/message。消息负载:
json{ message Hello from AWS IoT console }
选择 发布。
speaker1 在 speakerdevicepy 文件中使用 boto3 库来调用 Amazon Polly API,将接收到的文本消息转换为 MP3