Obtén descripciones de imágenes con subtítulos visuales

Los subtítulos visuales te permiten generar una descripción relevante para una imagen. Puedes usar esta información para diversos usos:

  • Obtener metadatos más detallados sobre las imágenes para almacenar y buscar.
  • Generar subtítulos automáticos para casos de uso de accesibilidad.
  • Recibir descripciones rápidas de productos y elementos visuales.
Imagen con subtítulos de muestra

Fuente de la imagen: Santhosh Kumar en Unsplash (recortado)

Subtítulo (formato corto): una camisa azul con lunares blancos cuelga de un gancho

Idiomas admitidos

Las leyendas visuales están disponibles en los siguientes idiomas:

  • Inglés (en)
  • Francés (fr)
  • Alemán (de)
  • Italiano (it)
  • Español (es)

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

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

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.

Filtrado de seguridad de IA responsable

El modelo de funciones de Búsqueda de respuestas visuales (VQA) y subtítulos de imágenes no admite filtros de seguridad configurables por el usuario. Sin embargo, el filtrado de seguridad general de Imagen se produce en los siguientes datos:

  • Entrada del usuario
  • Salida del modelo

Como consecuencia, tu resultado puede diferir del resultado de muestra si Imagen aplica estos filtros de seguridad. Considera los siguientes ejemplos:

Entrada filtrada

Si se filtra la entrada, la respuesta es similar a la siguiente:

{
  "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\" }"
      }
    ]
  }
}

Resultado filtrado

Si la cantidad de respuestas que se muestran es menor que el recuento de muestras que especificas, significa que la IA responsable filtra las respuestas faltantes. Por ejemplo, la siguiente es una respuesta a una solicitud con "sampleCount": 2, pero una de las respuestas se filtra:

{
  "predictions": [
    "cappuccino"
  ]
}

Si se filtra todo el resultado, la respuesta es un objeto vacío similar al siguiente:

{}

Obtén subtítulos de imágenes de formato corto

Usa las siguientes muestras para generar subtítulos cortos de una imagen.

REST

Para obtener más información sobre las solicitudes del modelo imagetext, consulta la referencia de la API del modelo imagetext.

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.
  • 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: La cantidad de subtítulos de imágenes que deseas generar. Valores de números enteros aceptados: de 1 a 3.
  • LANGUAGE_CODE: Uno de los códigos de idioma compatibles. Idiomas admitidos:
    • Inglés (en)
    • Francés (fr)
    • Alemán (de)
    • Italiano (it)
    • Español (es)

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

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. La respuesta muestra dos cadenas de predicción.

Inglés (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"
}

Español (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

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 la base Image para obtener una leyenda. Después de especificar la imagen base, usa el método get_captions en ImageTextModel y, luego, imprime el resultado.


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

Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js 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 Node.js.

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, llamas al método predict en un PredictionServiceClient. El servicio muestra los subtítulos de la imagen proporcionada.

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

Usa parámetros para los subtítulos de imágenes

Cuando obtienes subtítulos de imágenes, 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 subtítulos que se muestran de cada solicitud que envías. Para obtener más información, consulta la referencia de la API del modelo imagetext (subtitulado de imágenes).

Número de origen

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

¿Qué sigue?

Lee artículos sobre Imagen y otros productos de IA generativa en Vertex AI: