この記事はVTuber Tech #1 Advent Calendar 2019 21日目の記事です。
はじめに
- 音声認識&音声合成の機能を持ったドコモAIエージェントサービスを使ってアバターと会話ができるようにします
- サービスを使うにはGoogleアカウントまたはdアカウントが必要になります
- 今回はこちらの講演資料を参考に作成しています
XR Kaigiの講演のスライドです!!
— AIセバスちゃん (@SebasAi) December 6, 2019
「音声対話エンジンを使った中の人がいないバーチャルキャラクターとその先の未来」#XRKaigihttps://t.co/ilYDlldAvA
セットアップ
講演でも言ってましたが、サイトの導線がくそ分かりづらい難しい
Unity側の準備
Unity Packageの取得
下記URLからUnity用SDKをダウンロードします
https://docs.sebastien.ai/step4/
ZIPを展開しsebastien_1.21.1.unitypackage
をUnityにインポートします
次に、Build Settingsにlogin
シーンとmain
シーンを設定します
login
シーンを実行してみてエラーが出ていなければとりあえずのセットアップはOKです。
もしエラーが出る場合はPlayer Settings->Scripting Runtime Versionを確認してみてください。
3.5になっているとコンパイルエラーが発生するようです
ここまでできたらUnity側の準備は完了です
サービス側の準備
Agentcraftのサイトに行きログインします
https://agentcraft.sebastien.ai/
設定->デバイスIDの追加でデバイスID
が表示されるので、これをコピーしておきます
次にSEBASTIENのUser Dashboard(UDS) にログインします
https://users-v2.sebastien.ai/login/login
これでサービス側の準備は完了です
実行してみる
Unityに戻り、login
シーンを実行します
InputfieldにデバイスID
を入力してDevice Token取得
を押します
デフォルト状態では「こんにちは」と打つと名前を聞いてきます
「名前は○○です」と打つと、その名前を認識して返してくれます
アバターに口パクさせる
- アバターはユニティちゃん https://unity-chan.com/download/index.php
- リップシンクにはOculus Lipsync https://developer.oculus.com/downloads/package/oculus-lipsync-unity/
- の各アセットを使用します
の予定でしたが、Oculus Lipsyncが使えないことが判明しました。。。
どうやら音声を出力しているSpeak
クラスがOnAudioFilterRead
持つコンポーネントをアタッチされてしまうと動作しなくなってしまうようです。
仕方ないので、AudioListener
から音声のボリュームを解析して口パクするスクリプトを作成しました
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
public class LipSync : MonoBehaviour
{
//ブレンドメッシュを持つSkinnedMeshRendererを設定
public SkinnedMeshRenderer _skinnedMeshRenderer;
//口パクに使うブレンドメッシュのIndex
public int _index;
//ゲイン
public float _gain = 1000f;
float[] _waveData = new float[1024];
// Update is called once per frame
void Update ()
{
//AudioListenerから音声データを取得
AudioListener.GetOutputData(_waveData,1);
//平均値にゲインをかけてブレンドメッシュを変化させる
_skinnedMeshRenderer.SetBlendShapeWeight(_index, _waveData.Average() * _gain);
}
}
これを任意のGameObjectにアタッチします
そしてSkinned Mesh Rendererにはブレンドシェイプを持つSkinned Mesh Rendererを設定し
Indexには口パクで使用するブレンドシェイプのIndexを設定します
今回は口パクに「あ」のブレンドシェイプを使用したので6を入力しています
そのままでは口が開かないのでGainに適当な値を入れて口が開くようにします
エージェントをカスタマイズしてみる
- エージェントのカスタマイズは Agentcraftのサイト で行います
- 例えばマッチング条件を増やすと、返答できるパターンが増えます
- 初期状態では「名前は~」と名乗らないと認識してくれません
- マッチング条件に
*です
を追加すると名前を聞かれたときに「~です」と答えた時も名前を言ったものとして認識してくれます。
かなり自由にカスタマイズできるので、ぜひドキュメントを見ながら挑戦してみてください
https://docs.sebastien.ai/step4/agentcraft-howtouse/