Azure OpenAIのDALL·E 2とDALL·E 3を実行してみた

本記事は  OpenAI活用法 Advent Calendar 2023 by ナレコム  の12日目の記事です。

OpenAI活用法 Advent Calendar 2023 by ナレコム ではGPTsを含めた最新のOpenAIの活用法について紹介します。

はじめに

2023年12月現在、人工知能の分野では、画像生成技術が注目を集めています。特に、OpenAIが開発したDALL-Eシリーズは、その進化と応用範囲の広さで多くの関心を引いています。この記事では、Microsoft Azureプラットフォーム上で利用可能な2つのバージョン、DALL-E 2とDALL-E 3の比較を行います。

DALL-E 2とDALL-E 3は、それぞれ異なるAPIバージョン、ライブラリの要件、さらには異なるAzureリージョンでの展開によって特徴づけられています。このような違いが実際の使用にどのような影響を与えるのか、同じプロンプト「A painting of a dog」(犬の絵)を用いて両者を比較し、それぞれの特徴と利用方法の違いを探ります。

2023年12月現在、Azure上ではDALL·E 2とDALL·E 3の両方を実行することができます。ただし、以下のように大きく異なります。

主な違い

項目 DALL·E 2 DALL·E 3
API Version 2023-06-01-preview 2023-12-01-preview
OpenAI Pythonライブラリ 0.28.1のみ 1.x系
Azureリージョン East US Sweden Central

上記の違いから同一環境で動作させることができません。この2つに対して同一のプロンプトで実行して比較してみました。

事前準備

下図を参考に、それぞれのリージョンの エンドポイント と キー を取得します。

image.png

DALL·E 2を動かす

まず、OpenAI Pythonライブラリのバージョンを下げる必要があります。

pip install openai==0.28.1
import openai
import os
import requests

from PIL import Image

# 環境変数からエンドポイントとキーを取得

openai.api_base = <EastUSのエンドポイント>
openai.api_key = <EastUSのキー>     

# APIバージョンを指定 (DALL-Eは現在 '2023-06-01-preview' のAPIバージョンのみサポート)

openai.api_version = '2023-06-01-preview'
openai.api_type = 'azure'

# 画像生成APIを使用して画像を作成

generation_response = openai.Image.create(
    prompt='A painting of a dog',    # ここにプロンプトのテキストを入力
    size='1024x1024',
    n=2
)

# 保存用のディレクトリを設定

image_dir = os.path.join(os.curdir, 'images')

# ディレクトリが存在しない場合は作成

if not os.path.isdir(image_dir):
    os.mkdir(image_dir)

# 画像パスを初期化 (ファイルタイプはpngであるべきです)

image_path = os.path.join(image_dir, 'generated_image.png')

# 生成された画像を取得

image_url = generation_response["data"][0]["url"]  # レスポンスから画像URLを抽出
generated_image = requests.get(image_url).content  # 画像をダウンロード
with open(image_path, "wb") as image_file:
    image_file.write(generated_image)

# デフォルトの画像ビューアで画像を表示

image = Image.open(image_path)
image.show()

レスポンス
d2.png

d2.png

DALL·E 3を動かす

今度は、OpenAI Pythonライブラリのバージョンを上げる必要があります。

pip install openai>1.0
from openai import AzureOpenAI
import os
import requests

from PIL import Image
import json

client = AzureOpenAI(
    api_version="2023-12-01-preview",  
    api_key=<SwedenCentralのエンドポイント>,  
    azure_endpoint=<SwedenCentralのエンドポイント>
)

result = client.images.generate(
    model=<DALL-E 3デプロイ名>, # あなたのDALL-E 3デプロイメントの名前
    prompt="A painting of a dog",
    n=1
)

json_response = json.loads(result.model_dump_json())

# 保存する画像のディレクトリを設定

image_dir = os.path.join(os.curdir, 'images')

# ディレクトリが存在しない場合は作成

if not os.path.isdir(image_dir):
    os.mkdir(image_dir)

# 画像パスを初期化 (ファイルタイプはpngであるべきです)

image_path = os.path.join(image_dir, 'generated_image.png')

# 生成された画像を取得

image_url = json_response["data"][0]["url"]  # レスポンスから画像URLを抽出
generated_image = requests.get(image_url).content  # 画像をダウンロード
with open(image_path, "wb") as image_file:
    image_file.write(generated_image)

# デフォルトの画像ビューアで画像を表示

image = Image.open(image_path)
image.show()

レスポンス
d3.png

d3.png

まとめ

この記事では、Azure上で利用可能なDALL-E 2とDALL-E 3の主な違いとそれぞれの特性について詳しく見てきました。重要なポイントを振り返ると、以下のようになります。

1. APIバージョンとライブラリ

: DALL-E 2は「2023-06-01-preview」APIバージョンとOpenAI Pythonライブラリのバージョン0.28.1を使用します。一方、DALL-E 3では「2023-12-01-preview」APIバージョンと1.x系のライブラリが必要です。

2. Azureリージョンの違い

: DALL-E 2はEast USリージョンでのみ利用可能ですが、DALL-E 3はSweden Centralリージョンで展開されています。

3. 画像生成の結果

: 同じプロンプト「A painting of a dog」を使用した際、DALL-E 2とDALL-E 3はそれぞれ異なる視覚的特性とスタイルを示しました。これは、両バージョンの技術的進歩とアプローチの違いを反映しています。

この比較を通じて、DALL-E 2とDALL-E 3の使い方、それぞれのユニークな特徴、そして最新の画像生成AI技術の可能性についての理解を深めることができたと思います。

また、ナレッジコミュニケーションでは 「[Musubite](https://recruiting.musubite-job.com/features/company/knowledge-communication)」 というエンジニア同士のカジュアルトークサービスを利用しています!この記事にあるような生成AI 技術を使ったプロジェクトに携わるメンバーと直接話せるサービスですので興味がある方は是非利用を検討してください!

この記事を書いた人

azure-recipe-user