Python で OpenAI API を使用して画像を生成する
目次
📄前書き
ChatGPT
で話題のOpenAI社が提供している 画像
機能に関しては、現時点で3種類あります。
① テキストに基づいてゼロからイメージを作成する
② テキストに基づいて既存の画像を編集する
③ 既存の画像のバリエーションを作成する
いずれも DALL・E
を使用している。
DALL・Eとは?DALL-Eは、OpenAIが開発したAIモデルで、自然言語の説明から画像を生成する能力を持っています。DALL-Eの名前は、有名な画家サルバドール・ダリとAIモデルの基礎となるウォールE(PIXARの映画キャラクター)からインスパイアされています。
DALL-Eは、GPT-3と同じトランスフォーマーアーキテクチャをベースにしており、テキストから画像を生成するための機能が追加されています。このモデルは、大量の画像データとそれに関連するテキストデータを学習しています。その結果、DALL-Eは、ある程度抽象的な説明からも、現実的で創造的な画像を生成することができます。
DALL-Eは、これまでの画像生成技術と比べて、より高い品質と多様性を持つ画像を生成することができます。しかし、大量のデータを必要とし、計算負荷が高いことが欠点です。
DALL-Eの応用例は以下の通りです。
1. アートやデザインの生成:DALL-Eは、独自のアートワークやデザインを生成するために使用できます。
2. 広告やマーケティング素材の作成:DALL-Eは、プロモーション用の画像を生成するために使用できます。
3. コンセプトアートやプロトタイプの開発:DALL-Eは、新しいアイデアやプロトタイプを視覚化するために使用できます。
4. ゲームや映画のキャラクターや背景の生成:DALL-Eは、独自のキャラクターや背景を生成するために使用できます。
DALL-Eは、画像生成の分野に革新をもたらし、さまざまな産業での応用が期待されています。ただし、その応用には倫理的な配慮や著作権の問題も考慮する必要があります。
AIが生成した画像の著作権はどうなるのか?
そもそも著作権が発生するのか?などいろいろな論議があります。

「AIで作成したコミックの絵は著作権で保護されない」とアメリカ著作権局が宣言、作者は「素晴らしいニュース」と歓迎 - GIGAZINE
アメリカ著作権局が2023年2月21日に、「画像生成AIを使用して制作されたグラフィックノベルの画像は、著作権による保護を受けない」と宣言しました。当該グラフィックノベルの作者は、引き続きアートワークの著作権を追求する予定としつつも、作品のストーリーや画像の配置などに関する創作性が認められた今回の決定を歓迎すると述べています。
https://gigazine.net/news/20230224-us-copyright-ai-generated-comic-artwork/
OpenAI社としては規約などに記載があるかと思い、調べました。
©生成した画像の著作権
生成したお客様
販売や出版などの商業目的を含むあらゆる目的でコンテンツを使用できる
販売や出版などの商業目的を含むあらゆる目的でコンテンツを使用できる
“OpenAI はここに、Output に関するすべての権利、権原、および利益をお客様に譲渡します。”ときっちり明記がありますね。
生成した物はどうぞご自由にお使いくださいというスタンスのようです。
3. Content(a) Your Content. You may provide input to the Services (“Input”), and receive output generated and returned by the Services based on the Input (“Output”). Input and Output are collectively “Content.” As between the parties and to the extent permitted by applicable law, you own all Input. Subject to your compliance with these Terms, OpenAI hereby assigns to you all its right, title and interest in and to Output. This means you can use Content for any purpose, including commercial purposes such as sale or publication, if you comply with these Terms. OpenAI may use Content to provide and maintain the Services, comply with applicable law, and enforce our policies. You are responsible for Content, including for ensuring that it does not violate any applicable law or these Terms.
翻訳:
(a) お客様のコンテンツ。お客様は、サービスに入力を提供し (「入力」)、入力に基づいてサービスによって生成および返された出力を受け取ることができます (「出力」)。インプットとアウトプットはまとめて「コンテンツ」です。両当事者間で、適用法で許可されている範囲で、すべての入力はお客様が所有します。お客様が本規約を遵守することを条件として、OpenAI はここに、Output に関するすべての権利、権原、および利益をお客様に譲渡します。これは、本規約を遵守する限り、販売や出版などの商業目的を含むあらゆる目的でコンテンツを使用できることを意味します。OpenAI は、コンテンツを使用して、サービスを提供および維持し、適用法を遵守し、当社のポリシーを施行する場合があります。お客様は、コンテンツが適用法または本規約に違反していないことを確認することを含め、コンテンツに対して責任を負います。
では実際にAPIを使用してためしていきます。
🖥実施環境
種類 | バージョン |
---|---|
OS | Windows 10 Home 22H2 64ビット メモリ16GB |
Python | 3.11.1 |
Flask | 2.2.3 |
ChatGPT Plus | 契約あり |
⚙OpenAI API
APIキーの取得等は以下記事をご参照ください。

Python で ChatGPT を OpenAI API で接続する
PythonでChatGPTへAPI接続してみます。まずはチャット(Chat completions)を実際に試した結果を掲載しております。
https://outpust.jp/blog/458c0f0b-ae07-4dd3-b10e-8d70d0fb1d11
💹画像API 使用料
https://openai.com/pricing#image-models

① テキストに基づいてゼロからイメージを作成する
※当環境はFlaskを使用して確認しています※

