Explore as capacidades visuais com a API Gemini

Ver em ai.google.dev Testar um bloco do Colab Veja o notebook no GitHub

A API Gemini pode executar inferência em imagens e vídeos transmitidos a ela. Após a aprovação uma imagem, uma série de imagens ou um vídeo, o Gemini pode:

  • Descreva ou responda a perguntas sobre o conteúdo
  • Resumir o conteúdo
  • Extrapolar do conteúdo

Este tutorial demonstra algumas maneiras possíveis de solicitar a API Gemini com imagens e vídeos. Todas as saídas são somente de texto.

Antes de começar: configurar o projeto e a chave de API

Antes de chamar a API Gemini, você precisa definir seu projeto e configurar sua chave de API.

Comandos com imagens

Neste tutorial, você fará upload de imagens usando a API File ou como dados inline e gerar conteúdo com base nessas imagens.

Detalhes técnicos (imagens)

O Gemini 1.5 Pro e o 1.5 Flash aceitam no máximo 3.600 arquivos de imagem.

As imagens precisam estar em um dos seguintes tipos MIME de dados de imagens:

  • PNG - image/png
  • JPEG - image/jpeg
  • WEBP: image/webp
  • HEIC – image/heic
  • HEIF: image/heif

Cada imagem equivale a 258 tokens.

Embora não haja limites específicos para o número de pixels em uma imagem além janela de contexto do modelo, imagens maiores serão reduzidas ao máximo de 3.072 x 3.072, preservando a proporção original, e imagens menores são dimensionadas para até 768 x 768 pixels. Não há redução de custo para imagens em tamanhos menores, que não a largura de banda, ou melhoria de desempenho imagens com maior resolução.

Para os melhores resultados:

  • Gire as imagens para a orientação correta antes de fazer upload.
  • Evite imagens desfocadas.
  • Se estiver usando uma única imagem, coloque o comando de texto depois dela.

Fazer upload de um arquivo de imagem usando a API File

Use a API File para fazer upload de uma imagem de qualquer tamanho. Sempre use a API File quando a combinação de arquivos e instruções do sistema que você pretende enviar está mais de 20 MB.)

Para começar, faça o download esboço de uma mochila a jato.

!curl -o jetpack.jpg https://storage.googleapis.com/generativeai-downloads/images/jetpack.jpg

Faça o upload da imagem usando media.upload e mostrar o URI, que é usado como referência nas chamadas de API do Gemini.

# Upload the file and print a confirmation.
sample_file = genai.upload_file(path="jetpack.jpg",
                            display_name="Jetpack drawing")

print(f"Uploaded file '{sample_file.display_name}' as: {sample_file.uri}")

Verificar o upload de arquivos de imagem e receber metadados

Você pode verificar se a API armazenou o arquivo enviado e receber o metadados chamando files.get pelo SDK. Somente o name (e, por extensão, o uri) são exclusivos. Usar display_name para identificar arquivos somente se você gerenciar a exclusividade por conta própria.

file = genai.get_file(name=sample_file.name)
print(f"Retrieved file '{file.display_name}' as: {sample_file.uri}")

Dependendo do caso de uso, é possível armazenar os URIs em estruturas, como um dict ou um banco de dados.

Comando com a imagem e o texto enviados

Depois de fazer upload do arquivo, é possível fazer solicitações GenerateContent que referenciam o URI da API File. Selecione o modelo generativo e forneça um comando de texto a ele. e a imagem enviada.

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

# Prompt the model with text and the previously uploaded image.
response = model.generate_content([sample_file, "Describe how this product might be manufactured."])

Markdown(">" + response.text)

Fazer upload de um ou mais arquivos de imagem armazenados localmente

Se preferir, faça upload dos seus próprios arquivos. Você pode fazer o download e usar nossa desenhos de águas com infestação de piranha e um bombeiro com um gato.

Quando a combinação de arquivos e instruções do sistema que você pretende enviar tiver mais de 20 MB, use a API File para fazer o upload desses arquivos, conforme mostrados anteriormente. Arquivos menores podem ser chamados localmente API Gemini:

import PIL.Image

sample_file_2 = PIL.Image.open('piranha.jpg')
sample_file_3 = PIL.Image.open('firefighter.jpg')

Observe que essas chamadas de dados inline não incluem muitos dos recursos disponíveis por meio da API File, como obtenção de metadados de arquivos, listagens ou excluindo arquivos.

Comando com várias imagens

Você pode oferecer à API Gemini qualquer combinação de imagens e textos que se encaixam na janela de contexto do modelo. Este exemplo mostra um texto curto e as três imagens enviadas anteriormente.

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

prompt = "Write an advertising jingle showing how the product in the first image could solve the problems shown in the second two images."

response = model.generate_content([prompt, sample_file, sample_file_2, sample_file_3])

Markdown(">" + response.text)

Receber uma caixa delimitadora para um objeto

É possível solicitar ao modelo as coordenadas das caixas delimitadoras para objetos em imagens. Para a detecção de objetos, o modelo Gemini foi treinado para oferecer essas coordenadas como larguras ou alturas relativas no intervalo [0,1], dimensionadas por 1.000 e convertido em um número inteiro. Efetivamente, as coordenadas fornecidas são para uma com 1000 x 1000 da imagem original e precisam ser convertidos de volta para o da imagem original.

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

prompt = "Return a bounding box for the piranha. \n [ymin, xmin, ymax, xmax]"
response = model.generate_content([piranha, prompt])

print(response.text)

