Gunakan Visual Question Answering (VQA) untuk mendapatkan informasi gambar

Dengan Visual Question Answering (VQA), Anda dapat memberikan gambar ke model dan mengajukan pertanyaan tentang konten gambar. Sebagai jawaban atas pertanyaan Anda, Anda akan mendapatkan satu atau lebih jawaban dengan bahasa yang wajar.

Contoh gambar, pertanyaan, dan jawaban VQA di konsol
Sumber gambar (ditampilkan di Konsol Google Cloud): Sharon Pittaway di Unsplash
Pengajuan pertanyaan: Objek apa yang ada dalam gambar?
Jawaban 1: kelereng
Jawaban 2: kelereng kaca

Bahasa yang didukung

VQA tersedia dalam bahasa berikut:

  • Inggris (en)

Performa dan batasan

Batasan berikut berlaku saat Anda menggunakan model ini:

Batas Nilai
Jumlah maksimum permintaan API (bentuk singkat) per menit per project 500
Jumlah maksimum token yang ditampilkan sebagai respons (bentuk singkat) 64 token
Jumlah maksimum token yang diterima dalam permintaan (khusus VQA bentuk singkat) 80 token

Estimasi latensi layanan berikut berlaku saat Anda menggunakan model ini. Nilai ini dimaksudkan untuk ilustrasi dan bukan janji layanan:

Latensi Nilai
Permintaan API (bentuk singkat) 1,5 detik

Lokasi

Lokasi adalah region yang dapat Anda tentukan dalam permintaan untuk mengontrol tempat data dalam penyimpanan tidak aktif. Untuk mengetahui daftar region yang tersedia, lihat Lokasi AI Generatif di Vertex AI.

Pemfilteran keamanan Responsible AI

Model fitur teks gambar dan Visual Question Answering (VQA) tidak mendukung filter keamanan yang dapat dikonfigurasi pengguna. Namun, pemfilteran keamanan Imagen secara keseluruhan terjadi pada data berikut:

  • Input pengguna
  • Output model

Akibatnya, output Anda mungkin berbeda dengan output contoh jika Imagen menerapkan filter keamanan ini. Perhatikan contoh berikut.

Input yang difilter

Jika input difilter, responsnya akan mirip dengan berikut ini:

{
  "error": {
    "code": 400,
    "message": "Media reasoning failed with the following error: The response is blocked, as it may violate our policies. If you believe this is an error, please send feedback to your account team. Error Code: 63429089, 72817394",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "[ORIGINAL ERROR] generic::invalid_argument: Media reasoning failed with the following error: The response is blocked, as it may violate our policies. If you believe this is an error, please send feedback to your account team. Error Code: 63429089, 72817394 [google.rpc.error_details_ext] { message: \"Media reasoning failed with the following error: The response is blocked, as it may violate our policies. If you believe this is an error, please send feedback to your account team. Error Code: 63429089, 72817394\" }"
      }
    ]
  }
}

Output yang difilter

Jika jumlah respons yang ditampilkan kurang dari jumlah sampel yang Anda tentukan, ini berarti respons yang tidak ada difilter oleh Responsible AI. Misalnya, berikut adalah respons terhadap permintaan dengan "sampleCount": 2, tetapi salah satu respons difilter:

{
  "predictions": [
    "cappuccino"
  ]
}

Jika semua output difilter, responsnya adalah objek kosong yang mirip dengan berikut:

{}

Menggunakan VQA pada gambar (respons singkat)

Gunakan contoh berikut untuk mengajukan pertanyaan dan mendapatkan jawaban tentang gambar.

REST

Untuk mengetahui informasi selengkapnya tentang permintaan model imagetext, lihat referensi API model imagetext.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: project ID Google Cloud Anda.
  • LOCATION: Region project Anda. Misalnya, us-central1, europe-west2, atau asia-northeast3. Untuk mengetahui daftar region yang tersedia, lihat Lokasi AI Generatif di Vertex AI.
  • VQA_PROMPT: Pertanyaan tentang gambar yang jawabannya ingin Anda peroleh.
    • Apa warna sepatu ini?
    • Lengan jenis apa yang digunakan di kemeja ini?
  • B64_IMAGE: Gambar yang akan diberi teks. Gambar harus ditentukan sebagai string byte berenkode Base64. Batas ukuran: 10 MB.
  • RESPONSE_COUNT: Jumlah jawaban yang ingin Anda hasilkan. Nilai bilangan bulat yang diterima: 1-3.

