見出し画像

Talk to Motion を作ってみた

こんにちは、ニケです。
あけましておめでとうございます。

今回は2023年の年末にTLで少し話題になった Text to Motion リポジトリのMoMaskに手を加えて、会話しながらモーションを生成してもらう『Talk to Motion』を作成してみたという記事です。

Text to Motionとは、指示したテキストからモーション(ファイル)を作成するアルゴリズムです。
下記のツイートでは、"The person does a salsa dance." と入力するだけで、棒人形がサルサダンスを踊るモーションを作成してくれています。

仕組み

今回も私がAITuberのUIとしてよく利用している ChatVRM を使用させていただています。

ChatVRMでは、下記のような処理で簡単にキャラクターと対話をすることが可能です。

今回はこれを改造して下記のような処理に変更します。

同じ行にある処理は同時に走っていると考えてください。

例えば、LLMからもらった回答が「今日の体育の授業はマラソンで疲れたね」だったとします。

TTSサービスであるkoeiromapで音声合成をする一方で、下記を並列に実行します。

  1. 「今日の体育の授業はマラソンで疲れたね」からモーションを生成する用のプロンプトをLLMに作成してもらいます。例 => "a person is runnning."

  2. MoMaskを使用して、1で得られたプロンプトからモーションファイル(BVH形式)を作成します。

  3. BVHファイルをVRMAファイルに変換します。これはChatVRMで使用されているVRMモデルが、BVH形式だと使用できないためです。

最後に、合成された音声とモーションファイルを同時に再生することで、音声発話に合わせて動いてくれます。

見てもらえればわかると思いますが、挙動が不審です。
プロンプトの影響が強いと思うので、これは要改修ポイントです。

また、こちらはカット版なのでモーションがすぐに再生されているように見えますが、実際はモーションの変わり目は10秒前後の待ち時間があります。
これはほとんどがMoMaskによるBVHファイル作成処理の時間です。

プロダクトとしてはやや粗が目立ちますが、それでも自分の環境で試したい、という方がいらっしゃったらぜひ続きを読んでください。

試し方

下記の手順はWindows環境(+ anaconda)でのみ動作確認しています。

OpenAI APIキーとKoeiromap APIキーが必要になるため、事前に取得しておくことをおすすめします。

まずは私が作成したリポジトリをクローンしてください。

git clone https://github.com/tegnike/ChatVRM-animate.git
cd ChatVRM-animate

次に、libフォルダ内にMoMaskをクローンします。

cd lib
git clone https://github.com/EricGuo5513/momask-codes.git
cd momask-codes

このフォルダ内で gen_t2m.py を実行して、BVHファイルを作成するまで進めてください。
MoMaskのREADMEを読むか、下記の猩々博士の記事を参考にすると良いでしょう。

うまくいくと、momask-codes/generations/xxx/animations/0/yyy.bvh のようなファイルが作成されると思います。

MoMaskの動作確認ができたら、元の私のリポジトリに戻って以下のファイルを開きます。
9行目の const cmd = `F:/anaconda_envs/momask/python となっている部分を、自身のpython環境に合わせたpathに変更してください。

もし仮想環境を利用していないなら、python のみで問題ないと思います。

# src\pages\api\momask.ts
 
export default (req: NextApiRequest, res: NextApiResponse) => {
  if (req.method === 'POST') {
    const options = req.body;
    const cmd = `F:/anaconda_envs/momask/python gen_t2m.py --gpu_id 0 --text_prompt "${options.prompt}" --ext ${options.ext}`;
    const cwd = path.join(process.cwd(), 'lib', 'momask-codes');

次にnpmコマンドでサーバーを立ち上げます。

# 以下は ChatVRM-animate フォルダ直下で行う
npm install
npm run dev

localhost:3000 を開くとChatVRMの画面が開くはずです。

これで準備は完了です。
設定画面から先程のOpenAI APIキーとKoeiromap APIキーを入力したら、テキストに適当な文章を打ち込んでみましょう。

参考

  • ChatVRMを使用して、VRMAファイルからモデルを動かす処理

  • BVHファイルをVRMAファイルに変換する処理


この記事が気に入ったらサポートをしてみませんか?