AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

使用 Amazon Sumerian 和 Amazon Lex 构建 AR/AI 车辆使用手册

  • 2020-04-07
  • 本文字数:4718 字

    阅读完需:约 15 分钟

使用 Amazon Sumerian 和 Amazon Lex 构建 AR/AI 车辆使用手册

汽车厂商在车辆中不断增加新的功能、用户界面和人工智能特性。同时,也发布了各种用户使用手册,详细介绍如何使用这些功能。然而这些用户手册往非常繁琐,包含不同的语言,长度长达数百页。因此,车主常常难以搜索到与特定功能相关的信息。车厂也曾尝试使用视频或移动应用替代纸质手册,但并没有改进用户体验,很多车主仍然不知道如何充分利用了汽车厂商提供的所有创新功能。


本博文介绍了如何使用 Amazon Sumerian 和其他 AWS 服务创建交互式汽车手册。解决方案中使用了增强现实、人工智能聊天机器人以及由 AWS IoT 提供的联网汽车数据。它并非全面的分步教程,仅提供逻辑组件的概述。

AWS 服务

本博文使用了以下六项服务:


  1. Amazon Sumerian 让您能够快速、轻松地创建和运行虚拟现实 (VR)、增强现实 (AR) 和 3D 应用程序,而无需进行任何专业编程或 3D 制图专业知识。只需一键单击即可发布所创建的 3D 场景,然后在 Web、虚拟现实耳机和移动应用程序中分发。在本博文中,Sumerian 用于渲染车辆内部和外部(可选)的 3D 模型并为其添加动画效果。

  2. Amazon Lex 是一项使用语音和文本为任何应用程序构建对话接口的服务。Amazon Lex 采用的支持技术与 Amazon Alexa 相同。Amazon Lex 使所有开发人员都能够使用 Alexa 的强大功能,从而使深度学习技术大众化。在本博文中,Amazon Lex 用于识别语音命令并确定拥有者所查询的功能或特性。

  3. Amazon Polly 是一项文本转语音服务,它使用高级深度学习技术合成语音,使其听起来像人声。通过 Amazon Polly,您可以创建能够说话的应用程序,并构建全新类别的支持语音功能的产品。Amazon Polly 支持多种语言的数十种语音,支持应用程序在不同国家/地区工作。在本博文中,Amazon Polly 用于将 Amazon Lex 答复表达成逼真的语音

  4. Amazon DynamoDB 是一个键值和文档数据库,用于以任何规模提供个位数毫秒级性能。DynamoDB 完全托管,具有内置的安全性、备份和还原功能以及用于 Internet 规模应用程序的内存缓存。在本博文中,您将看到将 DynamoDB 用作步骤的文档存储,以便在车辆内部进行交互。

  5. AWS Lambda 让您无需预置或管理务器即可运行代码。在本演示中,Lambda 函数用于填充 AWS IoT Core 影子文档以包含所需内容

  6. AWS IoT Core 是一种托管云服务,可让联网设备轻松安全地与云应用程序及其他设备进行交互。AWS IoT Core 支持安全、可靠地将数十亿台设备和数万亿条消息连接到 AWS 终端节点和其他设备。AWS IoT Core 支持用于存储联网设备的最新状态(无论这些设备是否联机)的设备影子概念。在本博文中,设备影子文档用于在 Amazon Lex、DynamoDB、Sumerian 和车辆的虚拟表示形式之间交换信息。


下图展示了这些服务之间的架构关系。



本图展示了 AWS 服务相互之间以及与最终用户和车辆之间的相对关系。车主启动移动应用程序,该应用程序中嵌入了包含车辆模型的 Sumerian 场景。车主随后可以通过点击按钮来激活 Amazon Lex 和 Amazon Polly。激活后,用户可以与应用程序进行交互,以执行需要执行的一系列步骤。


