Open4
DALLE-2 APIを使って既存の画像の中にAIイラストを描画させる

Edits (DALL·E 2 only)
この処理をやってみる
この処理ではプールの上にフラミンゴを描画している

オリジナルの画像を保存してPNGに変換してから同じようにマスクしてみる
そのままコピペしたらだめだった
入力
original | mask |
---|---|
![]() |
![]() |
コード
コードはPython で以下
import datetime
import os
from os.path import join, dirname
import requests
from openai import OpenAI
from dotenv import load_dotenv
from PIL import Image
import os
load_dotenv(verbose=True)
dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)
# .env の読み込み
load_dotenv()
# .env から環境変数を読み込む
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
)
# 入力画像のパス
input_original_path = "inputs/original.png"
input_mask_path = "inputs/mask.png"
# input_original_pathとinput_mask_pathの画像を開いて画像が 'RGBA' モードでない場合にのみ変換を行う
with Image.open(input_original_path) as img:
if img.mode != "RGBA":
img = img.convert("RGBA")
img.save(input_original_path)
with Image.open(input_mask_path) as img:
if img.mode != "RGBA":
img = img.convert("RGBA")
img.save(input_mask_path)
response = client.images.edit(
model="dall-e-2",
image=open("inputs/original.png", "rb"),
mask=open("inputs/mask.png", "rb"),
prompt="A sunlit indoor lounge area with a pool containing a flamingo",
n=1,
size="1024x1024"
)
image_url = response.data[0].url
# local のoutputsフォルダに保存する
os.makedirs("outputs", exist_ok=True)
# ファイル名は実行日時を使う
filename = f"outputs/{datetime.datetime.now().isoformat()}.png"
with open(filename, "wb") as f:
f.write(requests.get(image_url).content)
print("Saved to", filename)
結果
3枚ほど出力
水面の反射も入っているのは素晴らしい
他の結果でもやってみる
例えばプロンプトのFlamingoをPenguinにしてみる
こちらも自然ですばらしい

さめ

Variation API
import datetime
import os
from os.path import join, dirname
import requests
from openai import OpenAI
from dotenv import load_dotenv
from PIL import Image
import os
load_dotenv(verbose=True)
dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path)
# .env の読み込み
load_dotenv()
# .env から環境変数を読み込む
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
)
# 入力画像のパス
image_edit_original_path = "outputs/2024-02-25T12:36:24.647344.png"
with Image.open(image_edit_original_path) as img:
if img.mode != "RGBA":
img = img.convert("RGBA")
img.save(image_edit_original_path)
response = client.images.create_variation(
image=open(image_edit_original_path, "rb"),
n=2,
size="1024x1024"
)
image_url = response.data[0].url
# local のoutputsフォルダに保存する
os.makedirs("outputs", exist_ok=True)
# ファイル名は実行日時を使う
filename = f"outputs/{datetime.datetime.now().isoformat()}.png"
with open(filename, "wb") as f:
f.write(requests.get(image_url).content)
print("Saved to", filename)
結果