skip to content
サイトロゴ 子育てSEパパのIT・AI×副業ラボ
Table of Contents
参考記事【副業実験記#4】VOICEVOX ENGINEのAPIでテキストから音声を生成してみた話

つづき。


はじめに

引き続き、雑学動画自動生成ツールを自作できないか、検討してみているお話です。

今回は、テキストから画像を生成できるという「Stable Diffusion web UI」について、雑学動画自動生成ツールで使えるか検証してみた話です。

検証準備

Pythonのインストール

「Python」で雑学動画自動生成ツールを作るつもりなので、検証でも同様に使います。

詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。

https://sepapalab.com/how-to-download-and-install-python-to-windows/

PyCharmのインストール

Pythonでの開発を楽にしてくれる統合開発環境「PyCharm」を使います。

Pythonで雑学動画自動生成ツールを作る際に使うつもりなので、検証でも同様に使います。

詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。

https://sepapalab.com/how-to-download-and-install-pycharm-ja-to-windows/

検証用Pythonプロジェクトおよびvenvの作成

検証用「Pythonプロジェクト」を作成します。

PyCharmで簡単に作成できます。

Pythonプロジェクトを作成したら、その中で「venv」(Python仮想環境)を作成しておきます。

詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。

https://sepapalab.com/how-to-set-up-pycharm-to-use-python-venv-virtual-environment/
https://sepapalab.com/why-use-venv-in-python/

Requestsのインストール

Requests」は、WebサイトやAPIと通信するためのHTTPリクエストをPythonで簡単に使えるようにしてくれるライブラリです。

このライブラリを使用し、APIを実行します。

検証用Pythonプロジェクトでvenvを起動し、「Requests」のパッケージをインストールします。

ターミナルでコマンド実行してインストールする方法やPyCharm上で画面を操作してインストールする方法がありますが、今回は、PyCharm上で画面を操作し、venvに「Requests」パッケージをインストールします。

詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。

https://sepapalab.com/how-to-install-packages-in-a-venv-virtual-environment-with-pycharm/
PyCharm上で「Requests」のパッケージを検索した結果

Stable Diffusion web UIのインストール

Stable Diffusion web UI」を手元のWindowsパソコンにインストールして使用する方法はいくつかあるようですが、今回はPythonとGitを使用する方法を選びます。

「Stable Diffusion web UI」をダウンロード(インストール)および使用するまでの流れは以下の通りです。

(英語ですが、公式ドキュメントにも書いてあります

LISTPH_INVALID_1

GitHubから「Stable Diffusion web UI」をダウンロード(インストール)する場合、任意のフォルダに移動して以下のコマンドを実行すれば良いです。

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

詳細は以下の記事にまとめていますので、ご興味ある方は、そちらをご覧ください。

https://sepapalab.com/how-to-download-and-install-stable-diffusion-web-ui-to-windows/

検証してみた

Stable Diffusion web UIのAPIモードを設定

Stable Diffusion web UIのAPIを利用したい場合、初期状態では利用できないようになっているので、設定が必要です。

設定はとても簡単で、起動バッチ(webui-user.bat)の中で環境変数(COMMANDLINE_ARGS)にAPIを使うための値(—api)を設定するだけです。

今回は、「—api」の他に「—api-server-stop」を設定します。

「—api-server-stop」は、API経由で「Stable Diffusion web UI」を停止/再起動/終了させられるようにする設定値です。

他にもAPI関連の値としては「—api-auth」や「—api-log」がありますが、詳細については、公式ドキュメントをご確認ください。

例)

・「webui-user.bat」設定“前(初期状態)”

@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=
call webui.bat

・「webui-user.bat」設定“後(例)”

@echo off
set PYTHON=
set GIT=
set VENV_DIR=
set COMMANDLINE_ARGS=--api --api-server-stop
call webui.bat

「Stable Diffusion web UI」のAPIモード設定方法については、以下の記事にまとめていますので、ご興味ある方は、そちらもご覧ください。

https://sepapalab.com/how-to-launch-the-stable-diffusion-web-ui-on-windows/#toc8

Stable Diffusion web UIの起動

「Stable Diffusion web UI」では、指定のPythonのバージョン(3.10.6)を使うため、手元パソコンの他Pythonと共存できるように、Python標準搭載の仮想環境(venv)を使って起動します。

「Stable Diffusion web UI」のフォルダ内に仮想環境(venv)を作成

まず、ターミナル(PowerShell)を起動して、以下のように、「Stable Diffusion web UI」のフォルダ内で「venv」を作成します。
(自分が「Stable Diffusion web UI」をダウンロードしたフォルダは「D:\stable-diffusion-webui」です)

例)

・「Stable Diffusion web UI」フォルダ内で「venv」仮想環境を作成する例

PS C:\Users\sepapa> cd D:\stable-diffusion-webui
PS D:\stable-diffusion-webui> python -m venv .venv
#### 仮想環境(venv)で起動バッチを実行
次に、以下のように、**作成した「venv」仮想環境を有効にして、「webui-user.bat」を実行**します。
例)
・「venv」仮想環境を有効にする例

PS D:\stable-diffusion-webui> .venv/Scripts/Activate.ps1

