Explora las capacidades de visión con la API de Gemini

Ver en ai.google.dev Prueba un notebook de Colab Ver notebook en GitHub

La API de Gemini puede ejecutar inferencias sobre las imágenes y los videos que se le pasan. Cuando se aprueba una imagen, una serie de imágenes o un video, Gemini puede hacer lo siguiente:

  • Describe o responde preguntas sobre el contenido
  • Resume el contenido
  • Extrapolar a partir del contenido

En este instructivo, se muestran algunas formas posibles de usar instrucciones para la API de Gemini imágenes y video. Todos los resultados son de solo texto.

Antes de comenzar: Configura tu proyecto y clave de API

Antes de llamar a la API de Gemini, debes configurar tu proyecto tu clave de API.

Instrucciones con imágenes

En este instructivo, subirás imágenes con la API de archivos o como datos intercalados y generar contenido basado en esas imágenes.

Detalles técnicos (imágenes)

Gemini 1.5 Pro y 1.5 Flash admiten un máximo de 3,600 archivos de imagen.

Las imágenes deben estar en uno de los siguientes tipos de MIME de datos de imagen:

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

Cada imagen equivale a 258 tokens.

Si bien no existen límites específicos para la cantidad de píxeles en una imagen, la ventana de contexto del modelo, las imágenes más grandes se reducen al máximo resolución de 3072 x 3072 sin perder la relación de aspecto original, mientras las imágenes más pequeñas se ajustan a 768 x 768 píxeles. No se reducen los costos en el caso de imágenes de menor tamaño, que no sean el ancho de banda o una mejora en el rendimiento para imágenes con mayor resolución.

Para lograr resultados óptimos, haz lo siguiente:

  • Rota las imágenes a la orientación correcta antes de subirlas.
  • Evita las imágenes borrosas.
  • Si usas una sola imagen, coloca la instrucción de texto después de la imagen.

Sube un archivo de imagen con la API de File

Usa la API de File para subir una imagen de cualquier tamaño. (Siempre usa la API de File cuando la combinación de archivos e instrucciones del sistema que pretendes enviar superior a 20 MB).

Comienza por descargar esto boceto de un propulsor.

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

Sube la imagen con media.upload y, luego, imprimir el URI, que se usa como referencia en las llamadas a la API de 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}")

Verifica la carga del archivo de imagen y obtén los metadatos

Puedes verificar que la API almacenó correctamente el archivo subido y obtener su los metadatos llamando a files.get a través del SDK. Solo los name (y, por extensión, uri) son únicos. Usa display_name para identificar archivos solo si tú administras la unicidad.

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

Según tu caso de uso, puedes almacenar los URIs en estructuras, como un dict o una base de datos.

Instrucción con la imagen y el texto que se subieron

Después de subir el archivo, puedes realizar solicitudes GenerateContent que hagan referencia a el URI de la API de archivos. Selecciona el modelo generativo y proporciónale una instrucción de texto. y la imagen subida.

# 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)

Subir uno o más archivos de imagen almacenados localmente

También puedes subir tus propios archivos. Puedes descargar y usar nuestra dibujos de aguas infestadas de pirañas y un bombero con un gato.

Cuando la combinación de archivos e instrucciones del sistema que pretendes enviar tenga más de 20 MB, use la API de File para subir los archivos, ya que que se mostró anteriormente. En cambio, los archivos más pequeños se pueden llamar de forma local desde la API de Gemini:

import PIL.Image

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

Ten en cuenta que estas llamadas de datos intercaladas no incluyen muchas de las funciones disponibles a través de la API de File, por ejemplo, para obtener metadatos de archivos, fichas, borrar archivos.

Instrucción con varias imágenes

Puedes proporcionarle a la API de Gemini cualquier combinación de imágenes y texto que para ajustarse a la ventana de contexto del modelo. En este ejemplo, se proporciona un texto breve y las tres imágenes subidas previamente.

# 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)

Obtén un cuadro de límite para un objeto

