Gluegent Blog

Gluegent Blog

ChatGPT DALL・Eで画像生成してみよう

  • 技術

こんにちは。GluegentSL新卒2年目エンジニアの塩山です。
最近、YoutubeなどやインスタグラムなどのSNSで「AIに○○を描かせてみた」などの動画をよく見かけますよね。中には、使ってみたいとは思うけど、料金が高そうだったり、なんか難しそうなイメージを持ったりで触ってこなかった方もいらっしゃるのではないでしょうか。
ChatGPTのDALL・Eでは無料で容易に画像を生成できるので、この記事ではその使い方を紹介していこうと思います。また、DALL・EのAPIの使い方も紹介していきます。APIを使用できると画像生成の利用の幅が広がるため、特にエンジニアの方はこちらまで見ていただけると嬉しいです。

ChatGPT DALL・Eで画像生成してみよう

ChatGPTのDALL・Eを用いて画像を生成する

2024年8月のアップデートにより、無料版ChatGPTユーザーでも1日に2枚(2024年12月現在)という制限付きではありますが、画像生成機能を利用できるようになりました。Plus以上のプランでは画像生成に関しては制限なく利用できます。
使い方は非常に簡単で、下画像のようにChatGPTに「○○の画像を生成してください」や「○○を描いてください」とメッセージ(以下、プロンプト)を送信するだけです。
コメント 2024-12-23 160345.png画像を生成するだけなら簡単ですが、安全に使うための注意点やよりよく画像を生成・活用したい場合は工夫が必要な点がありますので紹介していきます。

DALL・E 利用の注意点やコツ

  1. 出力形式を指定する必要がある
    DALL-Eのデフォルトの出力ファイル形式はWebP形式となっています。この形式はデータサイズが 軽くなるメリットはありますが、対応してないブラウザやアプリケーションがあるため使い勝手があまり良くないです。そのため、ChatGPTに送るプロンプトを「出力形式はPNG形式にしてください」といったように出力形式を指定するようにする必要があります。または、画像変換アプリやフリーソフトを使用してファイル形式を変更する必要があります。

  2. 著作権に留意する
    基本的にDALL・Eで生成された画像は利用者に(商用でも)使用する権利があります。しかし、中にはChatGPTの学習データの中には著作権を有するものもあるため、ChatGPT、DALL・Eが生成したコンテンツだからと言って利用してしまうと、著作権に引っかかる恐れが少なからずあります。著作権を有しているコンテンツを生成できない仕様にはなっているようですが、完全とは言えないため注意が必要です。

  3. 具体的に詳細を伝える
    より詳細なプロンプトを記述することで、生成される画像の品質が向上する可能性が高いです。上画像のプロンプト「ほのぼのした猫を描いてください」を例とすると、「かわいらしい、ふっくらとした白い子猫が柔らかいパステルピンクの枕の上で寝ている様子を描いてください。背景はミニマルなデザインで、薄いベージュの壁と枕の隣に小さな鉢植えの植物が置かれています。柔らかい日差しが影を落とし、暖かく穏やかな雰囲気を作り出しています。」と言ったようにより具体的に詳細に伝えると自分が思ったような画像が生成される可能性が高いです。

    コメント 2024-12-23 160702.png

DALL・EのAPIで画像を生成する

ここからはAPIを用いたコードを用いるため、少しエンジニア向けの内容となります。
APIを用いることで、他のアプリケーションやサービスとの統合が可能となるため、アプリケーションに画像生成機能を追加できるといった利用の幅が広がります。

モデルについて

現状(2024年12月現在)のDALL・EモデルはDALL・E 2DALL・E 3の2つのモデルがあります。DALL・E 2はGPT-3をベースとした画像生成モデルです。DALL・E 3は前者の後継モデルで、入力情報の理解力や画像生成の品質が向上しています。また、英語以外の言語にも対応できるようになっています。
現状ではChatGPT版で用いられているモデルはDALL・E 3となっています。

料金・制限

現在のモデルの使用料は以下のようになっています。
高精度なだけあり、DALL・E 3の方が料金は高いです。同じサイズの「1024×1024(標準)」だと2倍の差があります。1ドル150円換算で計算すると、「1024×1024(標準)」1枚の料金はDALL・E 2は3円、DALL・E 3は6円となっています。自力で絵やイラストを描く労力またはデザイナーへのライセンス料を考慮するとかなり安いと言えるのではないでしょうか。しかし、プログラムの設計ミスによりリクエストを想定よりも多く投げてしまう可能性もあるため、OpenAI APIのプラットフォーム > Organization > Limits > Usage limitsでAPIの制限をかけておくことをおすすめします。
また、GPT側での使用制限もあり、Free Tier(5ドルの支払いをしていないアカウント)では、1分間あたりDALL・E 2は5枚、DALL・E 3は1枚までの制限があります。
コメント 2024-12-23 161029.png

