明天就是端午節了,不過想必不少童鞋還得繼續加班吧。寫代碼的繼續「碼」,寫文案的繼續「編」,寫手冊的繼續「湊」,多麼紮實的端午假期……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 和其餘人工智能、計算或存儲服務。至此,你已經瞭解瞭如何集成這些服務,它們在體驗中所發揮的做用以及如何將它們進行擴展。