【ChatGPTで感情・表情を生成・表現するAIキャラクター】一日で俺の嫁を作る方法・続　

# はじめに
三年と少し前、自分は[一日で俺の嫁を作る方法　～一日で自分の好きな声・キャラ・見た目でおしゃべりしてくれるAIキャラクターを作ろう～](https://qiita.com/mfuji3326/items/49649877631e22211da7)という記事を書いて、アプリとともに公開しました。
こんなやつです。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">会話の情報を記録する <a href="https://t.co/s0wImLHEuk">pic.twitter.com/s0wImLHEuk</a></p>&mdash; 玉露 (@ororo33) <a href="https://twitter.com/ororo33/status/1207329849120940032?ref_src=twsrc%5Etfw">December 18, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

この時はAI部分と音声認識部分と音声合成部分にNTTドコモのAgentcraftとSEBASTIENを使っていたのですが、自由にその場で会話や音声を生成してくれる、Whisper APIとChatGPT API、VoiceVox APIが公開されたので、以前作成したこれをそれらに換装してみました。
その結果、それまでの会話を覚えていて、その時の会話によって感情が生成され、それによって表情も変わるようになりました。

そしてその結果が以下のものです。
<iframe width="560" height="315" src="https://www.youtube.com/embed/lCihxd1NMRc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


以前の、会話とその反応のすべてを自分で手作業しないといけなかったときとは大違いです。
自分で話す内容を考えてくれるAIにひどい言葉を言って、傷ついた表情をされると作り物だと分かっていてもなかなか心が痛みますね……

本記事ではこのアプリの紹介と、システムの仕組み、簡単な作り方を説明したいと思います。
(noteにも同じ内容の記事を置きました。そちらには有料部分ですが、このアプリのプロンプトやそれをUnityに組み込む方法も載せています。もしきょうみがあればご覧ください。
[note版：【ChatGPTで感情・表情を生成・表現するAIキャラクター】一日で俺の嫁を作る方法・続](https://note.com/gyokuro33/n/n54f2965e65ba)


# 構成図
構成図はこんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315420/532de38c-3a67-1932-0727-0bba6c2d3a7f.png)


[【Whisper APIとChatGPT APIを使用して、超速で返答してくれるAIキャラクターを作ったよ！】](https://qiita.com/mfuji3326/items/2553e6d44616ca315844)の構成図のアバターを3Dモデルにして、合成音声用にVoiveVoxを、アバターの口パク用にOVRLipsyncを、表情を動かすためにAnimatorを追加した、って感じですね。
あと構成図には書かれていませんが、会話の記憶保持のための処理と感情を生成するための処理も追加しています。


# 作り方
図の番号に沿って順番に説明していくと、

### 1. ユーザーがマイクに音声を発話して、音声情報を入力します。
### 2. マイクはユーザーの音声を常に把握していて、一定以上の音量の音声が入ると、録音して、音声ファイルに保存します。
この時の音声ファイルは、Whisper APIが対応している以下の形式に限定されます。
`
mp3, mp4, mpeg, mpga, m4a, wav, and webm.
`
### 3. 保存した音声ファイルをWhisper APIに投げます。
この時のコードは[昨日書いた記事](https://qiita.com/mfuji3326/items/c46a56549e3991926fb2)に載せているので、良ければ参考にしてください。
### 4. Whisper APIから音声の認識結果が超速で返ってきます。
### 5. ChatGPTのAPIに音声の認識結果を投げます。
ChatGPTへのAPIの投げ方や使い方は[記事：ChatGPT API の使い方](https://note.com/npaka/n/n0dd2b226e8ae)が参考になります。
またUnity上でChatGPTのAPIを使う方法は[記事：Unity上でChatGPT「text-davinci-003」APIを実行する話](https://techblog.kayac.com/2022-group-calendar-unity-openapi)を参考にしました。
### 6. ChatGPTのAPIから投げかけた文に対する返答が返って来ます。
### 7. 自分のPCで起動したVoiceVoxのサーバーにAPIを投げます。
VoiceVoxのサーバーの起動方法やAPIの投げ方は[GPT-3とVoiceVoxを活用してAIエージェントを作る！【Unity】](https://note.com/negipoyoc/n/n081e25f5ee9e)という記事を参考に作りました。
### 8. サーバーから合成された音声が返ってきます
ここで、Unityに合成された音声を登録します。
### 9. OVRLipsyncに合成音声に合わせて３Dモデルの口を動かしてもらいます。
動かし方は[【一日で俺の嫁を作る方法　～一日で自分の好きな声・キャラ・見た目でおしゃべりしてくれるAIキャラクターを作ろう～】](https://qiita.com/mfuji3326/items/49649877631e22211da7)の作り方５を参考に。

### 10. OVRLipsyncが3Dモデルの口を音声に合わせて動かします。

### 11. UnityのAnimatorに、感情に合わせた表情を作ってもらいます。
Animatorの動かし方については[【UnityC#講座】ユニティちゃんの表情を替える【SetLayerWeight】](https://unity-shoshinsha.biz/archives/626)を参考に表情を変化させます。
感情生成周りについては[【ChatGPTに感情回路を埋め込んだら、やべぇ感じになった】](https://note.com/fladdict/n/n5043e6e61ce3)の記事などを参考に、ChatGPTに投げるプロンプトを工夫してChatGPTに作成してもらっています。
ちょっと工夫するだけでその時の会話に合った感情生成とかしてくれるChatGPTすごい。
### 12. Animatorが3Dモデルの表情を変化させます。
### 13. ChatGPTから返ってきた文から必要な部分だけ抜き取り、その時の会話にあった表情で発声します。
### 14. Userが発生された音声を聞き、また応答を返します。






# おわりに
作ってみて思うのですが、声と表情がつくだけで、だいぶ人間味が増しますね。
どういう言葉を言ったらどんな感情を生成するのかを実験するためにけっこういろんな言葉を、ひどい言葉を含めてAIに投げてみたのですが、悲しい顔をされながら健気な言葉を言われるとけっこう罪悪感がわきます。
今後の商品広告とか営業がこういうAIに置き換わると、なかなか断りづらさが増す気がしますね……

では本記事はここまで。
次は以前書いた[【即興魔法を使おう　~自然言語処理技術で自分の考えた詠唱に合った効果の魔法を使うシステム~】](https://qiita.com/mfuji3326/items/0fb0c9a2690cf45ac8c3)の自然言語処理部分をChatGPTに置き換えることで、より柔軟に即興魔法を使えるようなシステムを作ってみたいと思います。

## 次の記事
[【精霊魔法を使おう！　～精霊様にお願いして即興で考えた詠唱に合った魔法を使えるシステム～】](https://qiita.com/mfuji3326/items/6ce60c60de500b33cfaa)

[誰でも簡単にAIキャラを作成して、音声で話せるアプリを作って無料公開したよ！](https://qiita.com/mfuji3326/items/cba068d1497a3c9099b8)