Visual Question & Answering(VQA)機能を使用して画像情報を取得する

Visual Question & Answering(VQA)機能を使用すると、モデルに画像を渡して画像の内容について質問できます。質問に対して、自然言語の回答が 1 つ以上返されます。

コンソールに表示される VQA の画像、質問、回答のサンプル
画像の出典(Google Cloud コンソールに表示): Sharon Pittaway 氏Unsplash より
プロンプトの質問: 画像に写っているものは何?
回答 1: ビー玉
回答 2: ガラスのビー玉

サポートされている言語

VQA は以下の言語でご利用いただけます。

  • English (en)

パフォーマンスと制限事項

このモデルを使用するときは次の上限が適用されます。

上限
各プロジェクト 1 分あたりの最大 API リクエスト数(短形式) 500
レスポンスで返されるトークンの最大数(短形式) 64 トークン
リクエストで受け入れられるトークンの最大数(VQA の短形式のみ) 80 トークン
レスポンスで返されるトークンの最大数(長形式) 512 トークン

このモデルを使用する場合は、次のサービス レイテンシの見積もりが適用されます。これらの値は例示を目的としたものであり、サービスを約束するものではありません。

レイテンシ
API リクエスト(短形式) 1.5 秒
API リクエスト(長形式) 4.5 秒

ロケーション

ロケーションは、データの保存場所を制御するためにリクエストで指定できるリージョンです。使用可能なリージョンの一覧については、Vertex AI の生成 AI のロケーションをご覧ください。

画像で VQA を使用する(短形式のレスポンス)

次のサンプルを使用して画像について質問し、回答を得てみましょう。

コンソール

  1. Google Cloud コンソールの Vertex AI ダッシュボードで [Vertex AI Studio] > [ビジョン] タブを開きます。

    [Vertex AI Studio] タブに移動

  2. 下部のメニューで [Visual Q&A] をクリックします。

  3. [画像のアップロード] をクリックして、キャプションを付けるローカル画像を選択します。

  4. [パラメータ] パネルで、キャプション数言語を選択します。

  5. プロンプトのフィールドに、アップロードした画像に関する質問を入力します。

  6. [Submit] をクリックします。

REST

imagetext モデル リクエストの詳細については、imagetext モデル API リファレンスをご覧ください。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクト ID
  • LOCATION: プロジェクトのリージョン。たとえば、us-central1europe-west2asia-northeast3 です。使用可能なリージョンの一覧については、Vertex AI の生成 AI のロケーションをご覧ください。
  • VQA_PROMPT: 回答を得たい画像に関する質問。
    • この靴は何色?
    • シャツの袖の種類を教えて。
  • B64_IMAGE: 字幕を取得する画像。画像は base64 でエンコードされたバイト文字列として指定する必要があります。サイズの上限: 10 MB。
  • RESPONSE_COUNT: 生成したい回答の数。指定できる整数値: 1~3。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagetext:predict

リクエストの本文(JSON):

{
  "instances": [
    {
      "prompt": "VQA_PROMPT",
      "image": {
          "bytesBase64Encoded": "B64_IMAGE"
      }
    }
  ],
  "parameters": {
    "sampleCount": RESPONSE_COUNT
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagetext:predict"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/imagetext:predict" | Select-Object -Expand Content
次のサンプル レスポンスは、"sampleCount": 2"prompt": "What is this?" を含むリクエストに対するものです。レスポンスは回答として 2 つの予測文字列を返します。
{
  "predictions": [
    "cappuccino",
    "coffee"
  ]
}

Python

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Python の設定手順を完了してください。詳細については、Vertex AI Python API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

このサンプルでは、load_from_file メソッドを使用して、情報の取得対象となるベース Image としてローカル ファイルを参照します。ベース画像を指定したら、ImageTextModelask_question メソッドを使用して、回答を表示します。


import vertexai
from vertexai.preview.vision_models import Image, ImageTextModel

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# input_file = "my-input.png"
# question = "" # The question about the contents of the image.

vertexai.init(project=project_id, location="us-central1")

model = ImageTextModel.from_pretrained("imagetext@001")
source_img = Image.load_from_file(location=input_file)

answers = model.ask_question(
    image=source_img,
    question=question,
    # Optional parameters
    number_of_results=1,
)

print(answers)

VQA 用パラメータを使用する

VQA のレスポンスを受け取るとき、ユースケースに応じていくつかのパラメータを設定できます。

検索結果の表示件数

検索結果の表示件数のパラメータを使用して、送信するリクエストごとに返される回答の数を制限できます。詳細については、imagetext(VQA)モデル API リファレンスをご覧ください。

シード番号

生成される回答を確定するためリクエストに追加する数値。リクエストにシード番号を追加すると、毎回確実に同じ予測(回答)が得られます。ただし、回答が同じ順序で返されるとは限りません。詳細については、imagetext(VQA)モデル API リファレンスをご覧ください。

次のステップ