Mendapatkan deskripsi gambar menggunakan teks visual

Teks visual memungkinkan Anda membuat deskripsi yang relevan untuk suatu gambar. Anda dapat menggunakan informasi ini untuk berbagai penggunaan:

  • Dapatkan metadata yang lebih mendetail tentang gambar untuk disimpan dan ditelusuri.
  • Buat teks otomatis untuk mendukung kasus penggunaan aksesibilitas.
  • Dapatkan deskripsi singkat produk dan aset visual.
Contoh gambar dengan teks

Sumber gambar: Santhosh Kumar di Unsplash (dipangkas)

Teks (format singkat): kaos biru dengan polkadot putih tergantung di kaitan

Bahasa yang didukung

Teks visual tersedia dalam bahasa berikut:

  • Inggris (en)
  • Prancis (fr)
  • Jerman (de)
  • Italia (it)
  • Spanyol (es)

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, secara keseluruhan, pemfilteran keamanan Imagen 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:

{}

Mendapatkan teks singkat untuk gambar

Gunakan contoh berikut untuk membuat teks singkat bagi 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.
  • B64_IMAGE: Gambar yang akan diberi teks. Gambar harus ditentukan sebagai string byte berenkode base64. Batas ukuran: 10 MB.
  • RESPONSE_COUNT: Jumlah teks gambar yang ingin Anda buat. Nilai bilangan bulat yang diterima: 1-3.
  • LANGUAGE_CODE: Salah satu kode bahasa yang didukung. Bahasa yang didukung:
    • Inggris (en)
    • Prancis (fr)
    • Jerman (de)
    • Italia (it)
    • Spanyol (es)

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": [
    {
      "image": {
          "bytesBase64Encoded": "B64_IMAGE"
      }
    }
  ],
  "parameters": {
    "sampleCount": RESPONSE_COUNT,
    "language": "LANGUAGE_CODE"
  }
}

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. Respons akan menampilkan dua string prediksi.

Inggris (en):

{
  "predictions": [
    "a yellow mug with a sheep on it sits next to a slice of cake",
    "a cup of coffee with a heart shaped latte art next to a slice of cake"
  ],
  "deployedModelId": "DEPLOYED_MODEL_ID",
  "model": "projects/PROJECT_ID/locations/LOCATION/models/MODEL_ID",
  "modelDisplayName": "MODEL_DISPLAYNAME",
  "modelVersionId": "1"
}

Spanyol (es):

{
  "predictions": [
    "una taza de café junto a un plato de pastel de chocolate",
    "una taza de café con una forma de corazón en la espuma"
  ]
}

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, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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


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"

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

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

captions = model.get_captions(
    image=source_img,
    # Optional parameters
    language="en",
    number_of_results=2,
)

print(captions)
# Example response:
# ['a cat with green eyes looks up at the sky']

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, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Dalam contoh ini, Anda memanggil metode predict pada PredictionServiceClient. Layanan menampilkan teks untuk gambar 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';

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 getShortFormImageCaptions() {
  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 = {
    image: {
      bytesBase64Encoded: encodedImage,
    },
  };
  const instanceValue = helpers.toValue(instance);
  const instances = [instanceValue];

  const parameter = {
    // Optional parameters
    language: 'en',
    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 captions were generated. Check the request parameters and image.'
    );
  } else {
    predictions.forEach(prediction => {
      console.log(prediction.stringValue);
    });
  }
}
await getShortFormImageCaptions();

Menggunakan parameter untuk pemberian teks pada gambar

Saat mendapatkan teks gambar, ada beberapa parameter yang dapat Anda tetapkan, bergantung pada kasus penggunaan Anda.

Jumlah hasil

Gunakan parameter jumlah hasil untuk membatasi jumlah teks yang ditampilkan untuk setiap permintaan yang Anda kirim. Untuk mengetahui informasi selengkapnya, lihat referensi API model imagetext (penulisan teks pada gambar).

Nomor seed

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

Langkah selanjutnya

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