Veja descrições de imagens usando legendas visuais

As legendas visuais permitem que você gere uma descrição relevante para uma imagem. Essas informações podem ser usadas para vários usos:

  • Receba metadados mais detalhados sobre imagens para armazenamento e pesquisa.
  • Gere legendas automáticas para oferecer suporte aos casos de uso de acessibilidade.
  • Receba descrições rápidas de produtos e recursos visuais.
Exemplo de imagem legendada

Fonte da imagem: Santhosh Kumar em Unsplash (cortada)

Legenda (formato curto): uma camisa azul com bolinhas brancas está pendurada em um gancho

Idiomas compatíveis

As legendas visuais estão disponíveis nos seguintes idiomas:

  • Inglês (en)
  • Francês (fr)
  • Alemão (de)
  • Italiano (it)
  • Espanhol (es)

Desempenho e limitações

Os limites a seguir se aplicam quando você usa esse modelo :

Limites Valor
Número máximo de solicitações de API (formato curto) por minuto e projeto 500
Número máximo de tokens retornados na resposta (formato curto) 64 tokens
Número máximo de tokens aceitos na solicitação (somente no formato curto de VQA) 80 tokens

As estimativas de latência de serviço a seguir se aplicam quando você usa esse modelo. Estes valores são ilustrativos e não são uma promessa de serviço:

Latência Valor
Solicitações de API (formato curto) 1,5 segundos

Locais

Um local é uma região que pode ser especificada em uma solicitação para controlar onde os dados são armazenados em repouso. Para uma lista de regiões disponíveis, consulte IA generativa em locais da Vertex AI.

Filtragem de segurança da IA responsável

O modelo de recurso de legendagem de imagens e de resposta visual a perguntas (VQA, na sigla em inglês) não aceita filtros de segurança configuráveis pelo usuário. No entanto, a filtragem de segurança geral do Imagen ocorre nos seguintes dados:

  • Entrada do usuário
  • Saída do modelo

Como resultado, a saída poderá ser diferente da saída da amostra se o Imagen aplicar esses filtros de segurança. Confira estes exemplos.

Entrada filtrada

Se a entrada for filtrada, a resposta será semelhante a esta:

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

Saída filtrada

Se o número de respostas retornadas for menor que a contagem de amostras especificada, isso significa que as respostas incompletas serão filtradas pela IA responsável. Por exemplo, o seguinte é uma resposta a uma solicitação com "sampleCount": 2, mas uma das respostas é filtrada:

{
  "predictions": [
    "cappuccino"
  ]
}

Se toda a saída for filtrada, a resposta será um objeto vazio semelhante a este:

{}

Usar legendas de imagens curtas

Use os exemplos a seguir para gerar legendas curtas para uma imagem.

REST

Para mais informações sobre solicitações de modelo imagetext, consulte a referência da API do modelo imagetext.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud.
  • LOCATION: a região do seu projeto. Por exemplo, us-central1, europe-west2 ou asia-northeast3. Para uma lista de regiões disponíveis, consulte IA generativa em locais da Vertex AI.
  • B64_IMAGE: a imagem que receberá as legendas. A imagem precisa ser especificada como uma string de bytes codificada em base64. Limite de tamanho: 10 MB.
  • RESPONSE_COUNT: o número de legendas de imagem que você quer gerar. Valores inteiros aceitos: 1 a 3.
  • LANGUAGE_CODE: um dos códigos de idioma compatíveis. Linguagens compatíveis:
    • Inglês (en)
    • Francês (fr)
    • Alemão (de)
    • Italiano (it)
    • Espanhol (es)

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$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
As respostas de amostra a seguir são de uma solicitação com "sampleCount": 2. A resposta retorna duas strings de previsão.

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

Espanhol (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 testar essa amostra, siga as instruções de configuração para Python Guia de início rápido da Vertex AI: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Python.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Neste exemplo, você usa o método load_from_file para referenciar um arquivo local como a Image base para receber uma legenda. Depois de especificar a imagem de base, use o método get_captions no ImageTextModel e mostre a saída.


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 testar esse exemplo, siga as instruções de configuração para Node.js no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Node.js.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Neste exemplo, você chama o método predict em um PredictionServiceClient. O serviço retorna legendas para a imagem fornecida.

/**
 * 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 a legendagem de imagens

Ao receber legendas de imagens, há vários parâmetros que podem ser definidos, de acordo com o caso de uso.

Número de resultados

Use o parâmetro de número de resultados para limitar a quantidade de legendas retornadas para cada solicitação enviada. Para mais informações, consulte a referência da API do modelo imagetext (legendagem de imagens).

Número da semente

Um número que você adiciona a uma solicitação para tornar as descrições geradas determinísticas. Adicionar um número de origem à solicitação é uma maneira de garantir que você sempre receba a mesma previsão (descrições) todas as vezes. No entanto, as legendas das imagens não são necessariamente retornadas na mesma ordem. Para mais informações, consulte a referência da API do modelo imagetext (legendagem de imagens).

A seguir

Confira artigos sobre o Imagen e outras IAs generativas nos produtos da Vertex AI: