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:
- Divida cada coordenada de saída por 1.000.
- Multiplique as coordenadas x pela largura da imagem original.
- 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.