Pullしても本アプリは体験できないため、ポートフォリオとしてスクリプトのみ掲載
(Wit AI・クラウド・IoTエッジなど、必要になる要素が多いため)
Meta Questアプリ
現実世界にアバターが出現し、プレイヤーの音声によって応答してくれる。
音声認識と IoT を組み合わせており、現実物への操作が可能になっている。
特定のハンドポーズをとることで、アバターが反応し、音声入力が開始される 。
現在の機能は以下
リソース | 使用用途 |
---|---|
Cognito | セキュリティを高めるために使用 一時的な AWS のアクセス権を発行することで、Quest のソース内にアクセスキーを書く必要がなくなる |
S3 | Quest と AWS のファイル受け渡し場所 音声指示の解析 JSON データ・AWS で生成された音声ファイルを保管している ここに音声解析データが届くことで Lambda が動き出す |
Lambda | 本アプリの最重要なコア部分のバックエンド処理を担当 アバターの応答内容判断・Polly に音声を作るように指示・S3 への音声保存・EC2 へシグナルを送信・外部 API へアクセス・IoT Core にパブリッシュなど、主要な処理は全てここで行っている。 本来は Private サブネットに DB を作り、そこにアクセスする予定だったので VPC 内に配置している |
EC2 (VOICEVOX) | 音声生成するために使用(速度問題で今回は未使用) VOICEVOX のエディタを除いた、エンジンとコアを使用 公式が配布しているイメージでコンテナ構築 |
EC2 (Nginx) | Web サーバー・リバースプロキシとして使用 外部からのシグナルを Flask アプリのポートへ転送している |
EC2 (Flask) | シグナル管理のためのアプリ クラウドで音声生成が完了したのか・Quest で音声再生は終了したのか等の、各プラットフォーム間の状態管理するためのアプリとして機能している 各状態はメモリに保存しており、リクエストがあればその状態を返す仕様 |
Route53 | AWS IoT Core のエンドポイントの名前解決をするために使用 |
Amazon Polly | 音声生成するために使用 Lambda からのテキスト内容に沿った音声を生成する |
AWS IoT Core | ブローカーの役割 プロトコルは MQTT で、ラズパイと Lambda 間で通信を行い仲介する |
C#スクリプト名 | 役割 |
---|---|
AppManager | アプリ全体を統括するスクリプト 各マネージャーを呼び出し、アプリの実行順序を管理する Wit AIの音声認識後に呼び出され、検知インテントによって処理分岐を行う |
AvatarManager | アバターを管理するスクリプト アバターの動き・音声再生・アニメーション・まばたきや表情管理など、アバターに関することは全てここで行っている |
ConfigSingleton | 環境変数管理シングルトン シークレットキーやサーバーのIPなどはこのスクリプトを用いて、JSONファイルから読み込んでいる |
FollowUpSingleton | フォローアップ(お気遣い機能)の状態管理シングルトン フォローアップの音声準備が出来たか否か・音声ファイルパスはどこか、等の状態を管理する |
S3ClientSingleton | S3のクライアント管理シングルトン S3へのアップロードやダウンロードの際に必要になるクライアントをここで作成して使い回す |
S3DownloadManager | S3から音声ファイルをダウンロードするためのスクリプト |
S3UploadManager | S3に音声解析データファイルをアップロードするためのスクリプト |
SignalManager | クラウドと状態連携するためのスクリプト EC2インスタンスにQuestの状態(音声再生が終わったか等)を送ったり、クラウドの状態(音声ファイル生成が完了したか等)をポーリングしたりする フォローアップ有無の把握もここで行っており、クラウド連携の最重要なスクリプト ここで送られたシグナルはLambdaがEC2に読み取りに行く |
VoiceManager | Wit AI管理のためのスクリプト 音声入力を開始したり、解析結果をJSON化したりしている |
デバイス | 役割 |
---|---|
Raspberry Pi | Switchbot と IoT Core と通信する役割 IoT Core をサブスクライブしてメッセージを受信したら、そのメッセージ内容に応じた処理を実行 Switchbot との通信に関しては、公式が提供しているライブラリを使用 Switchbot との通信プロトコルは BLE 通信 |