机器学习 | AI 成熟了,AR 产品手册这样本身写出来

专属图1.png

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

听说快速发展的 AI 技术已经能够自动根据事件编写出普通人没法分辨的新闻报道,甚至不少机构已经开始用这种方式来创做新闻内容。那么其余领域呢?做为成熟的 AI,总能本身搞定这些任务了吧。git

本文,咱们就一块儿看看,如何使用 Amazon Sumerian 和其余 AWS 服务,借助加强现实、人工智能聊天机器人以及由 AWS IoT 提供的联网汽车数据建立交互式汽车使用手册。没错,不只能自动建立产品使用手册,并且这种手册仍是基于 AR 技术的,能够用更强的交互方式与用户互动!github

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

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

须要注意,限于篇幅,本文只简要介绍了总体解决方案中不一样逻辑组件的概述,并不是完整的按部就班教程。json

所涉及的 AWS 服务

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

  • 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 用做步骤的文档存储,以便在车辆内部进行交互。
  • AWS Lambda:让您无需预置或管理服务器便可运行代码。在本演示中,Lambda 函数用于填充 AWS IoT Core 影子文档以包含所需内容。
  • AWS IoT Core:一种托管云服务,可以让联网设备轻松安全地与云应用程序及其余设备进行交互。AWS IoT Core 支持安全、可靠地将数十亿台设备和数万亿条消息链接到 AWS 终端节点和其余设备。AWS IoT Core 支持用于存储联网设备的最新状态(不管这些设备是否联机)的设备影子概念。在本文中,设备影子文档用于在 Amazon Lex、DynamoDB、Sumerian 和车辆的虚拟表示形式之间交换信息。

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

ai-vehicle-manual-1.gif

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

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

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

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

如需更好地视觉和听觉效果,请参阅 AWS 汽车演示视频

如何建立此演示

请按照如下步骤操做来构建此演示:

  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 模型或实体。咱们能够将这些标记涂成红色并让它们呈半透明状,以便仍可看到下面的实际控件。随后对这些实体命名,以便可以在脚本中更轻松地识别出它们。此外还能够隐藏它们以模拟初始状态,在该状态下,只能看到实际的车内控件,以下面的屏幕截图所示:

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

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

使用如下步骤在Sumerian中建立一个状态机。

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

a)loadSDK(加载),表示加载 AWS 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 和其余人工智能、计算或存储服务。至此,你已经了解了如何集成这些服务,它们在体验中所发挥的做用以及如何将它们进行扩展。

底图2.png

相关文章
相关标签/搜索