画像生成AI「Stable Diffusion 」をLaravelで動かしてみた
画像生成AI「Stable Diffusion」をLaravel上で動かしてみました。
数ステップで簡単にできました。
Laravel-Stable-Diffusionを使う
Laravel-Stable-Diffusionを使うのが一番簡単だと思います。
・Laravel-Stable-Diffusion -github
https://github.com/RuliLG/Laravel-Stable-Diffusion
Laravel-Stable-Diffusion の設定
composerを使ってインストールしましょう。
composer require rulilg/laravel-stable-diffusion
インストールした後に3つのコマンドの入力。
php artisan vendor:publish --tag="stable-diffusion-migrations"
php artisan migrate
php artisan vendor:publish --tag="stable-diffusion-config"
app/configにstable-diffusion.phpが生成されていることを確認します。
以下がstable-diffusion.phpの内容。
return [
'url' => env('REPLICATE_URL', 'https://api.replicate.com/v1/predictions'),
'token' => env('REPLICATE_TOKEN'),
'version' => env('REPLICATE_STABLEDIFFUSION_VERSION', 'a9758cbfbd5f3c2094457d996681af52552901775aa2d6dd0b17fd15df959bef'),
];
.envにREPLICATE_TOKENを追記してトークンを設定する必要があります。
REPLICATE_TOKENは、replicate で取得する必要があります。
replicateにアクセスしてサイトインし、アカウントページのAPI tokenを取得して、.envのREPLICATE_TOKENに設定しましょう。
以上で設定は完了です。
Laravel-Stable-Diffusion の使い方
画像生成に必要なコードです。
use RuliLG\StableDiffusion\StableDiffusion;
use RuliLG\StableDiffusion\Prompt;
$result = StableDiffusion::make()
->withPrompt(
Prompt::make()
->with('Van Gogh style rose painting')
->photograph()
->resolution8k()
->trendingOnArtStation()
->highlyDetailed()
->dramaticLighting()
->octaneRender()
)
->generate(1);
コード中の下記部分が画像生成のプロンプト(命令文)になります。
->with('Van Gogh style rose painting')
「ゴッホ風のバラの絵(Van Gogh style rose painting)」の画像生成を指示しています。
上記コードでreplicateに画像生成のリクエストが送信されますが、画像生成には数秒間かかるため、数秒後にしか結果は取得できません。
画像生成が完了したら、下記コードで結果(画像のURL)が取得できます。
$freshResults = StableDiffusion::get($result->replicate_id);
if ($freshResults->is_successful) {
dd($freshResults->output); // List of URLs with the images
}
画像生成に時間が必要な事を考慮して簡単な取得コードを書いてみます。
use RuliLG\StableDiffusion\StableDiffusion;
use RuliLG\StableDiffusion\Prompt;
$result = StableDiffusion::make()
->withPrompt(
Prompt::make()
->with('Astronaut riding a horse')
->photograph()
->resolution8k()
->trendingOnArtStation()
->highlyDetailed()
->dramaticLighting()
->octaneRender()
)
->generate(1);
$loop = true;
while ($loop){
sleep(3);
$freshResults = StableDiffusion::get($result->replicate_id);
if ($freshResults->is_successful) {
$loop = false;
}
}
$image = $freshResults->output;
return view('test', [
'image' => $image
]);
$imageには画像のURLが格納されます。
上のコードで生成された画像です。
すごい!ゴッホが書いたっぽい!
プロンプトを「馬に乗る宇宙飛行士(Astronaut riding a horse)」に変えて生成してみます。
CGみたい!
Stable Diffusion 面白いしめちゃくちゃすごいです。
Laravelに組み込むだけなら簡単でした。
追記:
しばらく遊んでいたら、生成画像が返ってこなくなりました。どうやらreplicateの無料期間が終わったようです・・・
本格的に何かサービスに組み込むなら有料プランにする必要がありそうです。