用户手册的内容存储在 DynamoDB 中。Amazon Lex 通过调用 Lambda 来获取此信息。Lambda 函数将查询 DynamoDB 表并检索 JSON 结构,以描述:


  1. 步骤(按时间排序并且标记有 startend),以指示何时应最终突出显示控件。例如,…{“LeftTemperatureDial”: {“start”: 0, “end”: 2 }}…

  2. 需要在步骤于 Sumerian 模型中显示时发出的提示。例如,“按下左侧调温盘 2 秒钟。”


此 JSON 文档随后将传递给 AWS IoT Core 设备影子文档。Sumerian 随后将定期轮询文档的状态更改,并通过高亮显示相应的界面控件来让 Sumerian 模型反映步骤。

如何创建此演示

请按照以下步骤操作,来构建此演示:


  1. 创建基本场景。

  2. 为控制元素添加标签。

  3. 创建 DynamoDB 表。

  4. 创建 Amazon Lex 机器人。

  5. 使用 Lambda 函数。

  6. 在 Sumerian 中创建一个状态机。

  7. 在场景中放置一个 AR 摄像头。

  8. 发布场景。

  9. 链接至 Amazon Lex 机器人。

  10. 部署应用程序。

步骤 1:创建基本场景

创建一个带有实体的基本场景以及 AWS 配置。


  1. 使用增强现实模板创建一个场景,并导入所购汽车的 3D 资产。此模型源自 3D 模型市场,也可从免费的 3D 图库或 3D 设计软件以任何受支持的格式导入。

  2. 创建一个 Amazon Cognito 身份池,以允许 Sumerian 使用 Amazon Lex 和 AWS IoT Core。此身份池应拥有访问 AWS IoT、Amazon Lex 和 Amazon Polly 的相应策略。有关更多信息,请参阅使用 AWS CloudFormation 设置 Amazon Cognito

  3. 向 Sumerian 场景中的 AWS 配置组件提供创建的身份池 ID,并启用 AWS IoT 数据客户端上的复选框。

步骤 2:为控制元素添加标签

创建包含车内大部分控制元素(仪表盘、按钮、盖板、显示屏、标志等)的 3D 模型或实体。我将这些标记涂成了红色并让它们成半透明状,以便仍可看到下面的实际控件。我对这些实体进行了命名,以便能够在我的脚本中更轻松地识别出它们。我还隐藏了它们以模拟初始状态,在该状态下,只能看到实际的车内控件,如下面的屏幕截图所示。


步骤 3:创建 DynamoDB 表

在 DynamoDB 中创建一个表,并使用各种车辆功能和相应的步骤对其进行数据初始化,以启用、禁用、设置或取消设置相应的功能。这些指令中包含必须显式的每个子模型实体的开始/结束时间和持续时间,以遵循您想要的显示顺序,如以下屏幕截图所示。



步骤 4:创建 Amazon Lex 机器人

创建 Amazon Lex 机器人并使用意图和话术对其进行初始化。您将启用 Amazon Lex 来理解车主的问题。Amazon Lex 将确定车主所询问的功能,并将此信息发送给 Lambda 函数。




如在上面的两个屏幕截图中所示,您将创建一个被称为 airconditioningManual 的意图。此意图随后将包括若干个含有以下三个自定义槽的示例话术:


  • {option},用于描述需要执行的活动,示例包括“打开”、“增加”、“移除”等

  • {action},用于描述功能,例如“温度”、“风扇速度”等

  • {conjunction},用于允许可选连词,如“通过”、“在…上”、“的”等


您可以为其他交互或其他车辆部件添加更多意图。

步骤 5:使用 Lambda 函数

Lambda 函数包含用于执行下列步骤的代码。


  1. 它用于查询 DynamoDB 表,以获取包含可视或高亮显示的控件元素(仪表盘、按钮、盖板、显示屏、标志等)开始时间、结束时间和持续时间的已排序指令文档。


   response = dynamo_client.get_item(                       TableName='XXXautoYYY_manual',                       Key={                               'action_name': {                                   'S': toget                               }                           }                   )
复制代码


  1. Lambda 函数将通过设备影子文档转换这组指令,并将其存储至 AWS IoT Core。


   action = iot_client.update_thing_shadow(                       thingName='XXXautoYYY',                       payload=json.dumps({                           "state":{                               "desired": {                                   "steps": actionList                               }                           }                       })                   )
