Obtén descripciones de imágenes mediante descripciones visuales

La función de subtitulado visual te permite generar una descripción pertinente de una imagen. Puedes usar esta información para diversos fines:

  • Obtén metadatos más detallados sobre las imágenes para almacenarlas y buscarlas.
  • Generar subtítulos automáticos para admitir casos prácticos de accesibilidad.
  • Recibe descripciones rápidas de productos y recursos visuales.
Imagen con subtítulos de ejemplo

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

Descripción (breve): una camisa azul con lunares blancos colgada de una percha

Idiomas disponibles

Los subtítulos 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
Número máximo de solicitudes a la API (formato breve) por minuto y proyecto 500
Número máximo de tokens devueltos en la respuesta (formato breve) 64 tokens
Número máximo de tokens aceptados en la solicitud (solo para VQA breve) 80 tokens

Las siguientes estimaciones de latencia del servicio se aplican cuando usas este modelo. Estos valores son meramente ilustrativos y no constituyen una promesa de servicio:

Latencia Valor
Solicitudes a la API (formato breve) 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 ver una lista de las regiones disponibles, consulta Ubicaciones de la IA generativa en Vertex AI.

Filtrado de seguridad de la IA responsable

El modelo de la función de subtítulos de imágenes y de preguntas y respuestas visuales no admite filtros de seguridad configurables por el usuario. Sin embargo, el Imagen filtrado de seguridad general se aplica a los siguientes datos:

  • Entrada del usuario
  • Salida del modelo

Por lo tanto, la salida puede ser diferente de la de ejemplo si Imagen aplica estos filtros de seguridad. Consulta los siguientes ejemplos.

Entrada filtrada

Si la entrada se filtra, la respuesta será 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\" }"
      }
    ]
  }
}

Salida filtrada

Si el número de respuestas devueltas es inferior al número de muestras que has especificado, significa que las respuestas que faltan se han filtrado por la IA responsable. Por ejemplo, a continuación se muestra una respuesta a una solicitud con "sampleCount": 2, pero una de las respuestas se ha filtrado:

{
  "predictions": [
    "cappuccino"
  ]
}

Si se filtra toda la salida, la respuesta es un objeto vacío similar al siguiente:

{}

Obtener títulos de formato abreviado para imágenes

Usa los siguientes ejemplos para generar títulos de formato abreviado para una imagen.

REST

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

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: tu Google Cloud ID de proyecto.
  • LOCATION: la región de tu proyecto. Por ejemplo, us-central1, europe-west2 o asia-northeast3. Para ver una lista de las regiones disponibles, consulta Ubicaciones de la IA generativa en Vertex AI.
  • B64_IMAGE: la imagen de la que se obtendrán los subtítulos. La imagen debe especificarse como una cadena de bytes codificada en Base64. Tamaño máximo: 10 MB.
  • RESPONSE_COUNT: el número de pies de foto que quieres generar. Valores enteros aceptados: del 1 al 3.
  • LANGUAGE_CODE: uno de los códigos de idioma admitidos. 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 ejemplo corresponden a una solicitud con "sampleCount": 2. La respuesta devuelve 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 Python instrucciones de configuración de la guía de inicio rápido de Vertex AI con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Python de Vertex AI.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

En este ejemplo, se usa el método load_from_file para hacer referencia a un archivo local como Image base para obtener un subtítulo. Después de especificar la imagen base, usa el método get_captions en ImageTextModel e 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 Node.js instrucciones de configuración de la guía de inicio rápido de Vertex AI con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Node.js de Vertex AI.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación en un entorno de desarrollo local.

En este ejemplo, se llama al método predict en un objeto PredictionServiceClient. El servicio devuelve 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();

Usar parámetros para subtítulos de imágenes

Cuando obtienes subtítulos de imágenes, puedes definir varios parámetros en función de tu caso práctico.

Número de resultados

Usa el parámetro de número de resultados para limitar la cantidad de subtítulos que se devuelven en cada solicitud que envíes. Para obtener más información, consulta la referencia de la API del modelo imagetext (generación de subtítulos de imágenes).

Número de semilla

Número que se añade a una solicitud para que las descripciones generadas sean deterministas. Si añades un número de semilla a tu solicitud, te asegurarás de obtener la misma predicción (descripciones) cada vez. Sin embargo, los títulos de las imágenes no se devuelven necesariamente en el mismo orden. Para obtener más información, consulta la referencia de la API del modelo imagetext (generación de subtítulos de imágenes).

Siguientes pasos

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