最近はやりのAIが自動で画像を生成するプログラミングを行いましたので、使用方法について紹介します。今回はGoogle ColaboratoryとStable Diffusionを使用してイラストを作る方法を紹介します。Google colabの設定から画像生成まで30分程度でできるため非常に簡単です。今回は文章から画像を生成するtxt2imgの内容を紹介します。
AIがイラストを生成してくれるってニュースになっていたけど??無理だよね?
Google Colabを使えば簡単にできるよ。最近はStable Diffusionというソフトがオープンソース化されたから、これを使うと簡単にイラストや写真、サムネイルなどを作ることができるよ。
寝ている間にいろいろできてたら最高だな。。。最近ブログとかYouTubeの画像の準備が面倒だから、若干滞っている。。。
確かに画像が自動で朝できていたら、いいね。では実際に設定から画像生成までやってみよう。
【記事の対象者】
・自動で画像生成をしたいプログラミング初心者
・Stable Diffusionを使ってどんなものができるか勉強したい
・画像を作ることを仕事にしている人
・Google Colabの設定を知りたい人
この記事を見ると、こんなのが自動で生成できるようになります。


AIで画像生成を行う事前準備(大体30分)
Hugging faceでアクセストークンの取得
Stable Diffusionを使用するためには、Hugginig faceというライブラリの開発や人工知能のコミュニティを運営している企業にSign inする必要があります。下記サイトに入りSign inしてください。
Sign inを選択したら下記画面で、Email AddressとPasswordを記入してください。Nextを選択すると、プロフィール画面が出るのでユーザネーム・フルネームを記入します。規約に同意するをクリックして、Create Accountを選択してリンクをクリックすると登録完了です。


登録したら、Hugging FaceでSign inした状態になるので、右上のアイコンを選択して、Settingsを選択します。また、下記メールが届きますので、リンクに入ります。

次にアクセストークンを取得するために右上のアイコンからSettingsを選択します。

左のサイドバーのAccess Tokensを選択してNew tokenを発行します。このニュートークンをGoogleコラボのプログラムで使用するため保存してください。

New Tokenを押したら、Nameを記入して、Generate a Tokenを選択します。

Tokenが表示されたら、プログラム時に使用するため、コピーしておきます。

Google Colaboratoryの設定
Google Colaboratoryとはブラウザを使用して、Pythonのプログラミングを環境構築不要で行うことができます。ローカルで行うと、Anacondaのインストール・Pythonの設定など複雑な作業があり、断念してしまう人もいるかもしれません。これを使えば、Google アカウントさえあれば、いきなりプログラミングを行うことができます。また、ブラウザを通して、GPUも基本は無料で使うことができるので、高性能なPCがなくても、機械学習などを行うことができます。なので、プログラミング初心者の方にはおすすめです。
画像生成プログラム作成
はじめにGoogleコラボの初期画面として下記画面が表示されます。ファイルの新規作成を選択するとJupyter notebookの画面が表示されます。

またGPUを使用するため、ランタイムのタイプを変更を選択し、GPUを選択します。

Google Driveをマウントするために下記アイコンを選択します。

Google Driveを許可するを選択し、下記プログラムを実行すると、Google Driveにアクセス可能になります。画像を移動する際に使用するため、マウントしておくと便利です。接続されると、左のサイドバーにdriveが表示されます。


ではGoogleコラボで画像生成プログラムを作成していきます。はじめにライブラリーをインストールします。Pythonを使用したことがある人はわかると思いますがpip installを行います。下記コマンドを実行してください。
!pip install diffusers==0.2.4 transformers scipy ftfy
ライブラリのインストールが完了すると、Successfully installedと表示されます。

次にモデルの生成を行います。インストールしたライブラリーを使用するためimportを使用します。また先ほどHugging Faceで取得したAccess Tokenを“ ”の間に貼り付けます。
from diffusers import StableDiffusionPipeline
import matplotlib.pyplot as plt
# Hugging Faceで取得したアクセストークン
access_tokens = "Access Token を入力"
# モデルのインスタンス化
model = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=access_tokens)
model.to("cuda")
上記プログラムを実行すると、エラーが発生します。エラー内容を見ると、下記サイトに入り、同意しろみたいなエラーが下のほうに出ています。そのため、リンクをクリックして、同意するにチェックを記入します。


ライセンスを読んだので、同意するにチェック。再度プログラムに戻って実行すると、問題なく起動します。

ステータスバーが表示されれば問題なし。

次に呪文と言われる生生したい画像のテキストをpromptに入力します。今回はかっこいい宇宙のロボットのイラストで画像を作っていきたいと思います。
prompt = "An illustration of Cool Space robot"#単語を入力 生成したい画像を連想する言葉
次に下記プログラムを実行すると画像が生成されます。outputfileというフォルダを作成して、そこにファイルを保存します。今回は一度に6枚の画像を出力します。寝ている時間に複数やっておくのも便利です。
# 画像出力のディレクトリ フォルダ作成
!mkdir outputfile
import re
filename = re.sub(r'[\\/:*?"<>|,]+', '', prompt).replace(' ','_')#空白を_に置換
# 画像数
num = 6 # 6枚出力
for i in range(num):
# モデルにpromptを入力し画像生成
image = model(prompt,num_inference_steps=100)["sample"][0]
# 保存
outputfile = f'{filename} _{i:03} .png'#outputfileにファイル名称を入力 連番を3桁
image.save(f"outputfile/{outputfile}")
上記プログラムを実行すると、バーが表示され、完了するとoutputfileに画像が保存されます。
画像が保存されたら、確認したいと思います。一度に確認するため、globコマンドを使用して、outpuffile内のファイル名を取得します。
import glob
files=glob.glob('outputfile/*.png')
images=[]
for file in files:
file=plt.imread(file)
images.append(file)
これで、imagesに画像ファイルが6枚格納されました。次に下記プログラムを実行します。subplotを使用すると複数の画像が一気に見れて便利です。
plt.figure(figsize=(15,8))
# plt.imshow(markers)
for i in range(len(images)):
plt.subplot(3,4,i+1),plt.imshow(images[i])
plt.xticks([]),plt.yticks([])
上記のプログラムを実行すると下記のように生成された画像が6枚並べられています。

非常に簡単に画像を複数自動で生成することができます。好みの画像が出てきたら、その画像を修正することもできますので、次回はその方法について紹介します。今後ブログのトップ画面やYouTubeについてはこういった方法で生成したいと思います。また、今回作った、画像を下記にのせておきます。
<その他>Prommpt = “A photograph of Cool Space robot, misterious”でできた画像

prompt = “An illustration of Shinkansen by Marc Chagall” シャガールが描いた新幹線
