1. GPT-4 Vision モデルの紹介

GPT-4 Vision モデル(GPT-4V)は、OpenAIによって導入されたマルチモーダル人工知能モデルであり、GPT-4に基づく視覚理解機能を統合しています。従来のテキスト処理モデルとは異なり、GPT-4V は画像コンテンツを受け取り、分析し、画像に関連する説明、質問への回答、および対話を提供することができます。

例示される応用例:

  • 商品の認識と分類:Eコマースプラットフォームは、GPT-4V を使用して商品画像を識別し、説明を提供することで、検索および推薦システムを改善することができます。
  • 医療判断の支援:GPT-4V は直接的な専門的な医療画像診断には適していませんが、医療従事者が初期の画像理解やデータ整理を支援することができます。
  • 教育と研究:教育や科学的研究において、GPT-4V はグラフや実験結果を分析し、科学的画像データを自動的に解釈することができます。
  • 交通監視と分析:交通監視画像の分析により、GPT-4V は交通管理システムにリアルタイムの状況報告や事故の特定を支援することができます。

2. 簡単な例

以下は、CURLリクエストを使用して画像を分析するための GPT-4 Vision モデルの使用方法を示す簡単な例です。

APIリクエストのパラメータ:

  • model:使用するモデルバージョンを指定します。この場合は "gpt-4-vision-preview" です。
  • messages:役割の定義とコンテンツを含むメッセージで、コンテンツにはテキストと画像リンクを含めることができます。
  • max_tokens:生成されるテキストの最大長を指定します。

CURLリクエストの例:

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4-vision-preview",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "この画像には何が写っていますか?"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "あなたの画像リンク"
            }
          }
        ]
      }
    ],
    "max_tokens": 300
  }'

上記のリクエストでは、画像を GPT-4 Vision モデルに送信し、簡単な質問「この画像には何が写っていますか?」を行います。モデルは画像コンテンツを分析し、その内容に基づいて回答を提供します。

3. Base64エンコードを使用した画像のアップロード

一部の場合では、ローカルの画像ファイルを GPT-4 Vision モデルにアップロードする必要があります。そのような場合には、base64エンコーディングを使用して画像データをAPIリクエストに埋め込むことができます。

Pythonコードの例:

import base64
import requests

api_key = "YOUR_OPENAI_API_KEY"

def encode_image(image_path):
  with open(image_path, "rb") as image_file:
    return base64.b64encode(image_file.read()).decode('utf-8')

image_path = "path_to_your_image.jpg"

base64_image = encode_image(image_path)

headers = {
  "Content-Type": "application/json",
  "Authorization": f"Bearer {api_key}"
}

payload = {
  "model": "gpt-4-vision-preview",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "この画像には何が写っていますか?"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{base64_image}"
          }
        }
      ]
    }
  ],
  "max_tokens": 300
}

response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)

print(response.json())

上記のコードでは、まずローカルの画像ファイルを base64エンコードされた文字列に変換し、その後、この文字列をリクエストの一部としてAPIに送信します。モデルの応答には、画像内容の説明が含まれます。

4. 複数の画像入力の処理

時には複数の画像を同時に分析する必要があります。GPT-4 Vision モデルは、複数の画像入力を同時に受け取り、これらの画像について質問したり、その違いを比較したりすることができます。

複数画像入力例:

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-4-vision-preview",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "これらの画像に違いはありますか?"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "最初の画像のURL",
            }
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "2番目の画像のURL",
            }
          }
        ]
      }
    ],
    "max_tokens": 300
  }'

このリクエストでは、2つの画像をAPIに送信します。モデルはそれぞれの画像を個別に分析し、提示された質問に基づいて説明や比較を提供します。このアプローチは、複数の画像の全体的な分析に最適です。

5. 画像解析の詳細レベルの設定

GPT-4ビジュアルモデルを使用して画像解析を行う際、必要に応じて詳細レベルを設定することができます。detailパラメータを調整することで、lowhigh、またはautoのいずれかを選択できます。各オプションの詳細な説明と設定方法を以下に示します:

  • low: 低い詳細レベルを選択すると、「高解像度」モデルが無効になります。このモデルは、画像の低解像度バージョン(512ピクセル×512ピクセル)を受け取り、画像を表現するために65トークンの予算を使用します。これは高い詳細が必要ないシナリオに適しており、迅速な応答時間を実現し、より少ない入力トークンを消費します。

  • high: 高い詳細レベルでは、モデルはまず低解像度の画像を見てから、入力画像のサイズに基づいて512ピクセルのグリッド上で詳細に切り取られたバージョンを作成します。それぞれの詳細には、デフォルトの詳細の倍の予算である129トークン(つまり、デフォルトの切り取りごとに65トークン)で表現されます。

  • auto: 自動詳細レベルでは、入力画像のサイズに基づいてlowまたはhighの詳細レベルを使用するかを決定します。

