はじめに
昨日の記事「Chat Completions APIで京都旅行プランを考える」に引き続き、OpenAI APIを扱います。
本日のお題は、「DALL·E APIで実在しないポケモンを創る」です。
DALL·E API
ChatGPTのDALL・Eで試してみたところ下記のように本家のポケモンと見間違うクオリティーで生成されました!
DALL·E APIの使い方
Step2まではOpenAI APIの使い方講座【公式Quickstart】と同じです。
続きのStep3から始めます。
ソースコードの右上のプルダウンでImages
を選ぶとサンプルコードが表示されます。
from openai import OpenAI
client = OpenAI()
response = client.images.generate(
prompt="A cute baby sea otter",
n=2,
size="1024x1024"
)
print(response)
出力結果
プロンプトA cute baby sea otter
の通り、かわいいラッコの赤ちゃん
が生成されました。
以上で公式ドキュメントの内容は終了です。
本日のお題:実在しないポケモンをつくる
出来上がったソースコード
from openai import OpenAI
def generate_image(prompt):
client = OpenAI()
response = client.images.generate(
prompt=prompt,
n=2,
size="1024x1024"
)
return response
if __name__ == "__main__":
prompt="A Pokemon resembling a cute baby sea otter"
response = generate_image(prompt)
print(response)
公式ドキュメントのサンプルコードをベースにしていますが、下記の変更を行いました。
- 関数化し、入力を汎用的に変更できるようにしました。
- 課題を達成するために、
A Pokemon resembling a cute baby sea otter
をprompt
として与えています。 -
completion.choices[0].message
をcompletion.choices[0].message.content
に変更し、中身の文字列を取り出しています。
実行結果
あれ?ChatGPTのDALL・Eと比べてクオリティーが低い、、、
画像生成のクオリティー向上
どうやらmodel
はデフォルトでDALL·E 2みたいです。ChatGPTのDALL・Eと同じDALL·E 3に変更します。
また、DALL·E 3は同時に1つの画像しか生成できないみたいなので、n
=1にします。
出来上がったソースコード
from openai import OpenAI
def generate_image(model, prompt):
client = OpenAI()
response = client.images.generate(
model=model,
prompt=prompt,
n=1,
size="1024x1024"
)
return response
if __name__ == "__main__":
model="dall-e-3"
prompt="A Pokemon resembling a cute baby sea otter"
response = generate_image(model, prompt)
print(response)
実行結果
先程と比べて、画像生成のクオリティーが飛躍的に向上しました。
おわりに
先行事例を調べていたところ下記の記事を見つけました。
5年前ということもあって、GANを用いて生成されていました。
当時は「からあげGAN」が話題になっていたと記憶しています。
GAN、Pix2Pix、拡散モデル、DALL・Eと画像生成AIの歴史を辿ると、発展がいかに目覚ましいかを実感できました。
ソースコード
本記事で使用したソースコードは、下記のGitHubレポジトリに格納しています。