動かざることバグの如し

近づきたいよ 君の理想に

イラストAIに受胎告知の宗教画を描いてもらう

受胎告知とは

西洋絵画における「受胎告知」とは、聖母マリアが天使ガブリエルからイエス・キリストを身ごもることを告げられる瞬間を描いた作品のことを指す。この場面は、キリスト教の聖書においても言及されており、聖母マリアイエス・キリストを生むことになるという神の啓示が与えられた瞬間を表現する。

この主題は、中世からルネサンス期にかけて、多くの芸術家たちによって描かれ、多くの名画が生まれた。また、受胎告知は、聖母マリアイエス・キリスト、天使ガブリエルなどの象徴的な要素を通して、宗教的なメッセージを伝えるとともに、美的な価値も持っている。

以上ChatGPTでした。

つまりこういう宗教画。向かって左が天使ガブリエルで右が聖母マリア

picture 2

せっかくイラストAIやってるんだし二次元の画風で受胎告知つくれるんじゃないのかとテストしてみた。

呪文を取得する

まずはopenai/CLIPをつかって上の絵画を文字に変換してもらう。

a painting of a woman sitting on a bench next to a man with a bird on his shoulder and a man with a bird on his lap, Fra Angelico, mannerism, renaissance oil painting, a painting

羽が付いてるのは認識できてるが天使ではなく鳥扱いされてるw

Stable Diffusion公式モデルで試す

宗教画といえばやっぱり公式モデルが強いんじゃないかということでStable Diffusion 1.5で生成して見た結果が以下。プロンプトはCLIPの出力に masterpiece, (best quality:1.2) をつけたもの

picture 1

ダメみたいですね。。。

二次元モデルで試す

やっぱDanbooru語なんだよなってことで以下のプロンプトをAnythingモデルで生成してみる。

masterpiece, (best quality:1.2), 2girls, multiple girls, eye contact, annunciation, angel, angel wings, short hair, sitting

picture 3

確かに綺麗だが、色々おかしい。

  • 二人に天使の羽がついてしまっている
  • 通常ガブリエルは左、マリアは右
  • ガブリエルだけショートにしてマリアは長髪にしたい

要は二人のキャラデザが混ざってしまっていて、構図配置もできていない。そこでRegional PrompterCutoff拡張機能を使う。

Regional Prompter使った場合のプロンプトは以下

2girls, (eye contact:1.1), annunciation, indoors,  ADDCOMM
masterpiece, (best quality:1.2) ADDBASE
1girl, angel, angel wings, wings, short hair, full body, standing,  ADDCOL
1girl, skirt, sitting chair, long hair, full body, 

1行目は全体のプロンプト、2行目は対象全てにかかるプロンプト、3,4行目はそれぞれ左のガブリエルとマリアのプロンプトである。

いざ生成

picture 4

ちゃんと左に羽の生えたガブリエル、右に座っているマリアの構図を取ることができた。

マリア赤い問題

マリアはやっぱり青のイメージが強いので「blue」はつけることに。

あと受胎告知といえば「白いユリ」がアトリビュートになることが多いらしいのでつけてみる。

で生成されたイラストが以下。若干手がおかしいが “テンプレート”により近づけたはず。

picture 6

(ユリ多すぎやろ)

latent upscalerであえてノイズ除去強度を0.4とかにすると印象派っぽくなる。

picture 9

2girlsなのでくっつきがち。 yiriをネガティブに入れちゃうとそれはそれで崩壊する。

とにかく構図。構図がガチャになる。やっぱ名作の構図はとても考えられているんだなぁ。みつを。

失敗作

ガブリエルに対して flying つけたら飛ぶかなと思って試してみたらなんか天使が分裂して二人がおっ始めてしまった。

picture 5

on_one_knee kneelingでいい感じにガブリエルがしゃがむかと思ったがバグりやすかったのでやめた

なんか3人め出てきた

picture 8

備考

すべての画像に対するネガティブプロンプトは以下

NG_DeepNegative_V1_75T,(low quality:1.4),(worst quality:1.4)

ImageMagickで背景をノイズにする

環境

やりたいこと

例えば以下のような背景が青色の画像があったとする

picture 1

それをこんな感じにしたい 背景色をノイズ一色にする。背景以外にはノイズは載せない。

picture 2

コマンド

1発ではできないので複数回のコマンドを実行する

# 1. 元の画像の青色の部分を透明にする
convert input.png -transparent blue transparent_input.png

# 2. Gaussianノイズを含む背景画像を生成する
convert -size $(identify -format "%wx%h" input.png) xc: +noise Gaussian noise.png

# 3. 透明な部分にGaussianノイズを合成して、最終的な画像を作成する
convert noise.png transparent_input.png -composite output.png

ノイズの種類を変えることもできる

convert -size $(identify -format "%wx%h" input.png) xc: +noise Random noise.png

picture 3

参考リンク

ImageMagickで上下左右自在に余白を追加する方法

環境

やりたいこと

ImageMagickで画像の上下左右に余白を追加したい

オプションとしては -gravityでできる。重力。。?と思うが実際に画像結果を見ると実感できると思う。

色々できるのが便利だが、結構クセが強い。

ここではサンプル画像の変換結果を記載していく

サンプル画像

512x512pxの画像

picture 10

northwest

convert input.png -gravity northwest -background blue -extent 612x612 output_northwest.png

picture 1

west

picture 2

southwest

picture 3

north

picture 4

center

picture 5

east

picture 6

southeast

picture 7

south

picture 8

  • 余白を付けるときのgravityオプションは、画像のどの方向に余白を追加するかを指定する機能。
  • -gravityオプションは、-extentオプションやその他のgeometry引数を取るオプションと一緒に使われる。
  • -extentオプションで指定したサイズに対して、-gravityオプションで指定した基準点に画像を配置する
  • -geometryオプションでオフセットを指定することで、余白の幅を調整できる

画像サイズは同じまま余白を付けたい場合

元画像と解像度を一致させたい場合はgravityではなくborderを使う。

convert input.png -gravity SouthEast -background blue -splice 100x100 -resize 512x512 output.png

一見分かりづらいが512x512pxのままである。

picture 11

検証シェルスクリプト

#!/bin/bash

image="input.png"

# 余白を追加する方向の配列
gravity=("northwest" "west" "southwest" "north" "center" "east" "southeast" "south")

# 画像の幅と高さを取得
width=$(identify -format "%w" "$image")
height=$(identify -format "%h" "$image")

# 余白の大きさ
margin=100

# 余白を追加した後の幅と高さ
new_width=$((width + margin))
new_height=$((height + margin))

# extentオプションの値
extent="${new_width}x${new_height}"

# 背景色
background="blue"

# forループで各方向に余白を追加する
for g in "${gravity[@]}"; do
  # 出力ファイル名
  output="output_${g}.png"
  # convertコマンドで画像変換
  # echo convert "$image" -gravity "$g" -background "$background" -extent "$extent" "$output"
  convert "$image" -gravity "$g" -background "$background" -extent "$extent" "$output"
done

参考リンク

指定したディレクトリ以下のnode_modules一発で全削除

背景

Mac移行とかするときnode_modulesがたくさんあるとめっちゃ遅くなる

npm installは移行してからやればいいので別になくてもいい。ってことで全削除したい

コマンド

find . -name 'node_modules' -type d -prune

ポイントは-prune 。-pruneオプションは、findコマンドが指定したディレクトリ以下を検索しないようにするオプションです。

いざ削除

find . -name 'node_modules' -type d -prune -delete

参考リンク