复制代码


  1. Lambda 函数将向 Amazon Lex 返回一个响应对象,以满足来自手册拥有者的请求。此响应对象包含包装在句子中的要执行的指令,可进行播放。


   rtrn = {           "dialogAction": {               "type": "Close",               "fulfillmentState": "Fulfilled",               "message": {                   "contentType": "PlainText",                   "content": rtrnmessage               }           }       }
复制代码

步骤 6:在 Sumerian 中创建一个状态机

使用以下步骤在 Sumerian 中创建一个状态机。


  1. 此状态机将持续侦听设备影子文档上发生的更改。状态机中存在三种状态,如下图所示:

  2. loadSDK(加载),表示加载 AWS SDK

  3. getShadow(参见下一步)

  4. waiting(等待),用于在循环例行程序中调用 getShadow 状态。

  5. 如需了解与 Sumerian 中的状态机相关的更多信息,请参阅状态机基础知识。这些更改将根据 IoT 影子提供的指令在模型上执行,以按照指定的开始/结束时间和持续时间显示标记元素。设备影子随后将进行重置。



  1. 上一步骤中的状态机中的 getShadow 状态将执行检索 IoT 设备影子的脚本,以执行单独层的实际动画。如需了解与编写脚本和检索 IoT 设备影子相关的更多信息,请参阅 IoT 物体、影子和脚本操作。脚本执行步骤(显示高亮显示的实体→等待→隐藏突出显示的实体)的示例代码段如下所示:


   function showControl(control, ctx, controlName) {
setTimeout(function(){ var myWorld = ctx.entity.world.entityManager var controlEnt = myWorld.getEntityByName(controlName) controlEnt.show() setTimeout(function(){ controlEnt.hide()
}, (control.end-control.start)*1000); }, control.start*1000); }
复制代码

步骤 7:在场景中放置一个 AR 摄像头

在面向车辆仪表板的场景中放置一个 AR 摄像头实体。我还相应地扩展车辆,以便移动应用程序用户和车主能够看到控件元素(仪表盘、按钮、盖板、显示屏、标志等)相对于实际车辆上的控件的大小。

步骤 8:发布场景

发布场景并将 URL 嵌入到 GitHub 上提供的示例 iOS/Android 占位符应用程序中。这些应用程序为开源应用程序,可用于 iOSAndroid


private let sceneURL = URL(string: "https://us-east-1.sumerian.aws/ABCDEFGHIJKLMNOPRSTUVWXYZ1234567.scene/?arMode=true&&a")!
复制代码

步骤 9:链接至 Amazon Lex 机器人

最后一点,也是最重要的一点,我通过 GitHub 上的其他示例项目添加 Amazon Lex 机器人,并将其与步骤 4 中发布的 Amazon Lex 机器人链接在一起。


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let credentialProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "us-east-1:STUVWXYZ-0000-1111-2222-LKJIHGFEDCBA")
let configuration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialProvider) AWSServiceManager.default().defaultServiceConfiguration = configuration
let chatConfig = AWSLexInteractionKitConfig.defaultInteractionKitConfig(withBotName: "XXXAWSYYY", botAlias: "$LATEST") chatConfig.autoPlayback = true AWSLexInteractionKit.register(with: configuration!, interactionKitConfiguration: chatConfig, forKey: "AWSLexVoiceButton") AWSLexInteractionKit.register(with: configuration!, interactionKitConfiguration: chatConfig, forKey: "chatConfig")
return true }
复制代码

步骤 10:部署应用程序

最后一步是将应用程序部署到支持 iOS 的设备并测试功能。可以在此博文的 AWS 服务部分看到演示视频。

小结

本博文并非旨在为手册中插入的每一个部件提供综合指南,它只介绍了所有逻辑组件。阅读本博文之后,您应可以自信地启用需要具有视觉和听觉反馈的交互式手册的任何资产的 3D 模型,并将其部署到云中。


