2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenAIのGPT Image 1のWeb API呼び出しをPythonで実装して画像生成した記録

Posted at

Supershipの名畑です。ウィッチウォッチはジャンプで毎週読んでいてお気に入りの作品ですが、OPEDも含めてアニメの出来がかなり良く、新鮮な気持ちで楽しんでいます。OPの魔法失敗ver.を見て、アニメってすごいと再実感。

はじめに

 OpenAIは2025年3月25日(米国時間、以下同)、「GPT-4o」に組み込まれた新たな画像生成機能を発表した。同日より、ChatGPTのデフォルト(既定)の画像生成機能として「Free」「Plus」「Pro」「Team」プランのユーザーに提供を開始している。

 ChatGPTでGPT-4oを選択し、チャット上で画像の作成やカスタマイズを指示できる。画像のアスペクト比、16進コードを使用した色の指定、背景の透過など、画像の仕様とともに画像で表現したい内容をチャットで指示すると、最大1分程度で詳細な画像が生成される。

参考:「GPT-4o」の新たな画像生成機能は、OpenAIが開発してきた画像生成AI「DALL-E」と何が違うのか:日本語にも対応、SNSで話題に - @IT

先月OpenAIよりリリースされました新たな画像生成機能がかなりの話題を巻き起こしました。

本機能が先日よりAPI経由でも呼べるようになりました。

GPT Image 1 is our new state-of-the-art image generation model. It is a natively multimodal language model that accepts both text and image inputs, and produces image outputs.

参考:OpenAI Platform

本APIの呼び出しをPythonで実装してみたというのが今回の記事の内容になります。すでに多くの方が試した後だとは思います。

公式ドキュメント

環境

私の環境はmacOSです。
Pythonはすでにインストール済みです。

OpenAIのライブラリ(Pythonバインディング)をインストールしておきます。

$ pip install openai

OpenAIのアカウント作成

OpenAI platformでアカウント作成をします。
メールアドレス(電話での認証あり)、Google、Microsoft Accountのいずれかが使えます。

API key発行

サインイン後のAPI keysのページで行えます。Create new secret keyを押して、名前(optional)をつけるだけです。
API keyは作成時しか画面に表示されませんので気をつけてください。画面上から後で知る方法はありません。

取得したAPI keyはハードコーディングを避けるため環境変数に設定します。

私の環境での設定ファイルはzshrcです。

$ open ~/.zshrc

公式に倣いOPENAI_API_KEYという環境変数名としました。

export OPENAI_API_KEY=ここに取得したAPI keyを書く

認証

GPT Image 1にアクセスするためには、Organization settingsのページで認証が必要です。

Verify Organizationを押すとID Checkのポップアップが表示されます。

openai_image_api_1.png

最初に居住地として「日本」を選ぶと、以下から一つ選ぶようにと表示されました。

  • 運転免許証
  • パスポート
  • 在留カード
  • マイナンバーカード
  • ビザ

完了後、15分ほど経つとAPIの呼び出しができるようになります。

画像生成

実際に画像を生成してみます。

コード

API reference - Create imageによるとサイズや画質や透過背景など多くのパラメータが指定可能ですが、まずはシンプルにモデルとプロンプトの指定だけで画像を生成してみます。

from openai import OpenAI
import os
import base64

client = OpenAI()
client.api_key = os.getenv("OPENAI_API_KEY")  # API keyのセット
response = client.images.generate(
    model="gpt-image-1",  # モデル
    prompt="28-year-old Japanese pretty woman with black bobbed hair"  # プロンプト
)

# 画像保存
with open("gpt-image-1-sample-1.png", "wb") as f:
    f.write(base64.b64decode(response.data[0].b64_json))

プロンプトは「28-year-old Japanese pretty woman with black bobbed hair」です。
日本語訳すると「黒髪ボブヘアの28歳の可愛い日本人女性」になります。
比較のために、過去記事OpenAIのDALL·E 3のWeb API呼び出しをPythonで実装して画像生成した記録で用いたのと同様のプロンプトとしました。もう1年半前の記事になるんですね。

画像

生成された画像はこちら。

gpt-image-1-sample-1.png

かなりリアルな画像に思えます。
プロンプトの再現度が高いと感じます。

元画像ありでの画像生成

API reference - Create image editを参考に、元画像ありでの画像生成を試してみます。

imageとして先ほど生成した画像を指定し、プロンプトは「Please make the woman in the attached picture wear glasses」としました。
日本語訳すると「添付画像の女性に眼鏡をかけさせてください」ですね。

from openai import OpenAI
import os
import base64

client = OpenAI()
client.api_key = os.getenv("OPENAI_API_KEY")  # API keyのセット

response = client.images.edit(
    model="gpt-image-1",  # モデル
    image=open("gpt-image-1-sample-1.png", "rb"),  # 画像
    prompt="Please make the woman in the attached picture wear glasses"  # プロンプト
)

# 画像保存
with open("gpt-image-1-sample-2.png", "wb") as f:
    f.write(base64.b64decode(response.data[0].b64_json))

画像

生成された画像はこちら。

gpt-image-1-sample-2.png

服の質感や肌や歯など、完全に同じというわけではないですが、元画像の再現度がかなり高く生成されました。

最後に

非常に汎用性高く使えそうです。

流石の素晴らしい進化だと感じました。

宣伝

SupershipのQiita Organizationを合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。

Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方はSupership株式会社 採用サイトよりご確認ください。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?