画像認識API「GPT-4 Turbo with Vision」の使い方を詳しく紹介!

第1章 「Vision API」の概要

1-1 「Vision API」とは

Vision APIとは画像解析を行うAPIであり、モデルが画像ファイルの入力に対して、画像解析をしてくれます。

ちなみにAPIとは「Application(アプリケーション) Programming(プログラミング) Interface(インターフェース)」の略で、異なるソフトウェアやWebサービスでの情報のやり取りをつなぐインターフェースを指します。

1-2 「GPT-4 Turbo with Vision」とは

そもそもChatGPT APIとは何かについてはこちらの記事で詳しく解説しています(リンク)

今回はVision APIの中でもOpenAIのGPT-4 Turbo with VisionAPIではGPT-4Vまたはgpt-4 Turo-vision-previewと呼ばれることもあります)について触れていきます。

GPT-4 Turbo with VisionはGPT4-Turboと同じく128000トークンまで入力可能です!

ただし、GPT-4 Turbo with Visionについて触れるにあたり、以下の前提を押さえておいてください。

・GPT-4 Turbo with vision:モデル名はgpt-4-vision-preview(GPT-4 Turboのモデル名はgpt-4-1106-previewであり別物)

・GPT-4 Turbo with visionは、会話に自動的に挿入されるシステムメッセージにより、GPT-4 Turboとは若干異なる動作をする場合がある。

・GPT-4 Turbo with visionはGPT-4 Turbo preview modelと同様のテキストタスクパフォーマンスを発揮するのに加えて、ビジョン機能が追加されている。

・Vision(画像認識機能)はこのモデルが多く持っている機能の1つにすぎない。

それでは、GPT-4 Turbo with Visionについて見ていきましょう。

