Utilizzare la risposta alle domande visive (VQA) per ottenere informazioni sulle immagini

La Visual Question Answering (VQA) ti consente di fornire un'immagine al modello e porre una domanda sui contenuti dell'immagine. Alla tua domanda riceverai una o più risposte in linguaggio naturale.

Esempio di immagine, domanda e risposte VQA nella console
Fonte dell'immagine (visualizzata nella console Google Cloud): Sharon Pittaway su Unsplash
Domanda del prompt: Quali oggetti sono presenti nell'immagine?
Risposta 1: biglie
Risposta 2: biglia di vetro

Lingue supportate

VQA è disponibile nelle seguenti lingue:

  • Inglese (en)

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 VQA nel formato breve) 80 token
Numero massimo di token restituiti nella risposta (formato lungo) 512 token

Quando utilizzi questo modello, vengono applicate le seguenti stime di latenza del servizio. I seguenti valori hanno scopo puramente illustrativo e non costituiscono una promessa di servizio:

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

Località

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

Filtro sicurezza IA responsabile

Il modello delle funzionalità per le didascalie delle immagini e la risposta alle domande visive (VQA) non supporta i filtri di sicurezza configurabili dall'utente. Tuttavia, il filtro di sicurezza complessivo di Imagen si applica ai seguenti dati:

  • Input utente
  • Output del modello

Di conseguenza, l'output potrebbe essere diverso da quello 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 campioni specificato, significa che le risposte mancanti vengono filtrate dall'AI responsabile. Ad esempio, di seguito è 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:

{}

Utilizzare VQA su un'immagine (risposte brevi)

Usa gli esempi riportati di seguito per porre una domanda e ottenere una risposta su un'immagine.

REST

Per saperne di più sulle richieste del modello imagetext, consulta la documentazione di riferimento sull'API del modello imagetext.

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

  • PROJECT_ID: il tuo ID progetto Google Cloud.
  • LOCATION: la regione del tuo progetto. Ad esempio, us-central1, europe-west2 o asia-northeast3. Per un elenco delle regioni disponibili, consulta Località per l'AI generativa su Vertex AI.
  • VQA_PROMPT: la domanda sulla tua immagine a cui vuoi ricevere una risposta.
    • Di che colore sono queste scarpe?
    • Che tipo di maniche ci sono sulla camicia?
  • B64_IMAGE: l'immagine per la quale visualizzare i sottotitoli codificati. L'immagine deve essere specificata come stringa di byte codificata in base64. Dimensioni massime: 10 MB.
  • RESPONSE_COUNT: il numero di risposte che vuoi generare. Valori interi accettati: 1-3.

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

Per inviare la richiesta, scegli una delle seguenti opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

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 ed esegui questo comando:

$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 si riferiscono a una richiesta con "sampleCount": 2 e "prompt": "What is this?". La risposta restituisce due risposte di stringa di previsione.
{
  "predictions": [
    "cappuccino",
    "coffee"
  ]
}

Python

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

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

In questo esempio viene utilizzato il metodo load_from_file per fare riferimento a un file locale come Image di base su cui ottenere informazioni. Dopo aver specificato l'immagine di base, utilizza il metodo ask_question in ImageTextModel e stampi le risposte.


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)

Utilizzare i parametri per VQA

Quando ottieni risposte VQA, puoi impostare diversi parametri a seconda del caso d'uso.

Numero risultati

Utilizza il parametro del numero di risultati per limitare il numero di risposte restituite per ogni richiesta inviata. Per ulteriori informazioni, consulta il riferimento dell'API per il modello imagetext (VQA).

Numero originale

Un numero che aggiungi a una richiesta per rendere deterministiche le risposte generate. L'aggiunta di un numero seed alla richiesta è un modo per assicurarti di ricevere la stessa previsione (risposte) ogni volta. Tuttavia, le risposte non vengono necessariamente restituite nello stesso ordine. Per maggiori informazioni, consulta il riferimento dell'API del modello imagetext (VQA).

Passaggi successivi