Esplora le funzionalità di visione con l'API Gemini

Visualizza su ai.google.dev Prova un blocco note di Colab Visualizza blocco note su GitHub

L'API Gemini può eseguire l'inferenza su immagini e video trasmessi. Una volta superato un'immagine, una serie di immagini o un video, Gemini può:

  • Descrivi o rispondi a domande sui contenuti
  • Riepiloga i contenuti
  • Estrapola dai contenuti

Questo tutorial mostra alcuni possibili modi per inviare prompt all'API Gemini con immagini e input video. Tutto l'output è di solo testo.

Prima di iniziare: configura il progetto e la chiave API

Prima di chiamare l'API Gemini, devi impostare il tuo progetto la chiave API.

Prompt con immagini

In questo tutorial, caricherai le immagini utilizzando l'API File o come dati in linea e generare contenuti basati su queste immagini.

Dettagli tecnici (immagini)

Gemini 1.5 Pro e 1.5 Flash supportano un massimo di 3600 file immagine.

Le immagini devono essere in uno dei seguenti tipi MIME di dati immagine:

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

Ogni immagine equivale a 258 token.

Sebbene non ci siano limiti specifici al numero di pixel in un'immagine oltre a finestra contestuale del modello, le immagini più grandi vengono ridimensionate fino a un massimo di 3072 x 3072 mantenendo le proporzioni originali, le immagini più piccole vengono ridimensionate a 768 x 768 pixel. Non prevede alcuna riduzione dei costi per immagini di dimensioni inferiori, diverse dalla larghezza di banda o dal miglioramento delle prestazioni per immagini con risoluzione superiore.

Per ottenere risultati ottimali:

  • Ruota le immagini con l'orientamento corretto prima di caricarle.
  • Evita immagini sfocate.
  • Se utilizzi una singola immagine, posiziona il prompt di testo dopo l'immagine.

Caricare un file immagine utilizzando l'API File

Utilizza l'API File per caricare un'immagine di qualsiasi dimensione. (Utilizza sempre l'API File quando la combinazione di file e istruzioni di sistema che intendi inviare più grandi di 20 MB).

Inizia scaricando questo schizzo di un jetpack.

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

Carica l'immagine utilizzando media.upload e stampare l'URI, che viene utilizzato come riferimento nelle chiamate API 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}")

Verificare il caricamento del file immagine e recuperare i metadati

Puoi verificare che l'API abbia archiviato il file caricato e ottenere i relativi dei metadati chiamando files.get tramite l'SDK. Solo i valori name (e, di conseguenza, uri) sono univoci. Utilizza le funzionalità di display_name per identificare i file solo se gestisci autonomamente l'univocità.

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

A seconda del caso d'uso, puoi archiviare gli URI in strutture, ad esempio dict o un database.

Prompt con l'immagine e il testo caricati

Dopo aver caricato il file, puoi effettuare GenerateContent richieste che fanno riferimento l'URI dell'API File. Seleziona il modello generativo e forniscigli un prompt di testo e l'immagine caricata.

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

Carica uno o più file immagine archiviati localmente

In alternativa, puoi caricare i tuoi file. Puoi scaricare e utilizzare il nostro disegni di acque infette da piranha e un vigile del fuoco con un gatto.

Quando la combinazione di file e istruzioni di sistema che intendi inviare superi i 20 MB di dimensione, utilizza l'API File per caricarli, mostrato in precedenza. I file più piccoli possono essere richiamati localmente dal API Gemini:

import PIL.Image

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

Tieni presente che queste chiamate di dati in linea non includono molte delle funzionalità disponibili Mediante l'API File, ad esempio per recuperare i metadati dei file, elencare o eliminazione di file.

Prompt con più immagini

Puoi fornire all'API Gemini qualsiasi combinazione di immagini e testo rientrano nella finestra di contesto del modello. Questo esempio fornisce un breve testo e alle tre immagini caricate in precedenza.

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

Visualizzare un riquadro di delimitazione per un oggetto