ChatGPTについてはこちらで詳しく紹介しています。


                     🔼「AITech」がオススメする初心者〜上級者まで学べるAIスクールです!🔼

    第2章 「GPT-4 Turbo with Vision」の使い方

    画像は主に2つの方法でモデルに提供されます: 画像へのリンクを渡すかbase64でエンコードされた画像をリクエストに直接渡すかです。

    画像はusersystemassistantの各メッセージで渡すことができます。現在のところ、最初のsystemメッセージでは画像をサポートしていませんが、将来的には変更されるかもしれません。

    2-1 URLの入力

    実際に「GPT-4 Turbo with Vision」にURLの画像入力をすると以下のようになります。

    from openai import OpenAI
    
    client = OpenAI()
    
    response = client.chat.completions.create(
    model="gpt-4-vision-preview",
    messages=[
    {
    "role": "user",
    "content": [
    {"type": "text", "text": "What’s in this image?"},
    {
    "type": "image_url",
    "image_url": {
    "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
    },
    },
    ],
    }
    ],
    max_tokens=300,
    )
    
    print(response.choices[0])

    modelにはgpt-4-vision-previewを指定しています。これによって画像の入力が可能となります。

    roleにはGPTの役割を指定します。“system”は「システムの指示」を、”user”は「ユーザーからの指示」を、”assistant”は「アシスタントの回答(GPTに求める回答例)」を意味します。

    typeにimage urlを指定し、その後urlを入力することで画像の入力を行います。

    max_toxensは最大トークン数のことで、引き上げることも可能です。ただし料金が上がる可能性があります。(料金については3章で説明しています。)

    2-2 base64でエンコードされた画像の入力

    実際に「GPT-4 Turbo with Vision」にbase64でエンコードされた画像の入力をすると以下のようになります。

    import base64
    import requests
    
    # OpenAI API Key
    api_key = "YOUR_OPENAI_API_KEY"
    
    # Function to encode the image
    def encode_image(image_path):
    with open(image_path, "rb") as image_file:
    return base64.b64encode(image_file.read()).decode('utf-8')
    
    # Path to your image
    image_path = "path_to_your_image.jpg"
    
    # Getting the base64 string
    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": "What’s in this image?"
    },
    {
    "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())

    2-3 複数の画像入力

    「GPT-4 Turbo with Vision」は複数の画像入力をbase64エンコード形式または画像URLの両方で取り込んで処理することができます。モデルはそれぞれの画像を処理し、質問に答えるためにそれらすべての情報を使用します。

    実際に「GPT-4 Turbo with Vision」にURLで複数の画像を入力すると以下のようになります。

    from openai import OpenAI
    
    client = OpenAI()
    response = client.chat.completions.create(
    model="gpt-4-vision-preview",
    messages=[
    {
    "role": "user",
    "content": [
    {
    "type": "text",
    "text": "What are in these images? Is there any difference between them?",
    },
    {
    "type": "image_url",
    "image_url": {
    "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
    },
    },
    {
    "type": "image_url",
    "image_url": {
    "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",
    },
    },
    ],
    }
    ],
    max_tokens=300,
    )
    print(response.choices[0])

    この方法では、モデルは同じ画像のコピーを2つ見せられ、両方またはそれぞれの画像に関する質問に独立して答えることができます。

    2-4 解像度の設定

    GPT-4 with Visionの解像度の設定には、lowhighautoの3つのオプションがあります。これら3つのdetailパラメータをコントロールすることで、モデルがどのように画像を処理し、テキスト理解を生成するかをコントロールすることができます。

    デフォルトでは、モデルはautoを使用し、画像の入力サイズを見て、lowを使用するかhighを使用するかを決定します。

    lowは「高解像度」モデルを無効にします。モデルは画像の低解像度バージョン512px x 512pxを受け取り、65トークンの予算で画像を表現します。これにより、APIはより高速なレスポンスを返し、高詳細を必要としないユースケースのために少ない入力トークンを消費することができます。

    high “high res “モードを有効にします。これはまずモデルに低解像度の画像を表示させ、次に入力画像のサイズに基づいて512pxの正方形として入力画像の詳細なクロッピングを作成します。各詳細クロップは、トークン予算の2倍(64.65トークン)、合計129トークンを使用します。

    解像度を設定するには”url”で画像リンクを貼り付けた後に、

    "detail":high

    を追加します。

    2-5 画像の管理

    同じ画像を複数回モデルに渡したい場合、API にリクエストするたびに画像を渡す必要があります。

    長時間の会話を行う場合は、base64ではなくURLで画像を渡すことをお勧めします。

    モデルの返答速度は、事前に画像を最大サイズよりも小さくすることによっても改善できます。

    低解像度モードでは、512px x 512pxの画像を想定しています。高解像度モードの場合、画像の短辺は768px以下、長辺は2,000px以下でなければなりません。

                     🔼「AITech」がオススメする初心者〜上級者まで学べるAIスクールです!🔼

    第3章 「GPT-4 Turbo with Vision」の料金と注意点

    「GPT-4 Turbo with Vision」の料金

    画像入力はテキスト入力と同様に、トークンで課金されます。

    与えられた画像のトークンコストは、サイズと各image_urlブロックのdetailオプション2つの要素によって決定されます。

    detail:low(低画質)の場合

    detail:low(低画質)の画像はすべて固定で85トークンかかります。解像度をlowに設定した場合はどれほど大きな画像を渡しても85トークンです。

    detail:high(高画質)の場合

    detail:high(高画質)の画像は、まず縦横比を維持したまま2048×2048の正方形に収まるように拡大縮小されます。次に、画像の最も短い辺の長さが768pxになるように拡大縮小されます。最後に、画像が何個の512pxの正方形で構成されているかを数えられます。

    この512pxの正方形の数あたり170トークンかかります。さらに85トークンが常に最終合計に加えられます。

    3-2 「GPT-4 Turbo with Vision」の注意点

    このモデルは、画像に何が写っているかという一般的な質問に答えるのに最も適しています。

    しかし、画像内のオブジェクト間の関係は理解できるが、画像内の特定のオブジェクトの位置に関する詳細な質問に答えるにはまだ適していません。

    例えば、車の色を聞いたり、冷蔵庫の中にあるものから夕食のアイデアを聞いたりすることはできますが、部屋の画像を見せて椅子の場所を聞いても、正しく答えられないかもしれません。

    また、function-callingやJSONモードは使えないです。この点はGPT4-Turboと異なりますので注意してください。

    さらに、OpenAI公式によれば以下のような機能も限界があると公表されています。(詳しくはこちらをご参照ください。)

    ・医療画像: このモデルはCTスキャンのような特殊な医療画像の解釈には適していません。

    ・非英語: 日本語や韓国語のような非ラテンアルファベットのテキストを含む画像を扱う場合、モデルは最適に動作しない可能性があります。

    ・大きなテキスト: 読みやすさを向上させるために画像内のテキストを大きくしますが、重要な詳細は切り取らないようにしてください。

    ・回転: 回転/上下逆さまのテキストや画像は、モデルが誤って解釈する可能性があります。

    ・視覚的要素: 実線、破線、点線などの色やスタイルが異なるグラフやテキストを理解するのに苦労することがあります。

    ・空間的推理: チェスのポジションの特定など、正確な空間定位が必要なタスクに苦戦することがあります。

    ・正確さ: 特定のシナリオにおいて、誤った説明やキャプションを生成することがあります。

    ・画像の形状: パノラマ画像や魚眼画像は苦手です。

    ・メタデータとリサイズ: このモデルは、元のファイル名やメタデータを処理しません。また、画像は分析前にリサイズされ、元のサイズに影響を与えます。

    ・カウント: 画像内のオブジェクトのおおよそのカウントが可能です。

    ・CAPTCHA: 安全上の理由から、CAPTCHAの提出をブロックするシステムを実装しています。


    第4章 まとめ

    この記事ではVison APIの概要と使い方を詳しく解説しました。

    エンジニアでなくてもVision APIの概要を知り、Vision APIを使いこなすことができることは非常に大きい事だと思います。

    今後GPT Storeが登場すれば収益化も見込めるので今のうちにとことん研究するのが良いかと思います!

    執筆者:尾形悠太

    この記事は役に立ちましたか?

    もし参考になりましたら、下記のボタンで教えてください。

    関連記事

    コメント

    この記事へのコメントはありません。