記事一覧
Unity+Whisper+OpenAI+VOICEVOXのセットアップ
Unityを使ってAIキャラクターと対話するプロジェクトを作る際の準備について自分備忘録としてメモしました。
VRM最新バージョン(2024.8.19現在)の仕様が変わったため、uLipSyncなどのライブラリを入れる順番に気を付ける必要が出てきました。
具体的なコードについては参考部分をリンクしました。
準備1.PackageManagerから「Burst」をインポートする
2.VRM0.x
uLipSyncをTimelineで使う&音声ファイルから口パクアニメーションを自動で作る
uLipSyncをTimelineで使う際にハマったことがあったので、忘れないようにメモしました。
VRM0.xを使う場合、Githubのページからダウンロードしたパッケージをインポートすると、「uLipSync BlendShape VRM」がエラーになっていて使えない場合があります。その回避方法も含めてメモしています。
(これはuLipSyncが悪いのではなく、Unityの仕様だそうです)
Quest3で疑似フルトラモーキャプする(上半身+手キャプチャ、下半身機械学習での動作)
こんな感じになります。
準備こちらを参考にさせて頂きました。SDKのバージョンが違うので諸所異なっています。
1.2021以降でプロジェクトを作成し、以下をインポートする
2.Build SettingsでプラットフォームをAndroidにSwitchする
3.「Oculus」→「Tools」→「Project Setup Tool」を選択して、FixAllやApllyを押して赤い警告マーク
GPT-4oとFunction callingをUnityで動かす
今さらですが、ようやくFunction callingをUnityで使う方法が分かったので、忘れないうちにメモをしておきます。
これはLLMから関数を実行するもので、そこに処理を書いておけば特定の処理を呼び出して実行することができます。
例えば以下のようなことができます。
・「写真を撮って」がトリガー→写真(スクリーンショット)を撮る
・「前へ進んで」がトリガー→オブジェクトを前方に移動させる
・
非公式クライアントライブラリClaudiaを使って、Claude3とFunction CallingをUnityで動かす
Claude3をUnityで動かすにあたり、ChatGPTのAPIと同じくUnityWebRequestでAPIを呼び出して対話することもできるのですが、今回はLLMの出力から関数を呼び出すFunction Callingも簡単に実装できる非公式ライブラリ「Claudia」を使ってUnityで対話します。またFunction Callingも実装していきます。
非公式と言ってもUniTaskを作っ
rinnaのKoeiromap API(v1.0)を使ってUnityでテキスト読み上げをする
AIキャラクターの実装にあたって、Style-Bert-VITS2を使ってテキストの読み上げをしていたのですが、Quest3+PCで動かしたときに(おそらく)VRAMが足りずQuest3の画面に黒いブロックノイズが乗ってしまいました。
動作もかなり重く遅くなっていたので、別の読み上げ手段を探していたところ、rinnaのKoeiromap APIを使うことにしました。
サーバ上で処理をしているWhi
Modular avatarで着替えさせたVRCアバターをVRMにする
Modular avatarで着替えさせたVRCアバターをVRM Converter for VRChatを使ってVRMにしたとき、(おそらく)BlendShapeが暴走してメッシュがおかしくなることがあります。顔のメッシュもおかしいので、SpringBoneが原因とは一眼には言えない気がします。
これはおま環か特定のアバターか原因が分かりませんが、正常に書き出す方法をメモしておきます。
準備1
Whisper+Unityでマイクの音量によって音声の書き起こしを行う
WhisperとUnityを使って音声の書き起こしを行います。ボタンを押してマイクに話すと書き起こしが動作するという安全策を多くは取りますが、いちいちボタンを押すのが煩わしい場合があります。
そこでここでは音量をトリガーにして、マイクの音量が特定の範囲内であれば書き起こしを行うようにします。
どうやっても上手くいかなかったので、こちらのライブラリを参考にさせて頂きました。ありがとうございます。
GPT-4oをUnityで動かす
OpenAIから新しいモデル「GPT-4o」が出ました。文章生成・音声・画像すべての能力がアップされているそうなので、テキスト生成・画像解析を一通りUnityでやってみることにします。
基本的なコードはこちらを参考にさせて頂きました。ありがとうございます。
準備1.以下からUniTaskをダウンロードし、インポートする
2.UIのInputField、Button、Textを作成する
3.J
Unityを使ってChatGPTとテキスト対話する
シンプルにUnityのInputFieldに質問したいテキストを入力し、ボタンを押したらChatGPTが返答してくれるというものを作ります。
いちばんのベースになるものですが、忘れてしまうこともあるので個人的メモです。
なおコードの作成にあたり、下記を参考にさせて頂いています。ありがとうございます。
準備1.以下からUniTaskをダウンロードし、インポートする
2.UIのInputField
Whisper+ChatGPT+Style-Bert-VITS2でUnityを使ってAIと会話する
Whisper+ChatGPT+Style-Bert-VITS2を使って、以下ができるようにするメモです。
1.Whisperで音声認識する
2.1.で音声認識したものをChatGPTに送って返答が返ってくる
3.返答をStyle-Bert-VITS2で読み上げさせ、同時に口パクさせる
といったものです。2.の時点で感情表現も返すようにChatGPTに指示をしているので、それを使えば表情やアニメー
Unityでランダムにアニメーションを再生する
※他の状態に遷移したときにアニメーションの再生が終わらないと遷移が開始されないというトラブルがあったので、それを解消したバージョンを追記しました。
受容がありそうでなかなか情報がなかったのでメモしました。
こちらを参考にさせて頂きましたが、Unityの仕様が2024年現在とは異なるため、一部修正が必要でした。
今回の仕様は拡張しやすくするため、以下のようにしました。
1.Playボタンを押すと
Style-Bert-VITS2の読み上げをUnityで使う(補足あり)
Style-Bert-VITS2のAPIにHTTPリクエストを送信し、生成された読み上げ用サウンドファイルをUnityで再生します。
・Style-Bert-VITS2のダウンロード
・ローカルセットアップ
・モデルインポート
はすでにできているとします。
Style-Bert-VITS2のAPIでの読み上げは100文字が限界ですが、AIキャラクターとのやり取りの場合は100文字がちょうどいい
PythonでOpenAIを使って対話する
APIが新しくなり、以前のよくある「openai.Completion.create」が使えなくなっているので、改めてメモしました。
一応OpenAIのクイックスタートガイドに例が載っていますが、返答だけ取り出す方法が書かれていなかったので、それを追記しています。
ロールの指定の方法などは以前と変わりませんが、「openai.Completion.create」が使えないのと本文取り出しの方法だけ
OpenAIの読み上げ機能を使って、音声を書き出すアプリを作りPowerPointで使う
OpenAIが少し前に出した読み上げ機能を使って、テキストを音声ファイル(.mp3)に書き出す方法をメモしました。Unityなどでテキストをすぐに読み上げるようにするには工夫が必要ですが、所用でファイルにしてPowerPointに埋め込む必要があったので、ひとまずこの方法で行います。
なおこの内容は2024年2月22日時点のものです。
準備1.Python 3.11.7をインストールする
2.
uOSCでInputFieldからIPアドレスを入力する
ローカル通信をUnityアプリで行う場合、uOSCを使うことが多いですが、IPアドレスがインスペクタから入力するようになっています。
ライブラリそのものに手を入れても良いのですが少し怖いので、別途IPアドレスを上書きする方法を取ることにしました。
uOSCのインポート下記からuOSCのUnityパッケージをダウンロードし、インポートします。
PCアプリでのIPアドレス入力1.自分のプロジェクト