画像生成AI「OpenAI DALL-E 3」をPHPからAPIで利用する
とある案件で映像作品制作過程で、絵コンテやシーンイメージの画像をAIで生成出来ないか?というご相談を受けました。既存の社内システム上(PHPフレームワーク)で利用したいとのことでしたので、OpenAI DALL-E 3でサンプルを作成してみました。
PHPコードサンプル
$data = [ 'model' =>; 'dall-e-3', 'prompt' =>; "Video production site meeting.", //'n' =>; 1, //枚数 'size' >; '1024x1024', //256x256 | 512x512 | 1024x1024 | 1792x1024 | 1024x1792 'quality' =>; 'standard', //standard | hd 'style' =>; 'natural', //vivid | natural ]; $headers = [ 'Content-Type: application/json', 'Authorization: Bearer ' . "あなたのAPIキー", ]; $ch = curl_init('https://api.openai.com/v1/images/generations'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); if ($response === false) { echo 'cURLエラー: ' . curl_error($ch); } else { $json_result = json_decode($response, true); if ($json_result === null) { echo 'JSONデコードエラー: ' . json_last_error_msg(); } else { foreach($json_result['data'] as $img){ echo "<img src='{$img["url"]}'>  "; } } } curl_close($ch);
これで生成した画像が以下となります。
送信パラメーターに関して
dall-e-3をAPIで利用可能となったのが最近のことで、2023/11/20現在、多くのサイトがdall-e-2までの情報で混乱しました。
https://openai.com/blog/new-models-and-developer-products-announced-at-devday
$data = [ 'model' =>; 'dall-e-3', 'prompt' =>; "Video production site meeting.", //'n' =>; 1, //枚数 'size' >; '1024x1024', //256x256 | 512x512 | 1024x1024 | 1792x1024 | 1024x1792 'quality' =>; 'standard', //standard | hd 'style' =>; 'natural', //vivid | natural ];
サイズに関しては1024*1024以上じゃないと非対応である旨のエラーが戻ってきます。生成枚数は戻り値がdall-e-2のように配列ではなく一枚しか戻ってこなかったのでコメントアウトしています。
プロンプトに関して
今回は簡単にVideo production site meeting.としていますが、テーブルの色や形、小物類、男女の数など細かく指定するとよりイメージに近い画像が生成されます。画像生成 プロンプト コツとでも検索するとchatGPTにプロンプトを作成して貰う方法等が紹介されていますので参考になると思います。
画像生成AIの実装に関して
今回はシーンイメージを登録して頂き、それに応じたプロンプトをchatGPTで生成→画像生成AIに渡す→画像を取得といった流れを1度のAPIで出来ればなと考えています。問題となるのは画風で、これに統一感が無いとアンバランスになってしまいます。APIではなく本体側ですとgen_idという値を取得し、以降はgen_idを一緒に渡すことで画風に統一感が出るようですが、APIでは今のところ無理そうでした。
APIでAI画像を取得すること自体はそれほど難しくはなく、GuzzleHttpを使うとより短いコードで実装可能だと思います。
ちなみにdall-e-2で生成すると・・
ホラーですね汗
以上、画像生成AIに関してでした!