PS D:\stable-diffusion-webui> .\webui-user.bat

:::caution
※PowerShellではなく、コマンドプロンプトで実行する場合は、以下のように読み替えてください。

D:\stable-diffusion-webui> .venv\Scripts\activate.bat

D:\stable-diffusion-webui> webui-user.bat

:::

・結果

ターミナルが自動で起動し、以下のようなメッセージが表示され、「Stable Diffusion web UI」が起動します。

venv "D:\stable-diffusion-webui\venv\Scripts\Python.exe"
<div class="ellipsis-marker">~ 省略 ~</div>
Launching Web UI with arguments: --api --api-server-stop
<div class="ellipsis-marker">~ 省略 ~</div>
Running on local URL: http://127.0.0.1:7860
<div class="ellipsis-marker">~ 省略 ~</div>

「Stable Diffusion web UI」の起動方法については、以下の記事にまとめていますので、ご興味ある方は、そちらもご覧ください。

参考記事Stable Diffusion web UIの起動方法【Windows】【初心者向け】

Stable Diffusion web UI APIを使用したテキスト画像変換の流れ

「Stable Diffusion web UI」起動時に表示されたIPアドレスとポート番号に対して、生成したい画像に関するテキストを含めてHTTPリクエストを送信すれば、それによって生成された画像が含まれたHTTPレスポンスが返ってきます。

APIの公式ドキュメントが出ているので、そちらを確認しながら検証していくと良いですね。

調べてみると、テキストを画像に変換する場合、単にAPI「/sdapi/v1/txt2img」経由で画像生成をリクエストするだけで良く、とても簡単でした。

Stable Diffusion web UI APIを使用したテキスト画像変換の試し

今回はシンプルにテキストから画像を生成してみます。

「/sdapi/v1/txt2img」を使う

では実際に、「/sdapi/v1/txt2img」を使って、テキストから画像を生成してみます。

以下は、公式ドキュメントに記載のあるPythonサンプルコードですが、そのまま流用して検証します。

「/sdapi/v1/txt2img」を使ったPythonサンプルコード
import requests
import base64
# Define the URL and the payload to send.
url = "http://127.0.0.1:7860"
payload = {
"prompt": "puppy dog",
"steps": 5
}
# Send said payload to said URL through the API.
response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload)
r = response.json()
# Decode and save the image.
with open("output.png", 'wb') as f:
f.write(base64.b64decode(r['images'][0]))

この中の「payload = { ~ }」の部分で、生成したい画像の情報を指定するようです。
HTTPリクエストボディに含められて送られます。

「prompt」に設定している値が、生成したい画像の指示テキスト(プロンプト)になります。

サンプルコード内「payload = { ~ }」の部分で指定できる設定項目と既定値
{
"prompt": "",
"negative_prompt": "",
"styles": [
"string"
],
"seed": -1,
"subseed": -1,
"subseed_strength": 0,
"seed_resize_from_h": -1,
"seed_resize_from_w": -1,
"sampler_name": "string",
"scheduler": "string",
"batch_size": 1,
"n_iter": 1,
"steps": 50,
"cfg_scale": 7,
"width": 512,
"height": 512,
"restore_faces": true,
"tiling": true,
"do_not_save_samples": false,
"do_not_save_grid": false,
"eta": 0,
"denoising_strength": 0,
"s_min_uncond": 0,
"s_churn": 0,
"s_tmax": 0,
"s_tmin": 0,
"s_noise": 0,
"override_settings": {},
"override_settings_restore_afterwards": true,
"refiner_checkpoint": "string",
"refiner_switch_at": 0,
"disable_extra_networks": false,
"firstpass_image": "string",
"comments": {},
"enable_hr": false,
"firstphase_width": 0,
"firstphase_height": 0,
"hr_scale": 2,
"hr_upscaler": "string",
"hr_second_pass_steps": 0,
"hr_resize_x": 0,
"hr_resize_y": 0,
"hr_checkpoint_name": "string",
"hr_sampler_name": "string",
"hr_scheduler": "string",
"hr_prompt": "",
"hr_negative_prompt": "",
"force_task_id": "string",
"sampler_index": "Euler",
"script_name": "string",
"script_args": [],
"send_images": true,
"save_images": false,
"alwayson_scripts": {},
"infotext": "string"
}

各項目値の詳細は、内部ドキュメントを参照して確認することになりますね。

サンプルコードで生成された画像
puppy dog

基本的な機能だけで十分に、雑学動画自動生成ツールで使えると感じました。

おわりに

「Stable Diffusion web UI」ですが、確かにテキストから画像を生成できることが分かりました。

APIの使い方も、とてもシンプルで扱いやすそうです。

これで、テキストから画像を生成するツールは「Stable Diffusion web UI」を使えば良いことが分かったので、次の技術やツールの検証に移ろうと思います。


今回の記事も、同じように副業に悩んでいる人、手探りで取り組んでいる人にとって、何かの参考になれば嬉しいです。

これからも記録を続けていく予定なので、よければフォローしてもらえると嬉しいです。


つづき。

参考記事【副業実験記#6】Python+GiNZAで形態素解析して日本語テキストを自動改行してみた話