以下のコード例は、詳細レベルの設定方法を示しています:

import base64
import requests

api_key = "あなたのOPENAI_API_KEY"

image_path = "あなたの画像のパス.jpg"

base64_image = base64.b64encode(open(image_path, "rb").read()).decode('utf-8')

headers = {
  "Content-Type": "application/json",
  "Authorization": f"Bearer {api_key}"
}

payload = {
  "model": "gpt-4-vision-preview",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "この画像に何が写っていますか?"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{base64_image}",
            "detail": "high"  # 詳細レベルをhighに設定
          }
        }
      ]
    }
  ],
  "max_tokens": 300
}

response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)

print(response.json())

6. モデルの制限の理解と画像の管理

6.1. モデルの制限

GPT-4ビジュアルモデルは強力な機能を持っていますが、制限もあります。これらの制限を理解することは画像理解において重要です。いくつかの既知の制約について概要を説明します:

  • 医療画像: モデルはCTスキャンなどの専門的な医療画像の解釈に適しておらず、医療アドバイスに使用すべきではありません。

  • 非英語テキスト: モデルは日本語や韓国語などの非ラテン文字のテキストを含む画像を処理する際にはうまく機能しない場合があります。

  • 空間的局所化: モデルのパフォーマンスは、チェス盤の駒の位置を特定するなど、正確な空間的位置の関連付けを必要とするタスクで最適ではありません。

  • 画像の詳細: モデルは、画像内のグラフや色やスタイルの変化(実線、破線など)を持つテキストや図を理解するのに苦労する場合があります。

  • 画像の回転: モデルは歪んだまたは上下逆さまの文字や画像を誤解する場合があります。

6.2 セッションでの画像の管理

Chat Completions API は状態を保持しないため、モデルに渡すメッセージ(画像を含む)の管理は自分で行う必要があります。同じ画像を複数回使用したい場合は、各APIリクエストで画像データを再送する必要があります。

additional_payload = {
  "model": "gpt-4-vision-preview",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "この画像を基に、どんな提案がありますか?"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": f"data:image/jpeg;base64,{base64_image}"
          }
        }
      ]
    }
  ],
  "max_tokens": 300
}

new_response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=additional_payload)

print(new_response.json())

7. コストの計算

detail: low オプションを使用する画像ごとに固定の85トークンが消費されます。detail: high オプションを選択した画像では、画像はまず2048px x 2048pxのサイズに比例してスケーリングされ、その後画像の短辺が768pxになるように調整されます。そして、画像は複数の512px四角に分割され、各四角ごとに170トークンが消費され、最終的な合計には追加で85トークンが加算されます。

例えば、画像のサイズが1024px x 1024pxで、detail: high オプションを選択した場合、トークンのコストは次のようになります:

  • まず、1024が2048よりも小さいため、初期のサイズ調整はありません。
  • 次に、短辺が1024になるように、画像が768 x 768にリサイズされます。
  • 画像を表すためには4つの512px四角が必要なので、最終的なトークンのコストは170 * 4 + 85 = 765 になります。

コスト計算方法の詳細については、GPT-4 Vision モデルのドキュメントを参照してください。

8. よくある質問

以下は、GPT-4 Vision モデルを使用する際にユーザーが遭遇する可能性がある一般的な質問とそれに対する回答です:

Q: gpt-4の画像機能を微調整することはできますか?

A: 現時点では、gpt-4の画像機能の微調整はサポートされていません。

Q: gpt-4を使用して画像を生成することはできますか?

A: いいえ、画像の生成には dall-e-3 を使用し、画像の理解には gpt-4-vision-preview を使用できます。

Q: サポートされているファイルのアップロード形式は何ですか?

A: 現時点では、PNG (.png)、JPEG (.jpeg および .jpg)、WEBP (.webp)、アニメーションのないGIF (.gif) ファイルがサポートされています。