はじめに
Google Colabo環境でStable Diffusionを使うメモ(N番煎じ)。
呪文にもノウハウがあるらしい。以下のページが参考になった。
Hugging Faceのトークンを発行
アクセストークンを発行する必要があります。以下の記事を参考にアクセストークンを発行してメモする。
Stable DiffusionのコードやドキュメントはAI関連コミュニティサイト「Hugging Face」で公開されており、自分で構築した環境でStable Diffusionを用いるにはHugging Faceのアカウントを作成してトークンを発行する必要があります。
CompVis/stable-diffusion-v1-4 · Hugging Face https://huggingface.co/CompVis/stable-diffusion-v1-4
参考:画像生成AI「Stable Diffusion」をスペックPCでも無料かつ待ち時間なしで使う方法まとめ、
Stable Diffusionのインストール
pip install diffusers==0.2.4 transformers scipy ftfy
Google Colabの設定確認
ランタイム→ランタイムのタイプを変更→ハードウェアアクセラレータがGPUになっていることを確認する。
アクセストークンの入力
メモしておいてアクセストークンを記載します。このアクセストークンで認証して各種ファイルをダウンロード。
YOUR_TOKEN="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
各種ファイルのダウンロード
数分かかる。
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=YOUR_TOKEN)
pipe.to("cuda")
Drive のマウント
from google.colab import drive
drive.mount('/content/drive')
任意のフォルダに移動する
%cd /content/drive/MyDrive/Colab\ Notebooks/StableDiffusion/
%pwd
import os
path = os.getcwd()
Stable Diffusionで画像を生成
以下のコマンドを実行すればOK。「指示」の部分には生成して欲しい画像の説明を英語で入力し、「ファイル名」の部分には生成する画像を保存する際の名前を入力する。
(画像を保存する際はDriveにマウントしてDrive上に保存、もしくは生成したファイルを個別にダウンロードしてください。)
prompt = "指示"
image = pipe(prompt)["sample"][0]
image.save(f"ファイル名.png")
import matplotlib.pyplot as plt
from glob import glob
import cv2
def show_images_glob(images, figsize=(20,10), columns = 5):
plt.figure(figsize=figsize)
for i, image in enumerate(images):
plt.subplot(len(images) / columns + 1, columns, i + 1)
img = cv2.cvtColor(cv2.imread(image), cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.axis("off")
呪文を設定する。
今回はあるキーワードのロゴを、たくさん作ってみた時の例。
keyword * painting_style * repNum の回数だけ画像を作ってみた。
from IPython.display import Image
def logo_make(keyword1,painting_style):
prompt = "Logo about " + keyword1 + "by " + painting_style + ",no background"
image = pipe(prompt)["sample"][0]
return image;
keyword = ['Development Club','Challenge','TC']
painting_style = ['Eichiro Oda in One Piece style' ,\
'Akira Toriyama in DQ style' ,\
'Disney style' ,\
'Hokusai style' ,\
'Hayao Miyazaki in Tonarino Totoro style',\
'Takehiko Inoue in SLAM DUNK style',\
'Kazuo Umezu style' ,\
'Shigeru Mizuki style' ,\
'Yudetamago in Kinnikuman style' ,\
]
repNum = 5
for kwd in keyword:
kwd_dir = kwd.replace(' ', '_')
os.makedirs(kwd_dir,exist_ok=True)
for pntstl in painting_style:
fname_base = (kwd_dir + '/' + pntstl).replace(' ', '_')
for i_rep in range(repNum):
# Make Logo
image = logo_make(kwd,pntstl)
# display(image)
# Save Image
fname = fname_base + '_' + str(i_rep) + '.png'
fname = fname.replace(' ', '_')
print(fname)
image.save(fname)
del image
1枚の画像を作るのに30秒程度かかる。
画像を表示する
for kwd in keyword:
kwd_dir = kwd.replace(' ', '_')
os.makedirs(kwd_dir,exist_ok=True)
for pntstl in painting_style:
fname_base = (kwd_dir + '/' + pntstl).replace(' ', '_')
FILE_PATTERN = fname_base + '*.png' #ワイルドカードでフィルタリング
images = glob(os.path.join(FILE_PATTERN))
print(kwd + ' + ' + pntstl)
show_images_glob(images)
下は一例(たしか”Challenge” のキーワードのはず)。
いい感じにパチモンっぽい。特に、鳥山明風や井上雄彦風が…。北斎風はそれっぽく北斎に寄ってる。
最後に
流行っているからやってみたが、簡単なロゴやアイコンはこれで作れそう。Stable Diffusionを使ってどう遊ぶか考えたい。