最近、AIによるアート・絵画・写真生成がたいへん活発になっています。その中でも最近公開されたStable DiffusionはローカルPCで実行できるように公開されています。絵心のない私には心強いところです。とても感謝しています。
早速私もローカルPCで動作させてみました。でも動いた!というだけでは面白くありません。旧人類である私は普段のタスク管理のかなりの部分がメールに依存しています。そこでメールで書いてほしい内容を送ると絵がメールで返信されてくれば便利だと考えました。いわばメールで注文するようなイメージです。
Windows上でStable Diffusionを動作させたので、その仕組みもWindows上で手軽に実装したいところです(このあたりで最初からLinuxにしておけば……などと考えなかったわけではありませんが)。そこでPower Automate Desktopを使って実現してみました。
まず無限ループを用いた手法でフローを定期実行します。ここでは61秒間隔にしました(なんとなくきりの良い数字は怖い)。ブロックエラーをcatchしておくことで定期実行が続くようにしています。
メインとなるフローは新着メールを受信し、3つに分けたサブフローを呼び出すだけです。ときどき実行エラーが生じることもあるので、これをcatchしてエラーをメールで通知するようにしました。また新着メールはあえて最初の1通しか読まないようにしています。外部から攻撃されたりしても最大でも1分間に1通しか処理しません。
次に送られてきたメールの1行目を取得しWebサービスを使って翻訳します。お好きなサービスを使っていただくのがよいと思います。ブラウザーベースで実装したのでここでは結果の取得をレコーダー機能で実現しました。
やっと本体であるStable Diffusionの実行です。ここでは日時情報を使ってユニークな名前のフォルダーを生成し、その中に結果を保存するようにしています。ついでに入力文字列と翻訳結果もテキストファイルに保存しています。
ここ呼び出しているBATファイルの中身は以下のようなものです。試したPCのGPU搭載メモリは12GBで、n_samplesを2以上にするとエラーで落ちてしまいます。
cd "C:\Users\......\stable-diffusion"
py -3.8 scripts/txt2img.py --prompt %2 --plms --ckpt sd-v1-4.ckpt --n_samples 1 --outdir %1
最後に画像を添付したメールを送ります。あえて送り先は固定としています。これも何か異常動作したときのための備えです。これで少なくとも自分にしかメールは飛んでこないようにしています。
ちなみに最初の図の実行結果は以下のようになりました。
これで講義資料や研究資料で何か絵が欲しくなったときにすぐメールを書けば、いつでも検証できます。