Ottenere le descrizioni delle immagini usando le didascalie visive

Le didascalie codificate visive ti consentono di generare una descrizione pertinente per un'immagine. Puoi utilizzare queste informazioni per una serie di scopi:

  • Ottieni metadati più dettagliati sulle immagini per l'archiviazione e la ricerca.
  • Genera sottotitoli codificati automatici per supportare i casi d'uso di accessibilità.
  • Ricevi descrizioni rapide di prodotti e asset visivi.
Immagine con didascalia di esempio

Fonte immagine: Santhosh Kumar su Unsplash (ritagliata)

Sottotitolo codificato (formato breve): una camicia blu a pois bianchi è appesa a un gancio

Lingue supportate

I sottotitoli codificati sono disponibili nelle seguenti lingue:

  • Inglese (en)
  • Francese (fr)
  • Tedesco (de)
  • Italiano (it)
  • Spagnolo (es)

Prestazioni e limitazioni

Quando utilizzi questo modello, si applicano i seguenti limiti:

Limiti Valore
Numero massimo di richieste API (formato breve) al minuto per progetto 500
Numero massimo di token restituiti nella risposta (formato breve) 64 token
Numero massimo di token accettati nella richiesta (solo formato breve VQA) 80 token

Quando utilizzi questo modello, si applicano le seguenti stime della latenza del servizio. Questi valori sono puramente indicativi e non rappresentano un impegno di servizio:

Latenza Valore
Richieste API (formato breve) 1,5 secondi

Località

Una località è una regione che puoi specificare in una richiesta per controllare dove vengono archiviati i dati at-rest. Per un elenco delle regioni disponibili, consulta Località dell'IA generativa su Vertex AI.

Filtri di sicurezza per l'IA responsabile

Il modello di funzionalità di trascrizione di immagini e risposta a domande visive (VQA) non supporta i filtri di sicurezza configurabili dall'utente. Tuttavia, il filtro di sicurezza di Imagen viene applicato ai seguenti dati:

  • Input utente
  • Output del modello

Di conseguenza, l'output potrebbe essere diverso dall'output di esempio se Imagen applica questi filtri di sicurezza. Considera i seguenti esempi.

Input filtrato

Se l'input viene filtrato, la risposta è simile alla seguente:

{
  "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 filtrato

Se il numero di risposte restituite è inferiore al numero di esempi specificato, significa che le risposte mancanti sono filtrate dall'IA responsabile. Ad esempio, la seguente è una risposta a una richiesta con "sampleCount": 2, ma una delle risposte viene filtrata:

{
  "predictions": [
    "cappuccino"
  ]
}

Se tutto l'output viene filtrato, la risposta è un oggetto vuoto simile al seguente:

{}

Visualizzare le didascalie delle immagini nel formato breve

Utilizza i seguenti esempi per generare didascalie brevi per un'immagine.

REST

Per ulteriori informazioni sulle richieste del modello imagetext, consulta il riferimento all'API del modello imagetext.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • PROJECT_ID: il tuo ID progetto Google Cloud.
  • LOCATION: la regione del progetto. Ad esempio, us-central1, europe-west2 o asia-northeast3. Per un elenco delle regioni disponibili, consulta Località dell'IA generativa su Vertex AI.
  • B64_IMAGE: l'immagine per cui ottenere i sottotitoli codificati. L'immagine deve essere specificata come stringa di byte codificata in base64. Dimensioni massime: 10 MB.
  • RESPONSE_COUNT: il numero di didascalie delle immagini che vuoi generare. Valori interi accettati: 1-3.
  • LANGUAGE_CODE: uno dei codici lingua supportati. Lingue supportate:
    • Inglese (en)
    • Francese (fr)
    • Tedesco (de)
    • Italiano (it)
    • Spagnolo (es)

Metodo HTTP e URL:

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

Corpo JSON della richiesta:

{
  "instances": [
    {
      "image": {
          "bytesBase64Encoded": "B64_IMAGE"
      }
    }
  ],
  "parameters": {
    "sampleCount": RESPONSE_COUNT,
    "language": "LANGUAGE_CODE"
  }
}

Per inviare la richiesta, scegli una delle seguenti opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

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

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

$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
Le seguenti risposte di esempio sono per una richiesta con "sampleCount": 2. La risposta restituisce due stringhe di previsione.

Inglese (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"
}

Spagnolo (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

Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Python di Vertex AI.

Per autenticarti a Vertex AI, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

In questo esempio utilizzi il metodo load_from_file per fare riferimento a un file locale come Image di base per ottenere un sottotitolo codificato. Dopo aver specificato l'immagine di base, utilizza il metodo get_captions su ImageTextModel e stampa l'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

Prima di provare questo esempio, segui le istruzioni di configurazione Node.js riportate nella guida rapida all'utilizzo delle librerie client di Vertex AI. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Node.js di Vertex AI.

Per autenticarti a Vertex AI, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

In questo esempio, chiami il metodo predict su un PredictionServiceClient. Il servizio restituisce i sottotitoli codificati per l'immagine fornita.

/**
 * 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();

Utilizzare i parametri per le didascalie delle immagini

Quando ricevi le didascalie delle immagini, puoi impostare diversi parametri a seconda del caso d'uso.

Numero risultati

Utilizza il parametro del numero di risultati per limitare la quantità di sottotitoli codificati restituiti per ogni richiesta inviata. Per ulteriori informazioni, consulta il riferimento all'API del modello imagetext (sottotitoli codificati per le immagini).

Numero seed

Un numero che aggiungi a una richiesta per rendere deterministiche le descrizioni generate. L'aggiunta di un numero seed alla richiesta è un modo per assicurarti di ottenere sempre la stessa previsione (descrizioni). Tuttavia, le didascalie delle immagini non vengono necessariamente restituite nello stesso ordine. Per ulteriori informazioni, consulta il riferimento all'API del modello imagetext (sottotitoli codificati per le immagini).

Passaggi successivi

Leggi gli articoli su Imagen e su altri prodotti di IA generativa su Vertex AI: