23
13

More than 3 years have passed since last update.

ドコモAIエージェントAPIを使ってキャラクターと会話する

Last updated at Posted at 2019-12-20

この記事はVTuber Tech #1 Advent Calendar 2019 21日目の記事です。

はじめに

  • 音声認識&音声合成の機能を持ったドコモAIエージェントサービスを使ってアバターと会話ができるようにします
  • サービスを使うにはGoogleアカウントまたはdアカウントが必要になります
  • 今回はこちらの講演資料を参考に作成しています

セットアップ

講演でも言ってましたが、サイトの導線がくそ分かりづらい難しい

Unity側の準備

Unity Packageの取得
下記URLからUnity用SDKをダウンロードします
https://docs.sebastien.ai/step4/
image.png

ZIPを展開しsebastien_1.21.1.unitypackageをUnityにインポートします

次に、Build Settingsにloginシーンとmainシーンを設定します
スクリーンショット 2019-12-14 14.41.50.png

loginシーンを実行してみてエラーが出ていなければとりあえずのセットアップはOKです。
image.png

もしエラーが出る場合はPlayer Settings->Scripting Runtime Versionを確認してみてください。
3.5になっているとコンパイルエラーが発生するようです
image.png

ここまでできたらUnity側の準備は完了です

サービス側の準備

Agentcraftのサイトに行きログインします
https://agentcraft.sebastien.ai/
スクリーンショット 2019-12-14 14.50.02.png

ログインできるとこのような画面になります
スクリーンショット 2019-12-14 14.55.02.png

設定->デバイスIDの追加でデバイスIDが表示されるので、これをコピーしておきます
image.png

次にSEBASTIENのUser Dashboard(UDS) にログインします
https://users-v2.sebastien.ai/login/login
image.png

左上の+ボタンを押して
image.png

先ほどコピーしたデバイスIDを貼り付け、登録を押します。
image.png

これでサービス側の準備は完了です

実行してみる

Unityに戻り、loginシーンを実行します
InputfieldにデバイスIDを入力してDevice Token取得を押します
image.png

うまくログインできると下記の画面になります
image.png

デフォルト状態では「こんにちは」と打つと名前を聞いてきます
「名前は○○です」と打つと、その名前を認識して返してくれます
api.gif

アバターに口パクさせる

image.png

の予定でしたが、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に適当な値を入れて口が開くようにします
image.png

こんな感じで口パクさせることができます
lip.gif

エージェントをカスタマイズしてみる

  • エージェントのカスタマイズは Agentcraftのサイト で行います
  • 例えばマッチング条件を増やすと、返答できるパターンが増えます
  • 初期状態では「名前は~」と名乗らないと認識してくれません
  • マッチング条件に*ですを追加すると名前を聞かれたときに「~です」と答えた時も名前を言ったものとして認識してくれます。

image.png

他にも声の種類を変更したりもできます
image.png

かなり自由にカスタマイズできるので、ぜひドキュメントを見ながら挑戦してみてください
https://docs.sebastien.ai/step4/agentcraft-howtouse/

23
13
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
13