Obtenir des descriptions d'images grâce à Visual Captioning

Visual Captioning vous permet de générer une description pertinente pour une image. Vous pouvez utiliser ces informations pour diverses utilisations :

  • Obtenir des métadonnées plus détaillées sur les images pour le stockage et la recherche.
  • Générer des légendes automatiques pour faciliter les cas d'utilisation de l'accessibilité.
  • Recevoir des descriptions rapides des produits et des éléments visuels.
Exemple d'image avec légende

Source de l'image : Santhosh Kumar sur Unsplash (recadrée)

Légende (courte) : une chemise bleue à pois blancs est suspendue à un crochet

Langues disponibles

Visual Captioning est disponible dans les langues suivantes :

  • Anglais (en)
  • Français (fr)
  • Allemand (de)
  • Italien (it)
  • Espagnol (es)

Performances et limites

Les limites suivantes s'appliquent lorsque vous utilisez ce modèle :

Limites Valeur
Nombre maximal de requêtes API (version courte) par minute et par projet 500
Nombre maximal de jetons renvoyés dans la réponse (version courte) 64 jetons
Nombre maximal de jetons acceptés dans la requête (version courte VQA uniquement) 80 jetons

Les estimations de latence de service suivantes s'appliquent lorsque vous utilisez ce modèle. Ces valeurs sont fournies à titre indicatif et ne constituent pas une promesse de service :

Latence Valeur
Requêtes API (version courte) 1,5 seconde

Emplacements

Un emplacement est une région que vous pouvez spécifier dans une requête pour déterminer où les données sont stockées au repos. Pour obtenir la liste des régions disponibles, consultez IA générative sur les emplacements Vertex AI.

Filtrage de sécurité de l'IA responsable

Le modèle de la fonctionnalité de création de légendes et Visual Question Answering (VQA) n'est pas compatible avec les filtres de sécurité configurables par l'utilisateur. Toutefois, le filtrage de sécurité global d'Imagen est appliqué aux données suivantes :

  • Entrée utilisateur
  • Sortie du modèle

Par conséquent, votre résultat peut différer de l'exemple donné si Imagen applique ces filtres de sécurité. Prenons les exemples suivants.

Entrée filtrée

Si l'entrée est filtrée, la réponse est semblable à celle-ci :

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

Résultat filtré

Si le nombre de réponses renvoyées est inférieur au nombre d'échantillons spécifié, cela signifie que les réponses manquantes sont filtrées par l'IA responsable. Par exemple, voici une réponse à une requête comportant "sampleCount": 2, mais pour laquelle l'une des réponses a été filtrée :

{
  "predictions": [
    "cappuccino"
  ]
}

Si l'ensemble du résultat est filtré, la réponse est un objet vide semblable à ce qui suit :

{}

Obtenir des légendes d'image courtes

Utilisez les exemples suivants pour générer des légendes courtes pour une image.

REST

Pour en savoir plus sur les requêtes de modèle imagetext, consultez la documentation de référence de l'API du modèle imagetext.

Avant d'utiliser les données de requête, effectuez les remplacements suivants :

  • PROJECT_ID : ID de votre projet Google Cloud .
  • LOCATION : région de votre projet (us-central1, europe-west2 ou asia-northeast3, par exemple). Pour obtenir la liste des régions disponibles, consultez la section IA générative sur les emplacements Vertex AI.
  • B64_IMAGE : image pour laquelle vous souhaitez obtenir une légende. L'image doit être spécifiée en tant que chaîne d'octets encodés en base64. Limite de taille : 10 Mo.
  • RESPONSE_COUNT : nombre de légendes d'image que vous souhaitez générer. Valeurs entières acceptées : 1 à 3.
  • LANGUAGE_CODE : l'un des codes de langue acceptés. Langues compatibles :
    • Anglais (en)
    • Français (fr)
    • Allemand (de)
    • Italien (it)
    • Espagnol (es)

Méthode HTTP et URL :

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

Corps JSON de la requête :

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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

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

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$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
Les exemples de réponses suivants concernent une requête avec "sampleCount": 2. La réponse renvoie deux chaînes de prédiction.

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

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

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python décrites dans le guide de démarrage rapide de Vertex AI sur l'utilisation des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI pour Python.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

Dans cet exemple, la méthode load_from_file vous permet de référencer un fichier local en tant qu'Image de base à légender. Après avoir spécifié l'image de base, vous utilisez la méthode get_captions sur ImageTextModel et imprimez le résultat.


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

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js décrites dans le guide de démarrage rapide de Vertex AI sur l'utilisation des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI pour Node.js.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

Dans cet exemple, vous appelez la méthode predict sur un PredictionServiceClient. Le service renvoie les légendes de l'image fournie.

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

Utiliser les paramètres pour la création de légendes pour des images

Lorsque vous obtenez des légendes d'image, vous pouvez définir plusieurs paramètres en fonction de votre cas d'utilisation.

Nombre de résultats

Utilisez le paramètre du nombre de résultats pour limiter la quantité de légendes générées pour chaque requête que vous envoyez. Pour en savoir plus, consultez la documentation de référence de l'API du modèle imagetext (création de légendes pour des images).

Numéro source

Il s'agit d'un numéro que vous ajoutez à une requête pour rendre les descriptions générées déterministes. L'ajout d'un numéro source à votre requête vous permet d'obtenir la même prédiction (descriptions) à chaque fois. Cependant, les légendes d'images ne sont pas nécessairement renvoyées dans le même ordre. Pour en savoir plus, consultez la documentation de référence de l'API du modèle imagetext (création de légendes pour des images).

Étape suivante

Consultez des articles concernant Imagen et d'autres produits d'IA générative sur Vertex AI :