【備忘録】StableDiffusionからVtuberになるまで

目標をVtuberとして、StableDiffusionを触ってみたので、次また触るときのために、備忘録として残しておく。
ちなみに機材はもとからあったので、かかった金額は顔を撮影するアプリ代で、windowsなら600円、iphoneなら980円くらいでした。（僕は両方試してみました）

[アーカイブはこちら](https://www.youtube.com/live/hMhUCXmFi6U?si=DY_F_Tp2LH0rXRZM)（ValorantというかPCゲーが初心者なので温かい目で見てください）
声は入れてないです

# 動機
生成AIの話題が尽きない中、AIダンスの動画をYouTube等で見かけ、Vtuberオタクであることもあり、画像生成AIを触ってみようと思ったのがきっかけ

StableDiffusionを選んだのは特に深い意味はなく、MidjourneyだとDiscodeを使うらしいからなんか違うなと思ったのと、VMとかで動かせるようにしてWebアプリにカスタマイズしてもいいなと思ったから

あとは、転職先の先輩がちょうどStableDiffusionを業務で使っていてそのはなしを聞いたからというのもあります。

# 感想
画像が出来上がってから、Vtuberとして動かせるようにするまでは2時間くらいでできたけど、狙った画像を生成するのが難しかった。
今回はローカルのPCで動かしたため、生成している間PCが重くなったり、複雑な指定をすると、４枚生成するのに８時間かかったりして、時間がかかった。次やるときはGoogleColab試してみるかなあ

Vtuberとして動かしてみたところは全くこだわっていなかったから、動作がおかしかったり小さかったりした。一枚絵からだと横向いた時に見える部分がぼやけてた。


# StableDiffusionで画像を生成
狙った画像を生成するときの流れや使ったものをメモ程度に残す。
細かいやり方は書かないので気になる方はググってください。「StableDiffusion Vtuber」で検索すればいろいろ出てきます。

## 狙った画像を出力する
最初はプロンプトと使うモデルをどうするかを決めるため、Step20とかでどんどん生成してみる。
ポーズとか背景の切り抜きはあとで、ControllnetやScriptを使って行うため、さほど意識しなくていい。

１回で４枚とか生成するとばらつきがでて、選びやすいので、まだどんな顔にしたいかが決まっていなければ、１枚ずつじゃないほうが良いのかなと思いました。

ちょっと理想に近づいたら、その画像のSeedを反映させたり、img2imgにもっていって微調整 → Seed値反映 → 微調整の繰り返しで、狙った画像に近づけていきます。

プロンプトはもちろんCFG scaleとかを変えていくのもあり
ちなみに生成した画像は、.\stable-diffusion-webui\output の中にたまっていて、ここの画像をそのまま、Png Infoタブに入れれば、その時のプロンプトや設定がわかるので、いちいちメモ取らなくても大丈夫です。

## 構図を整える
正面を向かせたり、立ち絵にしたり、手が頭を触わらないようにしたりと、構図や姿勢を整えようとプロンプトを変えていくと全然思い通りにいかないため、OpenPoseを使ってしまうのが早いなと思いました。

それでもimg2imgで使ったりSeed値を入れたりすると、人物以外が鮮明に生成されたりして、それはそれでストレスでした。
なのでポーズが決まったら、ABG Removerをつかって透過し、それをimg2imgで鮮明化（この時OpnePoseは使わない） → InpaintやSeed値固定で顔を変える としてやっていきました。

あとは、ControlNetのreference_onlyを使って顔を合わせたりもしましたが、これもimg2imgと一緒で、OpenPoseと一緒に使うと、余計なものが鮮明になってしまったりしました。
なので同時には使わないほうがいいかもしれません

[OpnePose 参考](https://soroban.highreso.jp/article/article-073)
[AMG Remover 参考](https://romptn.com/article/10301)
[reference_only 参考](https://romptn.com/article/9555)

## Vtuberを想定した生成
画像を生成した後に、「Talking Head Anime 3」というAIを使用して、一枚絵を動かすのですが、
その時に推奨されている、画像の構成があるので、それに合わせて生成したほうが、きれいに動くらしいです。
僕は面倒だったので、一枚絵をそれっぽくトリミングして使いました。
[こちらのサイトでOpenPose用の画像を用意してくださってます。](https://note.com/maru0115/n/n594f5c5ee9c9)

## 生成したもの
最終的に動かした画像のプロンプトなどを残しておきます。

使わせていただいたモデルはこちら
[HimawariMix](https://civitai.com/models/131611/himawarimix)

あと、[EasyNegative](https://romptn.com/article/13258)を使用しています。
```
masterpiece, best quality, 1boy, solo, glasses,headphones, looking at viewer, closed mouth, white shirt , short sleeve shirt, simple backgroun, standing, black hair,full body,blue pants, black sneakers

Negative prompt: (worst quality, low quality:1.4), (bad_prompt_version2:0.8), EasyNegative, badhandv4, text, name, letters, watermark, unnatural fingers, -2 headphones, objects

Steps: 45, Sampler: DPM++ 2M Karras, CFG scale: 8, Seed: 462909952, Size: 1024x1536, Model hash: e12177c4b0, Model: himawarimix_v11, Denoising strength: 0.7, TI hashes: "easynegative: c74b4e810b03", Version: v1.8.0
```

![00026-462909952.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3125193/505c6f4c-3088-4bb8-2c0e-08cc415f15aa.png)

このプロンプトを見ていただくとわかるかもしれませんが、本当はヘッドホンをつけたかったのですが、うまく反映されませんでした。
上半身のみの時は反映されたのですが、全身にすると難しいみたいです。

全身を生成しようとしたときに、顔が汚くなってしまったので、Hires. fixを使いました。なのでSizeが1024x1536となっていますが、本来は512×786でやってます。
[立ち絵の参考](https://romptn.com/article/10301)

# 動かす
調べるとだいたい同じだけど、ちょっとやりかたが違う部分もあるかなとは思ったのですが、僕は「Talking Head Anime 3」をAnacondaで動かして、Microsoftの「iFacial Mocap」で連動させて動かしました。

参考
[[全部AIで]Vtuberに受肉してみた(前編)](https://tech-blog.cloud-config.jp/2023-08-24-vtuber-with-ai-first-part)
[AI生成した絵で爆速でVTuberになってみる](https://qiita.com/tana-as/items/af008013342c34fffdc0)

## Talking Head Anime 3
調べるとめっちゃプログラム書かれてたりしますが、その必要はありません。
[こちらを参考にしてみてください](https://qiita.com/tana-as/items/af008013342c34fffdc0#%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83%E3%81%AE%E7%94%A8%E6%84%8F)

Venvでも行けそうですが、Anacondaが楽でした。
モデルのダウンロードを忘れがちなので、気を付けてください。

## iFacial Mocap
まず買う。Windows版なら600円。iPhoneなら980円。（ちょっと違ったらごめん）
iPoneでやるとその分PCの負荷を減らせるし、Webカメラのスペック的にiPhoneのほうが良かったりするらしいです。
僕は両方試しましたが、ちゃんと比較してないので、よくわかってないです。
アーカイブは最初Webカメ、途中からiPhone（コメントしているとこ）でやってますが、動作が少ないのでわかりにくいかも

Windows版"は"、なのか分かりませんが、NVIDIA Broadcastが必要で、そのためにNVIDIAのドライバをアップデートしておかないと人の顔の出力が出てこないので、忘れずアップデートとインストールをしてください。
iPhone版ならいらないかもしれません

ちなみにiPhoneとPCを接続するのに何かが必要みたいなこともないです。
[iPhoneならこちらを参考](https://qiita.com/tana-as/items/af008013342c34fffdc0#%E5%8A%A0%E5%B7%A5%E3%81%97%E3%81%9F%E7%94%9F%E6%88%90%E7%B5%B5%E3%82%92%E3%82%A2%E3%83%90%E3%82%BF%E3%83%BC%E3%81%A8%E3%81%97%E3%81%A6%E5%8B%95%E3%81%8B%E3%81%99)
[こちらはwindows版で行っているけど、talking-head-animeのライブラリのインストールとかは無視していいと思います](https://tech-blog.cloud-config.jp/2023-08-24-vtuber-with-ai-first-part)
IPアドレスも127.0.0.1じゃなくて、デフォルトで動きました。

## OBSに取り込む
[こちらを参考](https://qiita.com/tana-as/items/af008013342c34fffdc0#obs%E3%81%AB%E5%8F%96%E3%82%8A%E8%BE%BC%E3%82%80)

# おわり
とりあえず触ってみたかったところまでできたので満足
次やるならもうちょっとVtuberっぽい、遊びのある画像にして、１枚絵じゃなくてレイヤーとか(?)を整えて、動作もそれっぽくしてみたいですね
そこまでをAIで一通りできるアプリとかにしちゃったらいいんだろうけど、サービス化しようとすると、VMの料金が馬鹿にならなそうだから要検討

一旦StableDiffusionは終わりにして、ChatGPT APIとかを触ってみつつAzureの勉強しようと思います。