Metode HTTP dan URL:

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

Isi JSON permintaan:

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

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

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

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$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
Contoh respons berikut adalah untuk permintaan dengan "sampleCount": 2 dan "prompt": "What is this?". Tanggapannya akan menampilkan dua jawaban string prediksi.
{
  "predictions": [
    "cappuccino",
    "coffee"
  ]
}

Python

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Dalam contoh ini, Anda menggunakan metode load_from_file untuk mereferensikan file lokal sebagai Image dasar untuk mendapatkan informasi. Setelah menentukan image dasar, Anda dapat menggunakan metode ask_question pada ImageTextModel dan mencetak jawabannya.


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

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# input_file = "input-image.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)
# Example response:
# ['tabby']

Node.js

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Node.js Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Dalam contoh ini, Anda memanggil metode predict pada PredictionServiceClient. Layanan menampilkan jawaban untuk pertanyaan yang diberikan.

/**
 * TODO(developer): Update these variables before running the sample.
 */
const projectId = process.env.CAIP_PROJECT_ID;
const location = 'us-central1';
const inputFile = 'resources/cat.png';
// The question about the contents of the image.
const prompt = 'What breed of cat is this a picture of?';

const aiplatform = require('@google-cloud/aiplatform');

// Imports the Google Cloud Prediction Service Client library
const {PredictionServiceClient} = aiplatform.v1;

// Import the helper module for converting arbitrary protobuf.Value objects
const {helpers} = aiplatform;

// Specifies the location of the api endpoint
const clientOptions = {
  apiEndpoint: `${location}-aiplatform.googleapis.com`,
};

// Instantiates a client
const predictionServiceClient = new PredictionServiceClient(clientOptions);

async function getShortFormImageResponses() {
  const fs = require('fs');
  // Configure the parent resource
  const endpoint = `projects/${projectId}/locations/${location}/publishers/google/models/imagetext@001`;

  const imageFile = fs.readFileSync(inputFile);
  // Convert the image data to a Buffer and base64 encode it.
  const encodedImage = Buffer.from(imageFile).toString('base64');

  const instance = {
    prompt: prompt,
    image: {
      bytesBase64Encoded: encodedImage,
    },
  };
  const instanceValue = helpers.toValue(instance);
  const instances = [instanceValue];

  const parameter = {
    // Optional parameters
    sampleCount: 2,
  };
  const parameters = helpers.toValue(parameter);

  const request = {
    endpoint,
    instances,
    parameters,
  };

  // Predict request
  const [response] = await predictionServiceClient.predict(request);
  const predictions = response.predictions;
  if (predictions.length === 0) {
    console.log(
      'No responses were generated. Check the request parameters and image.'
    );
  } else {
    predictions.forEach(prediction => {
      console.log(prediction.stringValue);
    });
  }
}
await getShortFormImageResponses();

Menggunakan parameter untuk VQA

Saat Anda mendapatkan respons VQA, ada beberapa parameter yang dapat Anda tetapkan, bergantung pada kasus penggunaan Anda.

Jumlah hasil

Gunakan parameter jumlah hasil untuk membatasi jumlah respons yang ditampilkan untuk setiap permintaan yang Anda kirim. Untuk informasi selengkapnya, lihat referensi API model imagetext (VQA).

Nomor seed

Angka yang Anda tambahkan ke permintaan untuk membuat respons yang dihasilkan menjadi deterministik. Menambahkan nomor seed dengan permintaan Anda adalah cara untuk memastikan bahwa Anda selalu mendapatkan prediksi (respons) yang sama. Namun, jawaban tidak selalu ditampilkan dalam urutan yang sama. Untuk informasi selengkapnya, lihat referensi API model imagetext (VQA).

Langkah selanjutnya

Baca artikel tentang Imagen dan produk AI Generatif lainnya di Vertex AI: