Usa la búsqueda de respuestas visuales (VQA) para obtener información sobre las imágenes

La búsqueda de respuestas visuales (VQA) te permite proporcionar una imagen al modelo y hacer una pregunta sobre el contenido de la imagen. En respuesta a tu pregunta, obtienes una o más respuestas de lenguaje natural.

Imágenes, preguntas y respuestas de VQA en la consola
Fuente de la imagen (que se muestra en la consola de Google Cloud): Sharon Pittaway en Unsplash
Pregunta rápida: ¿Qué objetos hay en la imagen?
Respuesta 1: canicas
Respuesta 2: canicas de vidrio

Lenguajes compatibles

VQA está disponible en los siguientes idiomas:

  • Inglés (en)

Rendimiento y limitaciones

Se aplican los siguientes límites cuando usas este modelo:

Límites Valor
Cantidad máxima de solicitudes a la API (formato corto) por minuto y por proyecto 500
Cantidad máxima de tokens mostrados en respuesta (formato corto) 64 tokens
Cantidad máxima de tokens aceptados en la solicitud (solo VQA en formato corto) 80 tokens
Cantidad máxima de tokens mostrados en respuesta (formato largo) 512 tokens

Cuando usas este modelo, se aplican las siguientes estimaciones de latencia del servicio. Estos valores son ilustrativos y no son una promesa de servicio:

Latencia Valor
Solicitudes a la API (formato corto) 1.5 segundos
Solicitudes a la API (formato largo) 4.5 seconds

Ubicaciones

Una ubicación es una región que puedes especificar en una solicitud para controlar dónde se almacenan los datos en reposo. Para obtener una lista de las regiones disponibles, consulta IA generativa en ubicaciones de Vertex AI.

Usa VQA en una imagen (respuestas en formato corto)

Usa las siguientes muestras para hacer una pregunta y obtener una respuesta sobre una imagen.

Console

  1. En la consola de Google Cloud, abre la pestaña Vertex AI Studio > Vision en el panel de Vertex AI.

    Ir a la pestaña Vertex AI Studio

  2. En el menú inferior, haz clic en Preguntas y respuestas visuales.

  3. Haz clic en Subir imagen para seleccionar la imagen local que quieres subtitular.

  4. En el panel Parámetros, elige Número de subtítulos e Idioma.

  5. En el campo de mensajes, ingresa una pregunta sobre la imagen que subiste.

  6. Haz clic en Enviar .

REST

Para obtener más información sobre imagetextlas solicitudes del modelo, consulta la imagetextreferencia de la API del modelo.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto de Google Cloud.
  • LOCATION: La región del proyecto. Por ejemplo, us-central1, europe-west2 o asia-northeast3. Para obtener una lista de las regiones disponibles, consulta IA generativa en ubicaciones de Vertex AI.
  • VQA_PROMPT: es la pregunta que deseas que se responda sobre tu imagen.
    • ¿De qué color es este zapato?
    • ¿Qué tipo de mangas tiene la camisa?
  • B64_IMAGE: es la imagen para la que se deben obtener subtítulos. La imagen debe especificarse como una cadena de bytes codificada en base64. Límite de tamaño: 10 MB.
  • RESPONSE_COUNT: es la cantidad de respuestas que deseas generar. Valores de números enteros aceptados: de 1 a 3.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente 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

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente 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
Las siguientes respuestas de muestra son para una solicitud con "sampleCount": 2 y "prompt": "What is this?". La respuesta muestra dos respuestas de la cadena de predicción.
{
  "predictions": [
    "cappuccino",
    "coffee"
  ]
}

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Python.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

En este ejemplo, se usa el método load_from_file para hacer referencia a un archivo local como el Image base para obtener información. Después de especificar la imagen base, usa el método ask_question en ImageTextModel y, luego, imprime las respuestas.


import argparse

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

def get_short_form_image_responses(
    project_id: str, location: str, input_file: str, question: str
) -> list:
    """Get short-form responses to a question about a local image.
    Args:
      project_id: Google Cloud project ID, used to initialize Vertex AI.
      location: Google Cloud region, used to initialize Vertex AI.
      input_file: Local path to the input image file.
      question: The question about the contents of the image."""

    vertexai.init(project=project_id, location=location)

    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)

    return answers

Usa parámetros para VQA

Cuando obtienes respuestas de VQA, hay varios parámetros que puedes configurar según tu caso de uso.

Cantidad de resultados

Usa el parámetro de cantidad de resultados para limitar la cantidad de respuestas que se muestran de cada solicitud que envías. Para obtener más información, consulta la referencia de la API del modelo imagetext (VQA).

Número de origen

Un número que agregues a una solicitud para hacer que las respuestas generadas sean determinísticas. Agregar un número de origen con tu solicitud es una forma de garantizar que obtengas la misma predicción (respuestas) cada vez. Sin embargo, las respuestas no siempre se muestran en el mismo orden. Para obtener más información, consulta la referencia de la API del modelo imagetext (VQA).

¿Qué sigue?