見出し画像

ウォーターマーク消すスクリプト - Stable DiffusionとPythonの画像処理と自動化(3)


Stable Diffusion で画像作って映像までもっていこうとすると、署名みたいな?署名そのものなの?ともかくわけわからん文字が入った画像ができちゃったりして、ああああああ、ってなっちゃったりしてた人、僕だけ?

Stable Diffusion の Hires. fix で文字が混入

txt2img で、だいたいこんなプロンプトでできた絵でいいかなー、的な感じになって後から Hires. fix 動かしたら、左上に文字が入った・・・Hires. fix しなかったら入らないのに。。。

左上に、なんかよくわからない文字が

Upscaler 変えればいいんじゃない?
いやいや、変えたくないし、なんなら変えても入るし、そもそも絵が変わってしまうってば。
おまえ、サングラスしてんじゃねえよ。

Upscaler 変えてみた

最初は、プロンプトがわるいのかな?と思って試すと、そもそもプロンプトが変わるから、いいなーと思った絵が変わってしまう。
そもそも、どんだけプロンプトいじっても、Hires. fix の過程で入るから、どうにもできんのですよ。

ともかく、できた絵はいいのに、この変な文字だけが消えてしまえばいいのよおおおおって、なりません?

結論から言うと、Stable Diffusion の Pipeline 的なことで Inpaint のモデルを使ってこういう文字を消しちゃう Python のコード書いて消したんですよ。
比較しやすいように、この記事のトップ画像に並べておきましたが、再掲します。

左上がきれいになりました
きれいに消えた

GIMP で輝度の差分とってみました ( 画像処理してる人はよくやるよね )
それぞれの画像、同じプロンプト、同じ Seed 、同じ設定で再生成したせいか全体的に少し輝度の差はあるけど、明らかに左上の差は大きい。

輝度の差

なんなら DoG ( Difference of Gaussian ) を出してみよう。

DoG

画像から特徴抽出してたら絶対引っかかっちゃうやつよね。

みんな、こういうのってどうやって消してるの?
いや、Seed 変えて img2img の Inpaint で消せる?プロンプトで消せる?
ちょっとしか試してないけど、消えないってば。
方法あったら教えてください。お願いします。

note を検索してみたらこんな記事がありました。ためしてないけど。

僕はエンジニアであって、イラストレーターではないので、うまいように消すスキルは持ってないのですよ。Photoshop とか Illustrator とか、GIMP くらいは使えるけど、Adobe のサブスクリプションは高いし、GIMP でもうまくきれいに消せないし、そもそも画像を Stable Diffusion の API 叩いて大量生産したいときにやってられません。

僕の理解が足りてないだけかもしれないけど、生成 AI が生成した画像の署名とか透かしって、いわゆる電子署名じゃないすよね?
きっと、モデルが学習する過程で学習画像に入っちゃってたからそれも学習しちゃって、生成 AI から画像が生成されるときにうっかり出しちゃうようなもの、って理解でいいのでしょうか。
だって、特定のモデルが権利主張したくて入れてるなら、毎回入るはずよね。

よくこのあたりの事情わかんないけど、ともかく消したいものは消したいので、消します。すいません、消してダメなものならダメだよ!って教えて下さい。

Stable Diffusion のスクリプト作った

本題。
Python でコード書いたから、いっそ Stable Diffusion のスクリプトにしちゃえって思っちゃいました。そして作っちゃいました。

Meganex SD Helper スクリプト

画像中のわけわかんない文字が入っているあたりを、画像サイズを 1.0 として X/Y それぞれ開始-終了の位置を 0 から 1 の値で 0.1-0.2 みたいな感じで指定して矩形領域を指定します。
うしろに px とつければピクセル単位でも指定できます。
この領域に指定したモデルで Inpaint して消してくれます。

ついでに上に、すべての画像生成処理が終わったあとのリサイズをする機能もいれてみました。こんなのみんな必要なのかわかんないけど。
そもそも画像のリサイズなんか、Stable Diffusion で普通にできそうなもんだけど、というか、Denoising strength を 0 にしたら Hires. fix でできそうなもんですよね。
ともかく、何もかも終わった後にリサイズがしたかったんです。

ここで 1 曲、きいてください。

ありがとうございました。
とりあえず、GitHub に入れて、僕は自分の環境に入れました。

女の子の T シャツの文字

ためしに、女の子の T シャツに入ったテキストとか、消せるのかな?

女の子
ピクセルで範囲を指定。座標で言うと ( 180, 220 ) - ( 300, 315 ) の矩形領域
女の子の T シャツの文字を消してみた

おお、、消えた、、
お胸のふくらみの強調はちょっとおとなしくなっちゃったけど。

これ、X と Y 座標の範囲じゃなくて、矩形の左上と右下の座標でよくない?
と思いますよね。僕もちょっと、なんなら結構思います。

でも、ウォーターマークみたいなのって、上のあたりとか下のあたりとか、ともかく隅にできますよね。で、僕は最終的に映像に展開するから、画像を横とか縦とか、なんなら特定の斜め方向とかに Deforum させたりするんですよ。
そうすると、座標にしたら、座標をいちいち計算しなきゃいけなくなるんですね。
まあすればいいんですが、軸方向の範囲を指定するようなやり方のほうが楽だったんです。
ともかくそうだったんです。
あと、プログラミングによる編集過程で、画像をリサイズするんで、その時は比率の方がいいし。
細かい説明もっとできるけど、まあともかくこれでいいんです。

みなさんのご利用は自己責任で。
将来うっかりバグいれたらすんません。アップデートは慎重にどうぞ。

GitHub

おまちかね?こちらが GitHub になります。
Stable Diffusion へのインストールの仕方とか、みんな知ってますよね。
Extensions の Install from URL からどうぞ。

くれぐれも、ご利用は自己責任で。


この記事が気に入ったらサポートをしてみませんか?