3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita×Findy記事投稿キャンペーン 「自分のエンジニアとしてのキャリアを振り返ろう!」

VMagicMirrorに命を吹き込む Pythonと Style-Bert-VITS2で リアルタイム感情表現

Last updated at Posted at 2024-02-11

このチュートリアルでは、Pythonを使用してVMagicMirrorにモーションを付与する方法を説明します。VMagicMirrorは、キーボード入力とモーションを連動させることができるソフトウェアです。このプロセスでは、感情分析を行い、音声ファイルを生成し、それに基づいてキーボード入力を通じてモデルのモーションを制御します。

構成図

スクリプトの準備

前回同様にChatGPT4で生成します。
今回は感情表現を行うため、それを踏まえてChatGPT4に生成してもらいます

ChatGPT:

了解しました。以下のようにニューススクリプトの各文にモーションを割り当て、丸で区切ります。

  1. "みなさん、こんにちは!ニュースタイムです。"
    • モーション: joy (喜び)。
  2. "本日は、大規模言語モデル(エルエルエム)の最新の進展についてお伝えします。"
    • モーション: nodding (うなずき)。
  3. "「モア エージェント イズ オール ユー ニード」という論文がこの分野に新たな光を投げかけています。"
    • モーション: good (良い)。
  4. "この研究は、ジュンヨウ リ、チン ザン、ヤンビン ユウ、チアン フ、デヘン イェによって執筆され、"
    • モーション: nodding (うなずき)。
  5. "大規模言語モデルの性能は、単純なサンプリングと投票方法を用いることで、"
    • モーション: nodding (うなずき)。
  6. "生成されるエージェントの数に比例して向上することを発見しました。"
    • モーション: joy (喜び)。
  7. "驚くべきことに、この方法は既存の複雑な手法と併用してエルエルエムをさらに強化でき、"
    • モーション: good (良い)。
  8. "その効果はタスクの難易度に関連しています。"
    • モーション: nodding (うなずき)。
  9. "研究チームは、エルエルエムのベンチマークにわたる広範な実験を行い、"
    • モーション: good (良い)。
  10. "この発見の実証と、その発生を促進する特性の研究を行いました。"
    • モーション: nodding (うなずき)。
  11. "結果は、タスクの難易度が高まるにつれて、エージェントの数を増やすことの効果が顕著になることを示しています。"
    • モーション: joy (喜び)。
  12. "この興味深い研究についてもっと知りたい方は、論文のコードが公開されています。"
    • モーション: wave (手を振る)。
  13. "オンラインで詳細を確認し、この分野の最前線に触れてみてください。"
    • モーション: nodding (うなずき)。
  14. "大規模言語モデルの可能性はまだまだ拡がりを見せています。"
    • モーション: good (良い)。
  15. "今日のニュースでした。引き続き、最新の科学技術ニュースにご注目ください。"
    • モーション: wave (手を振る)。
  16. "それでは、またお会いしましょう!"
    • モーション: clap (拍手)。

音声ファイルの準備

こちら記事を参考に上記のスクリプトを生成します

Pythonスクリプト

必要なライブラリのインストール

まず、このプロジェクトに必要なPythonライブラリをインストールします。PyAutoGUIpygameが必要です。これらはそれぞれ、自動的にキーボード入力を行うためと、音声ファイルを再生するために使用されます。

pip install pyautogui pygame

ディレクトリ構造の準備

audio/Word2Motionディレクトリを作成し、そこにBert-VITS2を使用して生成した感情を含む音声ファイル(.wav形式)を配置します。ファイル名には、感情の情報が含まれている必要があります(例: 001_joy.wav)。

file

コードの解説

ライブラリのインポート

import os
import re
import pyautogui
from pygame import mixer

これらのライブラリをインポートすることで、ファイル操作、正規表現の使用、自動キーボード操作、音声ファイルの再生が可能になります。

ファイル一覧の取得

folder_path = 'audio/Word2Motion'
files = [file for file in os.listdir(folder_path) if file.endswith('.wav')]

指定されたディレクトリ内の.wavファイル一覧を取得します。

感情とキーボード入力の対応付け

emotion_to_number = {
    "reset": 0,
    "joy": 1,
    "angry": 2,
    "sorrow": 3,
    "fun": 4,
    "wave": 5,
    "good": 6,
    "nodding": 7,
    "shaking": 8,
    "clap": 9
}

この辞書を使用して、感情とVMagicMirrorに設定したキーボードショートカットとの対応付けを行います。

ファイルのソート

sorted_files = sorted(files, key=lambda file: int(re.search(r'\d+', file).group()))

ファイル名に含まれる数字を基に、ファイルをソートします。

音声ファイルの再生とキーボード入力

mixer.init()

for file in sorted_files:
    file_path = os.path.join(folder_path, file)
    emotion = file.split('_')[-1].split('.')[0]
    print(f"再生中: {file} - 感情: {emotion} [{emotion_to_number[emotion]}]")
    
    pyautogui.typewrite(str(emotion_to_number[emotion]))
    
    mixer.music.load(file_path)
    mixer.music.play()
    
    while mixer.music.get_busy():
        continue
  • mixer.init(): pygameのmixerモジュールを初期化します。
  • ループ内で、各ファイルに対して、ファイルのフルパスを取得し、ファイル名から感情を抽出します。
  • 抽出した感情に基づき、対応するキーボード入力をpyautoguiを使用して自動で行います。
  • mixer.music.load(file_path)mixer.music.play()を使用して、ファイルを再生します。
  • while mixer.music.get_busy(): continueは、再生が完了するまで待つためのコードです。

VMagicMirrorの設定

VMagicMirror上で、上記のキーボード入力に応じて動作するモーションを設定してください。この設定はVMagicMirrorのドキュメントや設定画面から行えます。

file

デモ動画

まとめ

これらのステップに従って、Pythonスクリプトを使用してVMagicMirrorにモーションを付与し、音声に合わせてリップシンクしながら動作させることができます。

リポジトリ

3
2
0

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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?