Para converter essas coordenadas em dimensões da imagem original:

  1. Divida cada coordenada de saída por 1.000.
  2. Multiplique as coordenadas x pela largura da imagem original.
  3. Multiplique as coordenadas y pela altura da imagem original.

Como criar comandos com vídeo

Neste tutorial, você vai enviar um vídeo usando a API File e gerar baseado nessas imagens.

Detalhes técnicos (vídeo)

O Gemini 1.5 Pro e o Flash aceitam até aproximadamente uma hora de dados de vídeo.

O vídeo precisa estar em um dos seguintes formatos de vídeo de tipos MIME:

  • video/mp4
  • video/mpeg
  • video/mov
  • video/avi
  • video/x-flv
  • video/mpg
  • video/webm
  • video/wmv
  • video/3gpp

O serviço da API File extrai frames de imagem de vídeos a 1 frame por segundo (QPS) e áudio a 1 Kbps, com canal único, adicionando marcações de tempo a cada segundo. Essas taxas estão sujeitas a mudanças no futuro para melhorar a inferência.

Quadros individuais são 258 tokens e áudio é 32 tokens por segundo. Com metadados, cada segundo de vídeo se torna cerca de 300 tokens, o que significa um contexto de 1 milhão pode caber um pouco menos de uma hora de vídeo.

Para fazer perguntas sobre locais com data e hora, use o formato MM:SS, em que os dois primeiros dígitos representam os minutos e os dois últimos representam os minutos segundos.

Para os melhores resultados:

  • Use um vídeo por comando.
  • Se estiver usando apenas um vídeo, coloque o comando de texto depois do vídeo.

Enviar um arquivo de vídeo usando a API File

A API File aceita formatos de arquivos de vídeo diretamente. Este exemplo usa curta-metragem da NASA "A Grande Mancha vermelha de Júpiter cresce e encolhe". Crédito: Goddard Space Flight Center (GSFC)/David Ladd (2018).

"A Grande Mancha vermelha de Júpiter cresce e encolhe" é de domínio público e não mostrar pessoas identificáveis. (Diretrizes de uso de mídia e imagens da NASA.)

Comece recuperando o vídeo curto:

!wget https://storage.googleapis.com/generativeai-downloads/images/GreatRedSpot.mp4

Faça upload do vídeo usando a API File e imprima o URI.

# Upload the video and print a confirmation.
video_file_name = "GreatRedSpot.mp4"

print(f"Uploading file...")
video_file = genai.upload_file(path=video_file_name)
print(f"Completed upload: {video_file.uri}")

Verificar o upload de arquivos e o estado

Verifique se a API recebeu os arquivos chamando método files.get.

import time

# Check whether the file is ready to be used.
while video_file.state.name == "PROCESSING":
    print('.', end='')
    time.sleep(10)
    video_file = genai.get_file(video_file.name)

if video_file.state.name == "FAILED":
  raise ValueError(video_file.state.name)

Comando com vídeo e texto

Quando o vídeo enviado estiver no estado ACTIVE, você poderá fazer com que GenerateContent solicitações que especificam o URI da API File para esse vídeo. Selecione a categoria e forneça o vídeo enviado e um comando de texto.

# Create the prompt.
prompt = "Summarize this video. Then create a quiz with answer key based on the information in the video."

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

# Make the LLM request.
print("Making LLM inference request...")
response = model.generate_content([video_file, prompt],
                                  request_options={"timeout": 600})

# Print the response, rendering any Markdown
Markdown(response.text)

Consultar as marcações de tempo no conteúdo

É possível usar carimbos de data/hora no formato MM:SS para se referir a momentos específicos na vídeo.

# Create the prompt.
prompt = "What are the examples given at 01:05 and 01:19 supposed to show us?"

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

# Make the LLM request.
print("Making LLM inference request...")
response = model.generate_content([prompt, video_file],
                                  request_options={"timeout": 600})
print(response.text)

Transcrever o vídeo e fornecer descrições visuais

Se o vídeo não tiver um ritmo acelerado (somente 1 frame por segundo de vídeo será usado), é possível transcrever o vídeo com descrições visuais para cada tomada.

# Create the prompt.
prompt = "Transcribe the audio, giving timestamps. Also provide visual descriptions."

# Choose a Gemini model.
model = genai.GenerativeModel(model_name="gemini-1.5-pro")

# Make the LLM request.
print("Making LLM inference request...")
response = model.generate_content([prompt, video_file],
                                  request_options={"timeout": 600})
print(response.text)

Listar arquivos

Você pode listar todos os arquivos enviados usando a API File e seus URIs usando files.list_files():

# List all files
for file in genai.list_files():
    print(f"{file.display_name}, URI: {file.uri}")

Excluir arquivos

Os arquivos enviados por upload usando a API File são excluídos automaticamente após dois dias. Você também pode excluí-los manualmente usando files.delete().

# Delete file
genai.delete_file(video_file.name)
print(f'Deleted file {video_file.uri}')

A seguir

Neste guia, mostramos como usar generateContent e para gerar saídas de texto com base em entradas de imagem e vídeo. Para saber mais, consulte os seguintes recursos:

  • Como executar comandos com arquivos de mídia: o A API Gemini oferece suporte a comandos com dados de texto, imagem, áudio e vídeo, também conhecidos como comandos multimodais.
  • Instruções do sistema: System permitem que você direcione o comportamento do modelo com base necessidades e casos de uso.
  • Orientação de segurança: às vezes, a IA generativa os modelos produzem saídas inesperadas, como saídas imprecisas, enviesada ou ofensiva. O pós-processamento e a avaliação humana são essenciais e limitar o risco de danos desses resultados.