Amazon Web Services ブログ

Amazon Sumerian および Amazon Lex を使用して AR/AI 車両マニュアルを作成する

自動車メーカーは、新しいコントロール、インターフェイス、インテリジェンスを車両に継続的に追加しています。これらの機能の使用方法を詳しく説明したマニュアルを公開していますが、これらのハンドブックは扱いにくいものです。それら数種類の言語の何百ものページで構成されているため、特定の機能に関する関連情報を検索することは困難です。紙ベースのマニュアルをビデオまたはモバイルアプリに置き換えようとしても、エクスペリエンスは向上していません。その結果、すべての所有者が自動車メーカーが提供するイノベーションすべてを知って利用できるわけではありません。

この投稿では、Amazon Sumerian およびその他の AWS のサービスを使用して、インタラクティブな自動マニュアルを作成する方法について説明します。このソリューションは、拡張現実、AI chatbot、および AWS IoT を通じて提供されるコネクテッドカーデータを使用します。これは包括的な段階的なチュートリアルではありませんが、論理コンポーネントの概要を提供します。

AWS のサービス

このブログ投稿では、次の 6 つのサービスを使用しています。

  1. Amazon Sumerianは、特別なプログラミングや3Dグラフィックの専門知識を必要とせずに、仮想現実 (VR)、拡張現実 (AR)、および 3D アプリケーションをすばやく簡単に作成および実行できます。作成された 3D シーンはワンクリックで公開し、Web、VR ヘッドセット、モバイルアプリケーションで配布できます。この投稿では、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 は、任意の規模で 1 桁のミリ秒のパフォーマンスを実現するキーと値のドキュメントデータベースです。DynamoDB は完全に管理されており、組み込みのセキュリティ、バックアップと復元、およびインターネット規模のアプリケーション用のメモリ内キャッシュを備えています。この投稿では、車両の内部で対話するためのステップのドキュメントストアとして DynamoDB を使用していることがわかります。
  5. AWS Lambda は、サーバーをプロビジョニングまたは管理せずにコードを実行することを可能にします。このデモでは、Lambda 関数を使用して AWS IoT Core シャドウドキュメントに自動入力するために使用されます。
  6. AWS IoT Coreは、接続されたデバイスをクラウドアプリケーションや他のデバイスと簡単かつ安全にやり取りできるマネージドクラウドサービスです。AWS IoT Core により、数十億のデバイスと数兆のメッセージが AWS エンドポイントや他のデバイスに確実かつセキュアに接続できるようになります。AWS IoT Core は、接続されたデバイスがオンラインであるかどうかに関係なく、最新の状態を保存するデバイスシャドウの概念をサポートしています。この投稿では、デバイスシャドウドキュメントを使用して、Amazon Lex、DynamoDB、Sumerian、および自動車の仮想表現の間で情報を交換します。

次の図は、これらのサービス間のアーキテクチャ上の関係を示しています。

この図は、相互に関連する AWS のサービスと、エンドユーザーと車両に関連する AWS のサービスを示しています。所有者のジャーニーは、車のモデルを含むシュメールのシーンを埋め込むモバイルアプリケーションから始まります。ユーザーはボタンをタップして、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 Auto Demo ビデオを参照してください。

このデモの作成方法

次の手順に従って、デモをビルドします。

  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 ID プールを作成して、Sumerian が Amazon Lex と AWS IoT Core の両方を使用することを許可します。この ID プールには、AWS IoT、Amazon Lex、および Amazon Polly にアクセスするための適切なポリシーが必要です。詳細については、AWS CloudFormation を使用した Amazon Cognito セットアップを参照してください。
  3. 作成した ID プール ID を Sumerian シーンの AWS Configuration コンポーネントに提供し、AWS IoT Data Client のチェックボックスをオンにします。

ステップ 2:コントロール要素にラベルを付ける

内部に存在するほとんどのコントロール要素 (ダイヤル、ボタン、フラップ、ディスプレイ、サインなど) をカバーする 3D ラベルまたは要素を作成します。これらのマーカーを赤で色付けし、半透明にしたので、下の実際のコントロールを表示できます。これらの要素に名前を付けて、スクリプトで簡単に識別できるようにしました。次のスクリーンショットに見られるように、実際の内部のみが見える初期状態を模倣するために、それらを隠しました。

ステップ 3:DynamoDB テーブルを作成する

DynamoDB でテーブルを作成し、いくつかの車両機能と、その機能を有効化、無効化、設定、または設定解除するための適切な手順をテーブルに入力します。次のスクリーンショットに示すように、これらの指示には、表示する必要がある各子モデル要素の開始/終了時間と期間が含まれており、それらを表示する順序に従います。

ステップ 4:Amazon Lex ボットを作成する

Amazon Lexボット を作成し、インテントと発言を取り込みます。Amazon Lex が所有者の質問を理解できるようにします。Amazon Lex は、所有者が尋ねている関数を判別し、この情報を Lambda 関数に送信します。

上記の 2 つのスクリーンショットに見られるように、airconditioningManual というインテントを作成しています。このインテントには、3つのカスタムスロットを含むいくつかのサンプルの発言が含まれます。

  • {option} 実行に必要なアクティビティを説明します。例には、「オンにする」、「増やす」、「削除する」などが含まれます
  • {action}で、「温度」、「ファン速度」などの機能を説明します
  • {conjunction}は、「with」、「on」、「of」などのオプションの接続詞を許可します。

他のインタラクションまたは車両の他の部分のインテントを追加できます。

ステップ 5:Lambda 関数を使用する

Lambda 関数には、次の手順を実行するコードが含まれています。

  1. DynamoDB テーブルにクエリを実行して、表示または強調表示されているコントロール要素 (ダイヤル、ボタン、フラップ、ディスプレイ、サインなど) の開始時刻、終了時刻、および期間を含む順序付けられた命令のドキュメントを取得します。
    response = dynamo_client.get_item(
                        TableName='XXXautoYYY_manual',
                        Key={
                                'action_name': {
                                    'S': toget
                                }
                            }
                    )
  2. デバイスシャドウドキュメントを介して、この一連の指示を変換して AWS IoT Core に保存します。
     action = iot_client.update_thing_shadow(
                        thingName='XXXautoYYY',
                        payload=json.dumps({
                            "state":{
                                "desired": {
                                    "steps": actionList
                                }
                            }
                        })
                    )  
  3. 応答オブジェクトを Amazon Lex に返し、マニュアルの所有者からのリクエストを処理します。この応答オブジェクトには、実行される命令が含まれており、文にラップされて再生されます。
    rtrn = {
            "dialogAction": {
                "type": "Close",
                "fulfillmentState": "Fulfilled",
                "message": {
                    "contentType": "PlainText",
                    "content": rtrnmessage
                }
            }
        }

ステップ 6:Sumerian でステートマシンを作成する

これらの手順を使用して、Sumerian でステートマシンを作成します。

  1. このステートマシンは、デバイス シャドウ ドキュメントで発生した変更を継続的にリッスンしています。次の図に示すように、ステートマシンには 3 つの状態があります。
    1. loadSDK で AWS SDKをロードします
    2. getShadow (次の手順を参照)
    3. ループルーチンで getShadow 状態を呼び出す待機状態。

    Sumerian のステートマシンの詳細については、ステートマシンの基本 を参照してください。これらの変更は、IoT シャドーによって提供される指示に従ってモデルで実行され、開始/終了時間と指定された期間に従ってマーキング要素を表示します。その後、デバイスのシャドウがリセットされます。

  2. 前の手順のステートマシンの getShadow 状態は、IoT デバイスのシャドウを取得するスクリプトを実行し、個々のレイヤーの実際のアニメーションを実行しています。IoT デバイスのシャドウのスクリプト作成と取得の詳細については、IoT Thing、Shadow、および Script Actions を参照してください。スクリプト実行手順のスニペットの例 (ハイライト要素の表示→待機→ハイライト要素の非表示) は次のとおりです。
    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:シーンを公開する

シーンを公開し、GitHub で入手可能な iOS/Android プレースホルダーアプリケーションの例に URL を埋め込みます。これらのアプリケーションはオープンソースであり、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 およびその他の AI、コンピューティング、またはストレージサービスを使用できます。これで、これらのサービスがどのように統合されるか、エクスペリエンスでどのような役割を果たすか、およびこのユースケースの範囲を超えてサービスを拡張する方法を理解できました。

上記の手順を確認して開始し、Amazon Sumerian video channel にサブスクライブし、Amazon Lex および Amazon Polly および IoT Shadow との統合の詳細を読んで構築してください!


著者について

Miro Masat はアマゾン ウェブ サービスのソリューションズアーキテクトで、ロンドンを拠点にしています。彼は、主に自動車産業のエンジニアリングアカウントに注力しています。Miroは、仮想現実、拡張現実、複合現実の大ファンであり、常に VR/AR/MR にエンジニアリングをもたらす方法を模索しています。仕事以外では、旅行、言語の学習、DIY プロジェクトの制作を楽しんでいます。