您的解决方案可以使用 Sumerian 和其他人工智能、计算或存储服务。现在,您已了解了如何集成这些服务,它们在体验中所发挥的作用以及如何将它们进行扩展。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/building-an-ar-ai-vehicle-manual-using-amazon-sumerian-and-amazon-lex/


2020-04-07 17:21876

评论

发布
暂无评论
发现更多内容

《人间失格》

后台技术汇

三周年连更 人间失格

JSF源码分析(一)

京东科技开发者

spring jsf 企业号 4 月 PK 榜

我认真总结并分析了Spring事务失效的十种常见场景

做梦都在改BUG

Java spring Spring事务

Mybatis返回集合类型到底是空集合还是null?源码解读

做梦都在改BUG

Java 源码 mybatis

【Linux】firewall-cmd之防火墙简介及命令详解【附加实战⭐建议收藏!!⭐】

A-刘晨阳

Linux 防火墙 Firewalld防火墙 三周年连更

Typescript- 数据类型

格斗家不爱在外太空沉思

typescript 三周年连更

ThreadLocal源码分析

做梦都在改BUG

Java 源码 多线程 ThreadLocal

Android C++系列:C++11函数特殊特性

轻口味

c++ 三周年连更

中国边缘云公有云服务市场 Top2,百度智能云让智算无处不在

Baidu AICLOUD

分布式云

华为云开源项目OpenTiny中TinyVue有什么优势?

英勇无比的消炎药

开源 Vue 组件库

阿里“妈宝级”之作,Kubernetes原理剖析与实战应用手册,太全了

做梦都在改BUG

Java Kubernetes k8s

终于有人把动态规划、冒泡排序、二叉树、链表、栈全部讲清楚了

Java你猿哥

数据结构 算法 二叉树 排序 LeetCode算法

GitHub爆款!Java性能优化:轻松道破软件性能调优,不止搞定JVM

Java你猿哥

Java JVM Java性能优化

全栈开发实战|Vue进阶——使用静态模块打包工具webpack

TiAmo

Vue webpack 三周年连更 静态模块打包

ARB链质押挖矿代币空投游戏dapp系统开发合约定制

开发微hkkf5566

The Beacon链游NFT系统开发技术

薇電13242772558

NFT

python中对象引用 | python小知识

AIWeker

Python python小知识 三周年连更

生物计算大模型技术在药物研发领域的应用

Baidu AICLOUD

生命科学 PaddleHelix

GPU 加速药物研发与基因组学分析

Baidu AICLOUD

生命科学

面试官:介绍一下什么是缓存雪崩、缓存击穿、缓存穿透?

Java你猿哥

redis 面试题 缓存穿透 缓存击穿 缓存雪崩

拿来吧你!保姆级Docker底层原理及源码实战手册,上线点赞破10W

做梦都在改BUG

Java Docker 容器

品牌活动|行云创新出席“新工业·智物联”全国巡回 CEO 峰会

行云创新

行云创新 新工业 智物联 全国巡回CEO峰会珠海站

天呐!我真的没想到推特GIF动图保存到手机相册竟然简单几步就能完成!

frank

twitter

每个Java程序员都必须知道的四种负载均衡算法

做梦都在改BUG

Java 负载均衡 负载均衡算法

一文详解RocketMQ-Spring的源码解析与实战

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

浅谈智能语音交互

六月的雨在InfoQ

语音识别 语音合成 三周年连更 智能语音交互

ChatGPT及大模型专题研讨会在蓉成功举办共探前沿技术与产业发展

NLP资深玩家

java 开发 SSM 框架整合之 MyBatis 动态 SQL

Java你猿哥

Java sql mybatis SSM框架 if

超简单!Java 项目自动生成接口文档教程

Apifox

Java 接口文档 API 文档生成 自动生成

超级详细|Linux系统下从0到1的玩法大全

浅羽技术

Linux unix 操作系统 命令 三周年连更

Java中的「接口」到底是什么?

海拥(haiyong.site)

三周年连更

使用 Amazon Sumerian 和 Amazon Lex 构建 AR/AI 车辆使用手册_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章