【Diffusers】Multi-ControlNetで人物をきれいに描く

SDXL版はこちら

はじめに

前回の進化版です。
touch-sp.hatenablog.com
手をきれいに描くためにはcanny2imageでのエッジ検出の閾値を低く設定する必要がありました。



そうするとその他の部分も忠実に元画像が再現されてしまうので似たような画像が大量にできていしまいます。

一方scribble2imageを使うとある程度バラエティに富んだ画像ができますが手がきれいに描がけませんでした。



今回はMulti-ControlNetで「いいとこどり」をしてみます。

元画像


元画像はぱくたそから使わせて頂きました。
こちらの画像です。

方法

canny2image用の画像とscribble2image用の画像の作成

canny2image用の画像を作る方法はこちら

scribble2image用の画像を作る方法はこちら

マスク画像の作成

以下のようなマスク画像を作成します。



簡単に作成するためにPythonスクリプトを書きました。
こちらです→「multiple_square_mask.py

python multiple_square_mask.py --image canny.png

マウスで囲ってスペースキーを押していくだけです。


マスク画像の適応

canny2image用の画像とscribble2image用の画像に対してマスク画像を適用させます。



左二つの画像から右の画像を作成しました。

簡単に作成するためにPythonスクリプトを書きました。
こちらです→「apply_mask.py

python apply_mask.py --mask canny_mask.png --image canny.png --reverse
python apply_mask.py --mask canny_mask.png --image scribble.png

Multi-ControlNetの実行

簡単に実行するためにPythonスクリプトを書きました。
こちらです→「multi_controlnet.py

このように実行します。

python multi_controlnet.py ^
  --model model\anything-v4.0 ^
  --vae vae\anime2_vae ^
  --controlnet controlnet\sd-controlnet-canny controlnet\sd-controlnet-scribble ^
  --image mask_canny.png mask_scribble.png ^
  --prompt prompt.txt ^
  --n_samples 10



以下を記入した「prompt.txt」というテキストファイルを用意してスクリプトから読み込んでいます。

a beautiful girl wearing high neck sweater

結果