卓上の立体AIは、私たちの寂しさを埋めてくれるか?
こんにちは。電通デジタル、クリエイティブストラテジストの喜々津です。
デジタルデバイスの進化により、およそ4万5000年前イノシシの壁画から続いてきた平面でのコミュニケーションに、変化が訪れました。世はまさに大XR時代といえます。
アニメや漫画において、いわゆる未来として描かれてきた立体映像投影もいよいよ現実のものとなり、空想上のコンテンツはその存在感を向上。
そんな認知進化の激流にあるXRの新デバイス。
それが、Looking Glass Portraitです。
3D映像を裸眼で立体的に見れるディスプレイ・Looking Glassの新モデル「Looking Glass Portrait」(出典:公式ホームページ)
卓上に置いて、3Dコンテンツを肉眼で立体的に楽しむことができるLooking Glass Portrait。
今回は、Looking Glass Portraitにキャラクターを表示した上でインターネットに接続し、対話や音声変換機能をもつAPIを繋ぎ合わせる形で実装します。
立体キャラクターAIとして対話できるようにしたら、どのようなパラダイムが生まれるのかということを、大仰な書き出しで始まりましたが…カジュアルに、試していきます。
①システム選び
まずは早速、システム群のつなぎ方を考えます。
各社様々なAPIがありますが、不可欠である会話のエンジンから調査を開始。
サーバーを動かすにも関わらず、無料で使用できるAPIがいくつか公開されています。
大きな感謝を胸に抱きながら、今回はリクルートさんの「A3RT」というAPIサービス群の中から、TALK APIを選択しました。
SpeechToText、TextToSpeechに関しては、Qiitaなどでアタリだけ付けて、流れで実装することに。
②Looking Glass接続
Looking Glass Portraitを接続。Unityは、2020.2.4f1です。
公式のWEBからHoloplay Serviceと、Unity用SDKをダウンロードし、Unityに接続!
おや…。表示が変です。
Unityのエディターで色々触りますが、変化せず難航。
結局、Windowsの解像度設定という極めて単純な問題でした。推奨解像度を200→100%にします。
また、左右にある程度離れて角度を付けてデバイスを見ると、表示カメラが切り替わってしまう出力に。
こちらは、CenterのOffsetスライダを調整することで解決。なんとかイメージ通りの表示が可能となりました。
③召喚
自作のモデルを入れてみます。
難なく無事に召喚です。
④対話APIとの戦い
ここで、今回のメインである、TALK APIを導入開始です。
先のTALK API公式ページより、利用者登録メールで、APIキーを発行して貰います。
アドレスを入力すると、即座にキーが自動発行。
続けて、下記の記事を参考に、対話用のScriptを書きます。
以下細かいスクリプトは省略しますが、UnityWebRequestでPostしつつ、返却された値をJsonNodeでパース。パースされた配列から値を取り出して、Textオブジェクトに華麗にInします。
シーンを実行して、さぁ会話だ!
ところがここで問題発生。Unityに組み込むも、エラーは出ないのですが、なぜか入力した問いかけに、返事が貰えません。ログを出して調べてみると、APIのレスポンスデータがUnicode変換されていたため、JSONパーサーが機能していないことが判明しました。そんなこともありますよね、WEBのURLだもの、、、と嘆きながら、最終的にはRegularExpressions関数でデシリアライズすることで、無事にお返事をいただきます。
キャラクターと一緒にテキストに表示すると、この時点で大きく対話感が生まれました!
⑤気軽な音声認識
Speech To Textは、こんにちはコルタナで既に活用されている、Windows音声認識機能を活用。
実に素晴らしいモジュールで、公式のスクリプトをはるだけで声を取得し、Recognitions.textオブジェクトとして取り出すことが可能になります。
⑥発話
大ボスでした。今回の山場がこちらです。一番苦労した、発話部分。
Text To Speechの機能は、SaaSで様々な提供があるのですが、Unityに組み込む用途となると、一筋縄ではいきません。様々な方法をインポート・検証するも、Unityのバージョンやその他環境差分でことごとく失敗。
半日ほどかけて、最終的に命からがら、Amazon Pollyで無事に実現できました。
⑦リップシンクを超えて
発話まで来たら、もはや終わったも同然です。リップシンクを実装するため、AudioListenerのVolumeをモーフに繋ぎ込みます。
過去にVTuberを実装した経験があるのですが、モーフ関連は一歩間違えると時間がかかります。
今回は特に、合成音声での発話→母音の判断という僅かにアクロバティックな方法ではあるので、
カジュアルに音声ボリュームと口の開きのモーフ1項目を、連動させる方法をとります。
ここまでの実装がこちら。
本当は、いい人らしいです。
Amazon Pollyの設定項目の中から、Voice Type をMizuki と選択することで、女性の声で発話をするはずだったのですが、、、まぁ日本語の文章データで対話できたので、よしとします。
完成です。
卓上のAIは、私たちの寂しさを埋めてくれるか?
さて、キャラクターとの会話の中で一つ気づいたこと。
それは、会話とキャラが連動していると、こちらを向いている「圧」を感じるということです。
この「圧」は、一体何なのか。
人間は、情報量によって実在性を認識しています。
例えばジェットコースター系のVRコンテンツで起こるVR酔いの現象は、実在する現実との情報量の差が、酔いを生んでいるとされます。合わせて、VRデバイスでの遅延軽減や空間の振動再現により体感覚を再現することで、酔いが軽減されることが、様々な研究で明らかになっています。
(参考: VR酔いの発生を遅延させる振動効果についての実験的検討)
キャラクターに感じた「圧」も恐らく似たもので、立体AIとの会話では、キャラクターの立体的把握、音声に連動した口元の動き、などの情報量が増加し、組み合わさっています。
そうした複合的な「人間らしい」情報が視覚・聴覚に入ってくることで、統合されたコミュニケーションの実在性が知覚として再現され、「圧」を感じるのでしょう。
Wiredの創刊者Kevin Kelly氏も、Interaction(相互作用)とcognify(認知化)により、現実を超えたものを認知する「超認知」が引き起こるとしています。
(出典: 〈インターネット〉の次に来るもの 未来を決める12の法則)
まさに、会話とディスプレイで増えたフィードバックの情報量増加により、データで構成されたキャラクターに対して、人間としての存在感を覚える「超認知」が、僅かに働いたのではないでしょうか。
今回は実装後、身近な数人にも遊んでもらいました。面白がって雑談を続けてもらえた一方、あくまでも色々な問いかけをしてみて反応を楽しんでみるアクションにとどまり、感情を共有するような話し相手には至っていません。
北風吹き荒ぶ真冬の孤独を埋め、シンギュラリティに近づくAIパートナーになるには、インタラクションによる情報量向上が、鍵となりそうです。