Supershipの名畑です。Dr.STONEの新作短編が熱すぎる。
はじめに
先日「New models and developer products announced at DevDay」というアナウンスがありました通り、OpenAIで様々なアップデートが行われました。
そのうちの一つとして、これまでChatGPTかBing経由での利用のみだった画像生成のDALL·E 3がWeb APIでも呼べるようになりましたので、それをPythonで実装してみたというのがこちらの記事の内容になります。
公式のドキュメント
価格
現時点ではDALL·E 3をQualityがStandard、解像度が1024×1024の場合は1枚につき0.040ドルです。
仮に1ドル150円とすると6円ですね。
環境
私の環境はmacOS(Ventura)です。
Pythonはすでにインストール済みとします。
$ python --version
Python 3.10.12
OpenAIのライブラリ(Pythonバインディング)をインストールしておきます。
$ pip install openai
現時点でのバージョンは1.2.3でした。
$ openai --version
openai 1.2.3
OpenAIのアカウント作成
OpenAI platformでアカウント作成をします。
メールアドレス(電話での認証あり)、Google、Microsoft Accountのいずれかが使えます。
API key発行
サインイン後のAPI keysのページで行えます。Create new secret keyを押して、名前(optional)をつけるだけです。
API keyは作成時しか画面に表示されませんので気をつけてください。画面上から後で知る方法はありません。
取得したAPI keyはハードコーディングを避けるため環境変数に設定します。方法は検索ください。
今回は公式に倣いOPENAI_API_KEYという環境変数名としました。
export OPENAI_API_KEY=ここに取得したAPI keyを書く
コード
from openai import OpenAI
import os
import time
import base64
client = OpenAI()
client.api_key = os.getenv("OPENAI_API_KEY") # API keyのセット
response = client.images.generate(
model="dall-e-3", # モデル
prompt="28-year-old Japanese pretty woman with black bobbed hair", # プロンプト
n=1, # 生成数
size="1024x1024", # 解像度 dall-e-3では1024x1024、1792x1024、1024x1792
response_format="b64_json", # レスポンスフォーマット url or b64_json
quality="hd", # 品質 standard or hd
style="vivid" # スタイル vivid or natural
)
# 画像保存
# ファイル名にはタイムスタンプと通番を含めています
for i, d in enumerate(response.data):
with open(f"./dall-e-3_{int(time.time())}_{i}.png", "wb") as f:
f.write(base64.b64decode(d.b64_json))
ここでは指定していませんがリクエストパラメータにはuserもあります。
レスポンス
レスポンスには生成されたプロンプトも含まれます。
ImagesResponse(created=1699712124, data=[Image(b64_json='略', revised_prompt="A 28-year-old Japanese woman who is aesthetically pleasing to the eye, with her short, black, bobbed hair emphasizing her facial features. She carries an aura of elegance that is further highlighted by her hair's bob cut, adding a modern touch to her traditional beauty.", url=None)])
画像
生成された画像はこちら。
最後に
editやvariationのAPIはまだ下記の通りなのでdall-e-3には対応していないです。
The model to use for image generation. Only dall-e-2 is supported at this time.
実際にdall-e-3を指定して呼び出してみると下記のエラーでした。model指定しないでくださいと。
Invalid model dall-e-3. The model argument should be left blank.
ただ、近いうちにきっと対応されるでしょう。
そう思わせてくれる変化の速さは圧倒的すぎる。
宣伝
SupershipのQiita Organizationを合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。
Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方はSupership株式会社 採用サイトよりご確認ください。