Puoi chiedere al modello le coordinate dei riquadri di delimitazione degli oggetti nelle immagini. Per il rilevamento di oggetti, il modello Gemini è stato addestrato queste coordinate come larghezze o altezze relative nell'intervallo [0,1], scalate da 1000 e convertito in un numero intero. In effetti, le coordinate fornite sono relative a una versione 1000 x 1000 dell'immagine originale e devono essere riconvertite nel dimensioni dell'immagine originale.

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

Per convertire queste coordinate nelle dimensioni dell'immagine originale:

  1. Dividi ogni coordinata di output per 1000.
  2. Moltiplica le coordinate x per la larghezza originale dell'immagine.
  3. Moltiplica le coordinate y per l'altezza originale dell'immagine.

Prompt con video

In questo tutorial, caricherai un video utilizzando l'API File e genererai contenuti basati su queste immagini.

Dettagli tecnici (video)

Gemini 1.5 Pro e Flash supportano fino a circa un'ora di dati video.

Il video deve essere in uno dei seguenti formati MIME video:

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

Il servizio File API estrae i frame immagine dai video a 1 frame al secondo (f/s) e audio a 1 Kbps, singolo canale, con aggiunta di timestamp ogni secondo. Queste tariffe sono soggette a modifiche in futuro per migliorare l'inferenza.

I singoli frame sono di 258 token, mentre l'audio è di 32 token al secondo. Con metadati, ogni secondo di un video diventa circa 300 token, il che significa un contesto di finestra può occupare poco meno di un'ora di video.

Per fare domande sulle località con timestamp, utilizza il formato MM:SS, dove le prime due cifre rappresentano i minuti e le ultime due cifre secondi.

Per ottenere risultati ottimali:

  • Usa un video per richiesta.
  • Se utilizzi un solo video, inserisci il prompt di testo dopo il video.

Caricare un file video utilizzando l'API File

L'API File accetta direttamente i formati file video. Questo esempio utilizza la classe cortometraggio sulla NASA "La grande macchia rossa di Giove si riduce e cresce". Foto di: Goddard Space Flight Center (GSFC)/David Ladd (2018).

"La grande macchia rossa di Giove si riduce e cresce" è di dominio pubblico e non mostrare persone identificabili. (Linee guida sull'utilizzo di immagini e contenuti multimediali della NASA.)

Inizia recuperando il video breve:

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

Carica il video utilizzando l'API File e stampa l'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}")

Verificare il caricamento del file e controllare lo stato

Verifica che l'API abbia ricevuto correttamente i file chiamando il metodo 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)

Prompt con un video e un testo

Quando il video caricato è nello stato ACTIVE, puoi rendere GenerateContent richieste che specificano l'URI dell'API File per il video. Seleziona il modello del modello e fornirgli il video caricato e un prompt di testo.

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

Fai riferimento ai timestamp nei contenuti

Puoi utilizzare i timestamp del modulo MM:SS per fare riferimento a momenti specifici della 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)

Trascrivi i video e fornisci descrizioni visive

Se il video non è veloce (viene campionato un solo frame al secondo), puoi trascrivere il video con descrizioni visive per ogni scatto.

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

Elenco file

Puoi elencare tutti i file caricati con l'API File e i relativi URI utilizzando files.list_files().

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

Elimina file

I file caricati utilizzando l'API File vengono eliminati automaticamente dopo 2 giorni. Tu puoi anche eliminarli manualmente utilizzando files.delete().

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

Passaggi successivi

Questa guida illustra come utilizzare generateContent e per generare output di testo da input di immagini e video. Per saperne di più, consulta le seguenti risorse:

  • Prompt con file multimediali: L'API Gemini supporta i prompt con dati di testo, immagini, audio e video, noti come prompt multimodali.
  • Istruzioni di sistema: System le istruzioni consentono di orientare il comportamento del modello in base alle esigenze e casi d'uso.
  • Indicazioni per la sicurezza: A volte, l'IA generativa i modelli producono output inaspettati, ad esempio output imprecisi, di parte oppure offensivi. La post-elaborazione e la valutazione umana sono essenziali limitare il rischio di danni derivanti da questi output.