OpenAI API
An API for accessing new AI models developed by OpenAI
https://platform.openai.com/docs/api-reference/images/create
サンプルに記載あるものをまずはそのまま動かしてみます。
import openai
openai.api_key = current_app.config['OPENAI_API_KEY']
openai.Image.create(
prompt="A cute baby sea otter",
n=2,
size="1024x1024"
)
-- 結果 --
{
"created": 1679203968,
"data": [
{
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-JCbVjFKpYOHTiLAaonENrvpf/user-Sc7cCxT2Cyb28nH1qElbMf3g/img-VjhdqV8oHieaNt8UA1CWo38x.png?st=2023-03-19T04%3A32%3A48Z&se=2023-03-19T06%3A32%3A48Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-03-19T04%3A41%3A56Z&ske=2023-03-20T04%3A41%3A56Z&sks=b&skv=2021-08-06&sig=2yclDvWr6ev/Xp9JQ9JjZuiR49S6gDB40GW6WkQwrrE%3D"
},
{
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-JCbVjFKpYOHTiLAaonENrvpf/user-Sc7cCxT2Cyb28nH1qElbMf3g/img-DXrkpNNrB5XcOcTweaqhgrnV.png?st=2023-03-19T04%3A32%3A48Z&se=2023-03-19T06%3A32%3A48Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-03-19T04%3A41%3A56Z&ske=2023-03-20T04%3A41%3A56Z&sks=b&skv=2021-08-06&sig=mr%2BnHMMoNrkhl8A4HWwNs0sLTwq7JR5ErCNJeAluBMo%3D"
}
]
}


返答があったので、接続は無事成功です。
2つのURLがあり、上記画像でした。
では中身を細かく見ていきます。
使用メソッド:openai.Image.create
パラメータ | 型 | 必須 | デフォルト | 設定内容 | 例 |
prompt | string | 必須 | 目的の画像のテキストによる説明。最大長は 1000 文字です。 | ||
n | integer | 1 | 生成する画像の数。1 から 10 の間でなければなりません。 | 2 | |
size | string | 1024x1024 | 生成された画像のサイズ。256x256、512x512、または 1024x1024 のいずれかでなければなりません。 | 256x256 | |
response_format | string | url | 生成された画像が返される形式。urlまたは b64_json のいずれかでなければなりません | url | |
user | string | エンドユーザーを表す一意の識別子。これは、OpenAI が不正行為を監視および検出するのに役立ちます。 |
🖼日本語でキーワードを指定して生成してみる
import openai
openai.api_key = current_app.config['OPENAI_API_KEY']
images = openai.Image.create(
prompt="ロボット",
n=2,
size="512x512"
)
print(images)
-- 結果 --
{
"created": 1679207611,
"data": [
{
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-JCbVjFKpYOHTiLAaonENrvpf/user-Sc7cCxT2Cyb28nH1qElbMf3g/img-rUP6FDSPfEsdTJiKokt8Z5s6.png?st=2023-03-19T05%3A33%3A31Z&se=2023-03-19T07%3A33%3A31Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-03-19T05%3A58%3A09Z&ske=2023-03-20T05%3A58%3A09Z&sks=b&skv=2021-08-06&sig=hwwXXc2JCvYm1DjqMZpDuNL1PEscVZyHfqEJMNzily4%3D"
},
{
"url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-JCbVjFKpYOHTiLAaonENrvpf/user-Sc7cCxT2Cyb28nH1qElbMf3g/img-cUuseOD9IBriQ9u6GoERSkid.png?st=2023-03-19T05%3A33%3A31Z&se=2023-03-19T07%3A33%3A31Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-03-19T05%3A58%3A09Z&ske=2023-03-20T05%3A58%3A09Z&sks=b&skv=2021-08-06&sig=eG2Vdfoa0yI0VFmgZs26Ykzryf0wGXSHH4FC68ewQ9w%3D"
}
]
}
日本語ではまだ難しいのか
何やら美味しそうな "ロボット” が出来ました。


”Ice Cream Monster”
英語だとそれらしい画像生成が出来ました。








② テキストに基づいて既存の画像を編集する


※当環境はFlaskを使用して確認しています※

OpenAI API
An API for accessing new AI models developed by OpenAI
https://platform.openai.com/docs/api-reference/images/create-edit
openai.api_key = current_app.config['OPENAI_API_KEY']
# 元データ
source_data = os.path.join(os.getcwd(), 'application', 'z_laboratory_openai', 'source_data', '01.png')
# マスク画像
mask_data = os.path.join(os.getcwd(), 'application', 'z_laboratory_openai', 'source_data', '01_mask.png')
images = openai.Image.create_edit(
image=open(source_data, "rb"),
mask=open(mask_data, "rb"),
prompt="★キーワード★",
n=3,
size="512x512"
)
print(images)

なんか 雑
ですね。。。

滑り台はうまく合成できていますね!
③ 既存の画像のバリエーションを作成する

※当環境はFlaskを使用して確認しています※

OpenAI API
An API for accessing new AI models developed by OpenAI
https://platform.openai.com/docs/api-reference/images/create-variation
openai.api_key = current_app.config['OPENAI_API_KEY']
# 元データ
source_data = os.path.join(os.getcwd(), 'application', 'z_laboratory_openai', 'source_data', '01.png')
images = openai.Image.create_variation(
image=open(source_data, "rb"),
n=2,
size="512x512"
)
print(images)




なんか 微妙
というのが感想です😅


名前:田中寛之
今まで約20年間、出版社、マスコミ、化粧品会社、システム会社・病院・クリニックにてシステムエンジニアとして勤務。現在、個人事業主「ONLINE-WORLD」として活動し、42歳からPythonを始めました!


名前:田中寛之
今まで約20年間、出版社、マスコミ、化粧品会社、システム会社・病院・クリニックにてシステムエンジニアとして勤務。現在、個人事業主「ONLINE-WORLD」として活動し、42歳からPythonを始めました!