Use a funcionalidade de resposta a perguntas visuais (VQA) para obter informações sobre imagens

A funcionalidade de resposta visual a perguntas (VQA) permite-lhe fornecer uma imagem ao modelo e fazer uma pergunta sobre o conteúdo da imagem. Em resposta à sua pergunta, recebe uma ou mais respostas em linguagem natural.

Imagem, pergunta e respostas de VQA de exemplo na consola
Origem da imagem (apresentada na Google Cloud consola): Sharon Pittaway no Unsplash
Pergunta do comando: Que objetos estão na imagem?
Resposta 1: bolas de vidro
Resposta 2: bolas de vidro

Idiomas compatíveis

A VQA está disponível nos seguintes idiomas:

  • English (en)

Desempenho e limitações

Os seguintes limites aplicam-se quando usa este modelo:

Limites Valor
Número máximo de pedidos de API (curtos) por minuto por projeto 500
Número máximo de tokens devolvidos na resposta (formato curto) 64 tokens
Número máximo de tokens aceites no pedido (apenas para formato curto de VQA) 80 tokens

As seguintes estimativas de latência do serviço aplicam-se quando usa este modelo. Estes valores destinam-se a ser ilustrativos e não são uma promessa de serviço:

Latência Valor
Pedidos de API (formato curto) 1,5 segundos

Localizações

Uma localização é uma região que pode especificar num pedido para controlar onde os dados são armazenados em repouso. Para ver uma lista das regiões disponíveis, consulte o artigo IA generativa nas localizações da Vertex AI.

Filtragem de segurança da IA responsável

O modelo de legendagem de imagens e de resposta visual a perguntas (VQA) não suporta filtros de segurança configuráveis pelo utilizador. No entanto, a filtragem de segurança geral do Imagen ocorre nos seguintes dados:

  • Introdução do utilizador
  • Saída do modelo

Como resultado, a sua saída pode diferir da saída de amostra se o Imagen aplicar estes filtros de segurança. Considere os seguintes exemplos.

Entrada filtrada

Se a entrada for filtrada, a resposta é semelhante à seguinte:

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

Resultados filtrados

Se o número de respostas devolvidas for inferior à contagem de amostras especificada, significa que as respostas em falta são filtradas pela IA responsável. Por exemplo, o seguinte é uma resposta a um pedido com "sampleCount": 2, mas uma das respostas é filtrada:

{
  "predictions": [
    "cappuccino"
  ]
}

Se toda a saída for filtrada, a resposta é um objeto vazio semelhante ao seguinte:

{}

Use a VQA numa imagem (respostas de formato curto)

Use os seguintes exemplos para fazer uma pergunta e receber uma resposta sobre uma imagem.

REST

Para mais informações sobre os pedidos de modelos imagetext, consulte a imagetext referência da API de modelos.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o seu Google Cloud ID do projeto.
  • LOCATION: a região do seu projeto. Por exemplo, us-central1, europe-west2 ou asia-northeast3. Para ver uma lista das regiões disponíveis, consulte Localizações da IA generativa na Vertex AI.
  • VQA_PROMPT: a pergunta cuja resposta quer obter sobre a sua imagem.
    • De que cor é este sapato?
    • Que tipo de mangas tem a camisola?
  • B64_IMAGE: a imagem para gerar legendas. A imagem tem de ser especificada como uma string de bytes codificada em base64. Limite de tamanho: 10 MB.
  • RESPONSE_COUNT: o número de respostas que quer gerar. Valores inteiros aceites: 1 a 3.

Método HTTP e URL:

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

Corpo JSON do pedido:

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

Para enviar o seu pedido, escolha uma destas opções:

curl

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte 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

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte 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
As seguintes respostas de exemplo são para um pedido com "sampleCount": 2 e "prompt": "What is this?". A resposta devolve duas respostas de string de previsão.
{
  "predictions": [
    "cappuccino",
    "coffee"
  ]
}

Python

Antes de experimentar este exemplo, siga as Pythoninstruções de configuração no início rápido do Vertex AI com bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Python Vertex AI.

Para se autenticar no Vertex AI, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

Neste exemplo, usa o método load_from_file para fazer referência a um ficheiro local como a base Image para obter informações sobre. Depois de especificar a imagem base, usa o método ask_question no ImageTextModel e imprime as respostas.


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"
# question = "" # The question about the contents of the image.

vertexai.init(project=PROJECT_ID, location="us-central1")

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)
# Example response:
# ['tabby']

Node.js

Antes de experimentar este exemplo, siga as Node.jsinstruções de configuração no início rápido do Vertex AI com bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Node.js Vertex AI.

Para se autenticar no Vertex AI, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

Neste exemplo, chama o método predict num PredictionServiceClient. O serviço devolve respostas para a pergunta 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';
// The question about the contents of the image.
const prompt = 'What breed of cat is this a picture of?';

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 getShortFormImageResponses() {
  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 = {
    prompt: prompt,
    image: {
      bytesBase64Encoded: encodedImage,
    },
  };
  const instanceValue = helpers.toValue(instance);
  const instances = [instanceValue];

  const parameter = {
    // Optional parameters
    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 responses were generated. Check the request parameters and image.'
    );
  } else {
    predictions.forEach(prediction => {
      console.log(prediction.stringValue);
    });
  }
}
await getShortFormImageResponses();

Use parâmetros para VQA

Quando recebe respostas de VQA, existem vários parâmetros que pode definir consoante o seu exemplo de utilização.

Número de resultados

Use o parâmetro de número de resultados para limitar a quantidade de respostas devolvidas para cada pedido que enviar. Para mais informações, consulte a imagetext (VQA) referência da API do modelo.

Número aleatório

Um número que adiciona a um pedido para tornar as respostas geradas determinísticas. Adicionar um número de semente ao seu pedido é uma forma de garantir que recebe sempre a mesma previsão (respostas). No entanto, as respostas não são necessariamente devolvidas pela mesma ordem. Para mais informações, consulte a imagetext (VQA) model API reference.

O que se segue?

Leia artigos sobre o Imagen e outros produtos de IA generativa na Vertex AI: