明天就是端午节了,不过想必不少童鞋还得继续加班吧。写代码的继续「码」,写文案的继续「编」,写手册的继续「凑」,多么扎实的端午假期……html
听说快速发展的 AI 技术已经能够自动根据事件编写出普通人没法分辨的新闻报道,甚至不少机构已经开始用这种方式来创做新闻内容。那么其余领域呢?做为成熟的 AI,总能本身搞定这些任务了吧。git
本文,咱们就一块儿看看,如何使用 Amazon Sumerian 和其余 AWS 服务,借助加强现实、人工智能聊天机器人以及由 AWS IoT 提供的联网汽车数据建立交互式汽车使用手册。没错,不只能自动建立产品使用手册,并且这种手册仍是基于 AR 技术的,能够用更强的交互方式与用户互动!github
其实这样的解决方案不只能够减轻相关创做人员的工做量,也能为产品的最终用户提供更优质的体验。毕竟都知道,汽车厂商会在车辆中不断增长新功能、用户界面和人工智能特性。虽然他们也会发布各类用户使用手册,详细介绍如何使用这些功能,然而这些手册往很是繁琐,包含不一样的语言,长度长达数百页。所以车主经常难以搜索到与特定功能相关的信息。数据库
虽然一些车厂曾尝试使用视频或移动应用替代纸质手册,但并无改进用户体验,不少车主仍然不知道如何充分利用了汽车厂商提供的全部创新功能。但之后状况就好多了。编程
须要注意,限于篇幅,本文只简要介绍了总体解决方案中不一样逻辑组件的概述,并不是完整的按部就班教程。json
下文介绍的解决方案共使用了如下六项服务:缓存
这些服务之间的架构关系以下图所示:安全
上图展现了 AWS 服务相互之间以及与最终用户和车辆之间的相对关系。车主启动移动应用程序,该应用程序中嵌入了包含车辆模型的 Sumerian 场景。车主随后能够经过点击按钮来激活 Amazon Lex 和 Amazon Polly。激活后,用户能够与应用程序进行交互,以执行须要执行的一系列步骤。服务器
用户手册的内容存储在 DynamoDB 中。Amazon Lex 经过调用 Lambda 来获取此信息。Lambda 函数将查询 DynamoDB 表并检索 JSON 结构,以描述:架构
start
和 end
),以指示什么时候应最终突出显示控件。例如:…{“LeftTemperatureDial”: {“start”: 0, “end”: 2 }}…
此 JSON 文档随后将传递给 AWS IoT Core 设备影子文档。Sumerian 随后将按期轮询文档的状态更改,并经过高亮显示相应的界面控件来让 Sumerian 模型反映步骤。
如需更好地视觉和听觉效果,请参阅 AWS 汽车演示视频。
请按照如下步骤操做来构建此演示:
建立一个带有实体的基本场景以及 AWS 配置。
建立包含车内大部分控制元素(仪表盘、按钮、盖板、显示屏、标志等)的 3D 模型或实体。咱们能够将这些标记涂成红色并让它们呈半透明状,以便仍可看到下面的实际控件。随后对这些实体命名,以便可以在脚本中更轻松地识别出它们。此外还能够隐藏它们以模拟初始状态,在该状态下,只能看到实际的车内控件,以下面的屏幕截图所示:
在 DynamoDB 中建立一个表,并使用各类车辆功能和相应的步骤对其进行数据初始化,以启用、禁用、设置或取消设置相应的功能。这些指令中包含必须显式的每一个子模型实体的开始/结束时间和持续时间,以遵循想要的显示顺序,如如下屏幕截图所示:
建立 Amazon Lex 机器人并使用意图和话术对其进行初始化。咱们将启用 Amazon Lex 来理解车主的问题。Amazon Lex 将肯定车主所询问的功能,并将此信息发送给 Lambda 函数。
如上述两个截图所示,咱们将建立一个名为 airconditioningManual
的意图,此意图随后将包括若干个含有如下三个自定义槽的示例话术:
{option}
,用于描述须要执行的活动,例如“打开”、“增长”、“移除”等{action}
,用于描述功能,例如“温度”、“风扇速度”等{conjunction}
,用于容许可选连词,如“经过”、“在…上”、“的”等咱们还能够为其余交互或其余车辆部件添加更多意图。
Lambda 函数包含用于执行下列步骤的代码。
1.它用于查询 DynamoDB 表,以获取包含可视或高亮显示的控件元素(仪表盘、按钮、盖板、显示屏、标志等)开始时间、结束时间和持续时间的已排序指令文档。
response = dynamo_client.get_item( TableName='XXXautoYYY_manual', Key={ 'action_name': { 'S': toget } } )
2.Lambda 函数将经过设备影子文档转换这组指令,并将其存储至 AWS IoT Core。
action = iot_client.update_thing_shadow( thingName='XXXautoYYY', payload=json.dumps({ "state":{ "desired": { "steps": actionList } } }) )
3.Lambda 函数将向 Amazon Lex 返回一个响应对象,以知足来自手册拥有者的请求。此响应对象包含包装在句子中的要执行的指令,可进行播放。
rtrn = { "dialogAction": { "type": "Close", "fulfillmentState": "Fulfilled", "message": { "contentType": "PlainText", "content": rtrnmessage } } }
使用如下步骤在Sumerian中建立一个状态机。
1.此状态机将持续侦听设备影子文档上发生的更改。状态机中存在三种状态,以下图所示:
a)loadSDK(加载),表示加载 AWS SDK b)getShadow(参见下一步) c)waiting(等待),用于在循环例行程序中调用getShadow状态
如需了解与 Sumerian 中的状态机相关的更多信息,请参阅状态机基础知识。这些更改将根据 IoT 影子提供的指令在模型上执行,以按照指定的开始/结束时间和持续时间显示标记元素。设备影子随后将进行重置。
2.上一步骤中的状态机中的 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); }
在面向车辆仪表板的场景中放置一个 AR 摄像头实体。此外还能够相应地扩展车辆,以便移动应用程序用户和车主可以看到控件元素(仪表盘、按钮、盖板、显示屏、标志等)相对于实际车辆上的控件的大小。
发布场景并将 URL 嵌入到 GitHub 上提供的示例 iOS/Android 占位符应用程序中。这些应用程序为开源应用程序,可用于 iOS 和 Android。
private let sceneURL = URL(string: "https://us-east-1.sumerian.aws/ABCDEFGHIJKLMNOPRSTUVWXYZ1234567.scene/?arMode=true&&a")!
最后也是最重要的一点,须要经过 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 }
最后须要将应用程序部署到支持 iOS 的设备并测试功能。能够在上文提供的连接中看到演示视频。
本文并不是旨在为手册中插入的每个部件提供综合指南,而只介绍了全部逻辑组件。阅读本文后,你应能够自信地启用须要具备视觉和听觉反馈的交互式手册的任何资产的 3D 模型,并将其部署到云中。
你的解决方案可使用 Sumerian 和其余人工智能、计算或存储服务。至此,你已经了解了如何集成这些服务,它们在体验中所发挥的做用以及如何将它们进行扩展。