事前準備

  • APIキーの発行・設定
    DALL・EをAPIで使うには、OpenAI APIキーを発行しておく必要があります。
    OpenAI APIのプラットフォーム > (自分のprojecct) > API keys > Create new secret
    keyボタンからAPIキーを発行することができます。
    発行したAPIキーを環境変数に「OPENAI_API_KEY」という変数名で設定しておきましょう。

  • openaiのインストール
    OpenAIをpythonで使うためのライブラリ「openai」をインストールしておく必要があります。
    筆者は、1.7.2のバージョンを用いています。動作に不安がある方は同じバージョンでインストールすることをおすすめします。
    ターミナルで以下のコマンドを実行すると、openaiをインストールできます。
(ターミナル)
pip install openai==1.7.2

実装

Open AI の画像生成APIでは、画像を生成・操作するための3つのメソッドがあります。
それぞれ紹介していきたいと思います。

1. generate

このメソッドは0からプロンプトで画像を生成するためのメソッドで、DALL・E 2DALL・E 3どちらもサポートされています。
client.imagesのgenerateメソッドにはいくつかのパラメータを設定します。

  • model: DALL・Eのモデルの種類(“dall-e-2” または “dall-e-3”で指定)
  • prompt: DALL・Eの画像生成AIに渡すプロンプト(特にDALL・E 2では英語推奨)
  • size: 画像の解像度の指定(モデルによって指定できるサイズが異なるため注意)
    ※掛けるを「x」で表します。
  • n: 一度のリクエストで生成する画像の枚数(DALL・E 3は1のみ指定可)
  • quality: 画像の品質(DALL・E 3のみ指定、”standard” または “hd”で指定 )


(DALL・E 2)

(Python)
from openai import OpenAI
import os
import urllib.request

save_path  = 'save_pictures'

client = OpenAI(
    api_key = os.environ["OPENAI_API_KEY"] #環境変数からAPI Keyから取得し、OpenAIに設定
)
     
response = client.images.generate(
    model = "dall-e-2",
    prompt = "running dog",
    size="256x256",
    n = 3
)

#結果出力確認
print(response)

for i, image in enumerate(response.data):
        urllib.request.urlretrieve(image.url, save_path + f"/dog_image-{i+1}.png")


[出力画像]


(DALL・E 3)

(Python)
response = client.images.generate(
    model = "dall-e-3",
    quality="standard",
    prompt = "running dog",
    size="1024x1024",
    n = 1
)


[出力画像]
dog_image_v3-1.png

2. edit

新しいテキストプロンプトに基づいて、モデルに既存の画像の一部を置き換えさせることにより、画像の編集をすることができます。
入力には「オリジナル画像」、「その画像の編集したい場所をマスクとして切り取った画像」、「マスク部分をどう修正したいかを指示するプロンプト」の3つの情報が必要です。
DALL・E 2でのみ使用できます。
editメソッドは、generateメソッドで指定したパラメータに加えて、先ほどの3つの情報をパラメータとして指定する必要があります。

  • image: オリジナル画像の指定(バイナリデータとして読み込み)
  • mask: その画像の編集したい場所をマスクとして切り取った画像の指定(バイナリデータとして読み込み)
    ※編集する領域は白(透過すると良い)、編集しない領域は黒とすると動作しやすい
  • prompt: マスク部分をどう修正したいかを指示するプロンプト

(Python)
from openai import OpenAI
import os
import urllib.request

save_path  = 'save_pictures'
source_path = 'source_pictures'

client = OpenAI(
    api_key = os.environ["OPENAI_API_KEY"]
)
     
response = client.images.edit(
model="dall-e-2",
image=open(source_path + "/cat_sleeping_day.png", "rb"),
mask=open(source_path + "/cat_sleeping_day_mask_fixed.png", "rb"),
prompt="dark night sky and moon",
n=1,
size="1024x1024"
)

#結果出力確認
print(response)

urllib.request.urlretrieve(response.data[0].url, save_path + "/cat_sleeping_night.png")


[入力画像]

(image)
(mask)


[出力画像]
cat_sleeping_night.png

3. variation

入力画像に対して似たような画像、すなわちバリエーションを作成できます。DALL・E 2でのみ使用できます。
パラメータはgenerateメソッドとほとんど同じですが、指示する必要がないためpromptパラメータは不要です。

(Python)
from openai import OpenAI
import os
import urllib.request

save_path  = 'save_pictures'
source_path = 'source_pictures'

client = OpenAI(
    api_key = os.environ["OPENAI_API_KEY"]
)
     
response = client.images.create_variation(
model="dall-e-2",
image=open(source_path + "/dog_and_cat.png", "rb"),
n=1,
size="1024x1024"
)

#結果出力確認
print(response)

urllib.request.urlretrieve(response.data[0].url, save_path + "/cat_and_dog_variation.png")


[入力画像]
dog_and_cat.png[出力画像]
cat_and_dog_variation.png

まとめ

この記事ではChatGPTでのDALL・Eの使い方とOpenAI APIでDALL・Eのモデルを用いて画像生成・操作する方法を紹介しました。
基本的に生成した画像は著作権フリーで使えるため、画像に困ったら積極的に活用していくのが良いと思います。また、APIを用いて画像生成を自動化できたり、大量の画像を一度に処理できたりと活用の幅が広がるので、こちらも使っていきたいところです。
Gluegent FlowでもAIのAPIを用いて作成したスクリプト自動生成機能があるので、是非活用してみていただけると嬉しいです。