14

image

明天就是端午节了,不过想必很多童鞋还得继续加班吧。写代码的继续「码」,写文案的继续「编」,写手册的继续「凑」,多么扎实的端午假期……

据说快速发展的 AI 技术已经可以自动根据事件编写出普通人无法分辨的新闻报道,甚至很多机构已经开始用这种方式来创作新闻内容。那么其他领域呢?作为成熟的 AI,总能自己搞定这些任务了吧。

本文,我们就一起看看,如何使用 Amazon Sumerian 和其他亚马逊云科技 (Amazon Web Services)服务,借助增强现实、人工智能聊天机器人以及由 Amazon IoT 提供的联网汽车数据创建交互式汽车使用手册。没错,不仅能自动创建产品使用手册,而且这种手册还是基于 AR 技术的,可以用更强的交互方式与用户互动!

其实这样的解决方案不仅可以减轻相关创作人员的工作量,也能为产品的最终用户提供更优质的体验。毕竟都知道,汽车厂商会在车辆中不断增加新功能、用户界面和人工智能特性。虽然他们也会发布各种用户使用手册,详细介绍如何使用这些功能,然而这些手册往非常繁琐,包含不同的语言,长度长达数百页。因此车主常常难以搜索到与特定功能相关的信息。

虽然一些车厂曾尝试使用视频或移动应用替代纸质手册,但并没有改进用户体验,很多车主仍然不知道如何充分利用了汽车厂商提供的所有创新功能。但以后情况就好多了。

需要注意,限于篇幅,本文只简要介绍了整体解决方案中不同逻辑组件的概述,并非完整的循序渐进教程。

所涉及的亚马逊云科技服务

下文介绍的解决方案共使用了以下六项服务:

  • Amazon Sumerian:让您能够快速、轻松地创建和运行虚拟现实(VR)、增强现实(AR)和 3D 应用程序,而无需进行任何专业编程或 3D 制图专业知识。只需一键单击即可发布所创建的3D场景,然后在 Web、虚拟现实眼镜和移动应用程序中分发。在本文中,Sumerian 用于渲染车辆内部和外部(可选)的 3D 模型并为其添加动画效果。
  • Amazon Lex:一项使用语音和文本为任何应用程序构建对话接口的服务。Amazon Lex 采用的支持技术与 Amazon Alexa 相同。Amazon Lex 使所有开发人员都能够使用 Alexa 的强大功能,从而使深度学习技术大众化。在本文中,Amazon Lex 用于识别语音命令并确定拥有者所查询的功能或特性。
  • Amazon Polly:一项文本转语音服务,它使用高级深度学习技术合成语音,使其听起来像人声。通过 Amazon Polly,您可以创建能够说话的应用程序,并构建全新类别的支持语音功能的产品。Amazon Polly 支持多种语言的数十种语音,支持应用程序在不同国家/地区工作。在本文中,Amazon Polly 用于将 Amazon Lex 答复表达成逼真的语音。
  • Amazon DynamoDB:一种键值和文档数据库,用于以任何规模提供个位数毫秒级性能。DynamoDB 完全托管,具有内置的安全性、备份和还原功能以及用于 Internet 规模应用程序的内存缓存。在本文中,您将看到将 DynamoDB 用作步骤的文档存储,以便在车辆内部进行交互。
  • Amazon Lambda:让您无需预置或管理服务器即可运行代码。在本演示中,Lambda 函数用于填充 AWS IoT Core 影子文档以包含所需内容。
  • Amazon IoT Core:一种托管云服务,可让联网设备轻松安全地与云应用程序及其他设备进行交互。Amazon IoT Core 支持安全、可靠地将数十亿台设备和数万亿条消息连接到亚马逊云科技终端节点和其他设备。Amazon IoT Core 支持用于存储联网设备的最新状态(无论这些设备是否联机)的设备影子概念。在本文中,设备影子文档用于在 Amazon Lex、DynamoDB、Sumerian 和车辆的虚拟表示形式之间交换信息。

这些服务之间的架构关系如下图所示:

image

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

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

  1. 步骤(按时间排序并且标记有 start end),以指示何时应最终突出显示控件。例如:…{“LeftTemperatureDial”: {“start”: 0, “end”: 2 }}…
  2. 需要在步骤于 Sumerian 模型中显示时发出的提示。例如,“按下左侧调温盘2秒钟。”

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

如需更好地视觉和听觉效果,请参阅 亚马逊云科技汽车演示视频

如何创建此演示

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

  1. 创建基本场景;
  2. 为控制元素添加标签;
  3. 创建 DynamoDB 表;
  4. 创建 Amazon Lex 机器人;
  5. 使用 Lambda 函数;
  6. 在 Sumerian 中创建一个状态机;
  7. 在场景中放置一个 AR 摄像头;
  8. 发布场景;
  9. 链接至 Amazon Lex 机器人;
  10. 部署应用程序。

步骤1:创建基本场景

创建一个带有实体的基本场景以及亚马逊云科技配置。

  1. 使用增强现实模板创建一个场景,并导入所购汽车的 3D 资产。此模型源自 3D 模型市场,也可从免费的 3D 图库或 3D 设计软件以任何受支持的格式导入。
  2. 创建一个 Amazon Cognito 身份池,以允许 Sumerian 使用 Amazon Lex 和 Amazon IoT Core。此身份池应拥有访问 Amazon IoT、Amazon Lex 和 Amazon Polly 的相应策略。更多信息请参阅使用 Amazon CloudFormation 设置 Amazon Cognito。
  3. 向 Sumerian 场景中的亚马逊云科技配置组件提供创建的身份池 ID,并启用 Amazon IoT 数据客户端上的复选框。

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

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

ai-vehicle-manual-2-2.jpg

步骤3:创建 DynamoDB 表

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

ai-vehicle-manual-3.gif
ai-vehicle-manual-4.gif

步骤4:创建 Amazon Lex 机器人

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

sumerian-lex-1.gif
sumerian-lex-2.gif

如上述两个截图所示,我们将创建一个名为 airconditioningManual 的意图,此意图随后将包括若干个含有以下三个自定义槽的示例话术:

  • {option},用于描述需要执行的活动,例如“打开”、“增加”、“移除”等
  • {action},用于描述功能,例如“温度”、“风扇速度”等
  • {conjunction},用于允许可选连词,如“通过”、“在…上”、“的”等

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

步骤5:使用 Lambda 函数

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

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

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

2.Lambda 函数将通过设备影子文档转换这组指令,并将其存储至 Amazon 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
            }
        }
    }

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

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

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

a)loadSDK(加载),表示加载 Amazon SDK
b)getShadow(参见下一步)
c)waiting(等待),用于在循环例行程序中调用getShadow状态

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

ai-vehicle-manual-5.gif

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);
}   

步骤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 的设备并测试功能。可以在上文提供的链接中看到演示视频。

小结

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

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

image


亚马逊云开发者
2.9k 声望9.6k 粉丝

亚马逊云开发者社区是面向开发者交流与互动的平台。在这里,你可以分享和获取有关云计算、人工智能、IoT、区块链等相关技术和前沿知识,也可以与同行或爱好者们交流探讨,共同成长。