Puedes pedirle al modelo las coordenadas de los cuadros delimitadores de los objetos. en imágenes. Para la detección de objetos, el modelo de Gemini se entrenó para proporcionar estas coordenadas como anchos o alturas relativos en el rango [0,1], ajustados por 1,000 y lo convierte en un número entero. Efectivamente, las coordenadas proporcionadas corresponden a una versión de 1000 x 1000 de la imagen original y se debe volver a convertir a la dimensiones de la imagen 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 convertir estas coordenadas a las dimensiones de la imagen original, sigue estos pasos:

  1. Divide cada coordenada del resultado por 1,000.
  2. Multiplica las coordenadas X por el ancho de la imagen original.
  3. Multiplica las coordenadas Y por la altura de la imagen original.

Instrucciones con video

En este instructivo, subirás un video usando la API de File y generarás contenido basado en esas imágenes.

Detalles técnicos (video)

Gemini 1.5 Pro y Flash admiten hasta una hora de datos de video aproximadamente.

El video debe estar en uno de los siguientes tipos MIME de formato de video:

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

El servicio File API extrae fotogramas de imágenes de los videos a 1 fotograma por segundo (FPS) y audio a 1 Kbps, un solo canal, agregando marcas de tiempo cada segundo. Estas tasas están sujetas a cambios en el futuro por las mejoras en la inferencia.

Las tramas individuales tienen 258 tokens y el audio es de 32 tokens por segundo. Con cada segundo de video se convierte en ~300 tokens, lo que significa puede ajustarse a menos de una hora de video.

Para hacer preguntas sobre las ubicaciones con marca de tiempo, usa el formato MM:SS, en el que los dos primeros dígitos representan minutos y los dos últimos dígitos representan segundos.

Para lograr resultados óptimos, haz lo siguiente:

  • Usa un video por instrucción.
  • Si usas un solo video, coloca el mensaje de texto después del video.

Subir un archivo de video con la API de File

La API de File acepta formatos de archivo de video directamente. En este ejemplo, se usa el cortometraje de la NASA “La gran mancha roja de Júpiter se encoge y crece”. Crédito: Centro de vuelo espacial de Goddard (GSFC)/David Ladd (2018).

"La gran mancha roja de Júpiter se encoge y crece" es de dominio público y no no deben mostrar personas identificables. (Lineamientos de uso de imágenes y contenido multimedia de la NASA).

Para comenzar, recupera el video corto:

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

Sube el video con la API de File e imprime el 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}")

Verifica la carga del archivo y el estado

Verifica que la API haya recibido los archivos correctamente llamando al 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)

Instrucción con un video y texto

Una vez que el video subido tenga el estado ACTIVE, podrás hacer GenerateContent que especifiquen el URI de File API para ese video. Selecciona la herramienta modelo y proporcionarle el video que se subió y una instrucción 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)

Hacer referencia a las marcas de tiempo en el contenido

Puedes usar marcas de tiempo del formulario MM:SS para hacer referencia a momentos específicos en la video.

# 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)

Transcribir videos y proporcionar descripciones visuales

Si el video no es rápido (solo se muestra 1 fotograma por segundo de video) es posible transcribir el video con descripciones visuales para cada toma.

# 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)

Enumerar archivos

Puedes enumerar todos los archivos que subiste con File API y sus URI con lo siguiente: files.list_files()

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

Borrar archivos

Los archivos subidos con la API de File se borran automáticamente después de 2 días. Tú también puedes borrarlos manualmente con files.delete().

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

¿Qué sigue?

En esta guía, se muestra cómo usar generateContent y para generar texto a partir de entradas de imagen y video. Para obtener más información, consulta los siguientes recursos:

  • Instrucciones con archivos multimedia: La La API de Gemini admite instrucciones con datos de texto, imagen, audio y video. conocida como instrucción multimodal.
  • Instrucciones del sistema: Sistema instrucciones te permiten guiar el comportamiento del modelo según tu necesidades y casos de uso.
  • Orientación sobre seguridad: A veces, la IA generativa los modelos generan resultados inesperados, como resultados inexactos ofensiva o sesgada. El procesamiento posterior y la evaluación humana son esenciales limitar el riesgo de daños derivados de dichos productos.