OpenAI APIを使って画像を作成してみた

こんにちは。サービス部の武田です。OpenAIのDALL-E APIを使って画像を作成してみました。
2023.03.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。サービス部の武田です。

自然言語から画像を生成するAIサービスとしてDALL-Eが提供されています。このサービスはブラウザでアクセスすることで、対話形式で画像が生成できます。

OpenAIではDALL-EのAPIが提供されているため、自身のアプリケーションに簡単に組み込めます。今回はこのAPIを使って画像を作成してみました。

DALL-Eの画像作成について

DALL-Eでは現在、次の3種類のAPIが提供されています。なおこのAPIはベータとなっており、現在も進化をしている状態とのことです。

  1. テキストから画像を作成する
  2. 既存の画像をテキストで編集する
  3. 既存の画像に似た画像(バリエーション)を作成する

今回は1の、ゼロベースで画像を作成するAPIを使用してみました。

やってみた

事前にopenaiのインストールと、OPENAI_API_KEY環境変数にOpenAIのAPIキーを設定しておく必要があります。

$ pip install openai
$ export OPENAI_API_KEY=xxxx

次のようなプログラムを書いてみました。

import openai
import os
import base64

NUMBER_OF_IMAGES = 2

openai.api_key = os.environ["OPENAI_API_KEY"]

response = openai.Image.create(
    prompt="An impressionist painter's illustration of three calico cats playing together.",
    n=NUMBER_OF_IMAGES,
    size="512x512",
    response_format="b64_json",
)

for data, n in zip(response["data"], range(NUMBER_OF_IMAGES)):
    img_data = base64.b64decode(data["b64_json"])
    with open(f"image_{n}.png", "wb") as f:
        f.write(img_data)

promptに作成したい画像についての指示を書きます。日本語では「3匹の三毛猫が仲良く遊んでいる印象派の画家が描いたようなイラスト。」といった内容です。最初は日本語で書いてみましたが一部伝わらない部分があったため、英語にしました。

nは作成する画像の枚数で1〜10が指定できます。

sizeは作成する画像のサイズで、256x256512x5121024x1024が指定できます。

response_formatは作成した画像をどのように返すかで、urlb64_jsonが指定できます。今回はそのままローカルに画像を保存するためb64_jsonを指定しました。

あとは返ってきた画像データをBase64デコードして、画像として保存するだけです。

実行するたびに結果は変わりますが、次のような画像が作成されました。かなりいい感じですね!

まとめ

私は絵を描くのが上手ではないので、いい感じにAIが描いてくれると助かりますね。また人物の画像を何枚か作成してみましたが、顔が崩れたり身体がおかしくなっているものも多く作成されました。この辺はモデルの学習が進むと改善されていくと思われます。今後の進化に期待したいです。

参考URL