はじめに
今回はDALL・E(API)の紹介になります.現在,ChatGPT上で一部の人?が使えるDALL・E3が流行っていますが,今回は現在利用できるDALL・EのOpenAI APIの使い方についてまとめました.
記事に誤り等ありましたらご指摘いただけますと幸いです。
目次
1. DALL・E(API)
ライセンス:Modified MIT License
公式サイト:https://platform.openai.com/docs/guides/images
デモサイト:https://labs.openai.com/
論文:https://cdn.openai.com/papers/dall-e-2.pdf
DALL・E のAPI版の紹介です.APIで使われているモデルは明記はされていないですがDALL・E2と記載されている記事が多いので,内部ではDALL・E2が動いていると思われます.DALL・E3のAPIも早く利用したいですね.
2. 使い方
すぐに試したい方は各セクションのData Science WikiのページまたはColabのリンクから実行してみてください.
以下が今回使うライブラリです.(OpenAI のAPI keyも必要です)
import openai
import requests
from PIL import Image
from io import BytesIO
import IPython.display as display
画像生成
まず初めは,プロンプトを入力して画像を生成してみたいと思います.
画像生成
response = openai.Image.create(
prompt="a white siamese cat",
n=1, # 1〜10枚まで設定できる
# 三つのサイズを選択できる
#size = "256x256",
#size = "512x512",
size="1024x1024"
)
生成した画像の取得
image_url = response['data'][0]['url']
response = requests.get(image_url)
response.raise_for_status()
画像の表示
image_data = BytesIO(response.content)
image = Image.open(image_data)
display.display(image)
画像の保存
with open('sample_image.png', 'wb') as file:
file.write(response.content)
類似画像の生成
先ほどの画像を元に新しい画像を生成します.
response = openai.Image.create_variation(
image=open("sample_image.png", "rb"),
n=1,
size="1024x1024"
)
image_url = response['data'][0]['url']
画像の取得
image_url = response['data'][0]['url']
response = requests.get(image_url)
response.raise_for_status()
新しく作成した類似画像の表示
image_data = BytesIO(response.content)
image = Image.open(image_data)
display.display(image)
画像編集
ここではせっかく真っ白な猫ですが,顔だけを黒い猫にしたいと思います.
先ほどの画像の猫の顔の部分をマスクします.
image = Image.open('sample_image.png')
image = image.convert("RGBA")
# 画像の一部を透明にするための描画オブジェクトを作成します
draw = ImageDraw.Draw(image)
# 透明にする矩形領域を指定します (left, top, right, bottom)
rect = (300, 10, 1000, 600)
# 透明な四角形を描きます
draw.rectangle(rect, fill=(255, 255, 255, 0)) # 最後の0は透明度を示す
image.save('mask.png', "PNG")
display.display(image.convert("RGB"))
画像をプロンプトによる指示を行い編集します.
response = openai.Image.create_edit(
image=open("sample_image.png", "rb"),
mask=open("mask.png", "rb"),
prompt="Cat with black head and blue eyes.",
n=1,
size="1024x1024"
)
image_url = response['data'][0]['url']
画像の表示
image_data = BytesIO(response.content)
image = Image.open(image_data)
display.display(image)
指定した箇所だけプロンプトで指示した通りに編集することができました.編集後のクオリティもかなり高いですね.
4. おわりに
今回はDALL・E(API)の紹介でした.画像生成のクオリティとしては非常に高いですが無料の画像生成も多い中なかなか割高な気もします.DALL・E3のAPI提供されより安価になって欲しいものです.
記事に誤り等ありましたらご指摘いただけますと幸いです。