Explorez les fonctionnalités visuelles de l'API Gemini

<ph type="x-smartling-placeholder"></ph>

Afficher sur ai.google.dev Essayer un notebook Colab Afficher le notebook sur GitHub

L'API Gemini peut exécuter des inférences sur les images et les vidéos qui lui sont transmises. Après réussite une image, une série d'images ou une vidéo, Gemini peut:

  • Décrivez ou répondez aux questions sur le contenu
  • Résumer le contenu
  • Extrapoler à partir du contenu

Ce tutoriel présente plusieurs façons d'envoyer une requête à l'API Gemini avec des images et des entrées vidéo. Tous les résultats ne contiennent que du texte.

Avant de commencer: configurer votre projet et votre clé API

Avant d'appeler l'API Gemini, vous devez configurer votre projet et configurer votre clé API.

Requêtes avec images

Dans ce tutoriel, vous allez importer des images à l'aide de l'API File ou en tant que données intégrées. et générer des contenus à partir de ces images.

Détails techniques (images)

Gemini 1.5 Pro et 1.5 Flash acceptent jusqu'à 3 600 fichiers image.

Les images doivent appartenir à l'un des types MIME de données d'image suivants:

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

Chaque image équivaut à 258 jetons.

Bien qu'il n'y ait aucune limite spécifique au nombre de pixels dans une image en dehors la fenêtre de contexte du modèle, les grandes images sont réduites résolution de 3 072 x 3 072 tout en conservant le format d'origine, les images les plus petites sont mises à l'échelle jusqu'à 768 x 768 pixels. Aucune réduction des coûts pour les images dont la taille est inférieure, en dehors de la bande passante ou de l'amélioration des performances ; pour des images en haute résolution.

Pour des résultats optimaux, procédez comme suit :

  • Faites pivoter les images dans la bonne orientation avant de les importer.
  • Évitez les images floues.
  • Si vous utilisez une seule image, placez la requête textuelle après l'image.

Importer un fichier image à l'aide de l'API File

Utilisez l'API File pour importer une image de n'importe quelle taille. (Utilisez toujours l'API File lorsque la combinaison de fichiers et d'instructions système que vous souhaitez envoyer est supérieure à 20 Mo.)

Commencez par télécharger ce croquis d'un jetpack.

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

Importez l'image à l'aide de media.upload et imprimer l'URI, qui servira de référence dans les appels de l'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}")

Vérifier l'importation du fichier image et obtenir les métadonnées

Vous pouvez vérifier que l'API a bien stocké le fichier importé et obtenir ses métadonnées en appelant files.get via le SDK. Seuls les name (et par extension, les uri) sont uniques. Utilisez display_name pour identifier les fichiers uniquement si vous gérez vous-même l'unicité.

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

Selon votre cas d'utilisation, vous pouvez stocker les URI dans des structures, telles que dict ou une base de données.

Requête avec l'image et le texte importés

Après avoir importé le fichier, vous pouvez effectuer des requêtes GenerateContent qui font référence l'URI de l'API File. Sélectionner le modèle génératif et lui fournir une requête textuelle et l'image importée.

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

Importez un ou plusieurs fichiers image stockés localement

Vous pouvez également importer vos propres fichiers. Vous pouvez télécharger et utiliser notre dessins de eaux infestées de piranha et un Pompier avec un chat.

Lorsque la combinaison de fichiers et d'instructions système que vous avez l'intention d'envoyer dépasse 20 Mo, importez ces fichiers à l'aide de l'API File, affiché précédemment. Les fichiers plus petits peuvent être appelés localement à partir du API Gemini:

import PIL.Image

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

Notez que ces appels de données intégrés n'incluent pas la plupart des fonctionnalités disponibles via l'API File, par exemple pour obtenir des métadonnées de fichier, une liste ou supprimer des fichiers.

Requête avec plusieurs images

Vous pouvez fournir à l'API Gemini n'importe quelle combinaison d'images et de texte s'adaptent à la fenêtre de contexte du modèle. Cet exemple fournit un texte court et les trois images précédemment importées.

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

Obtenir le cadre de délimitation d'un objet

Vous pouvez demander au modèle les coordonnées des cadres de délimitation des objets. dans les images. Pour la détection d'objets, le modèle Gemini a été entraîné pour fournir ces coordonnées sous forme de largeurs ou de hauteurs relatives dans la plage [0,1], mises à l'échelle de 1 000 et converti en entier. En effet, les coordonnées fournies correspondent à la version 1 000 x 1 000 de l'image d'origine, qui doit être reconvertie au format de l'image d'origine.

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

Pour convertir ces coordonnées aux dimensions de l'image d'origine:

  1. Divisez chaque coordonnée de sortie par 1 000.
  2. Multipliez les coordonnées X par la largeur de l'image d'origine.
  3. Multipliez les coordonnées Y par la hauteur de l'image d'origine.

Requêtes vidéo

Dans ce tutoriel, vous allez importer une vidéo à l'aide de l'API File et générer à partir de ces images.

Détails techniques (vidéo)

Gemini 1.5 Pro et Flash acceptent jusqu'à environ une heure de données vidéo.

La vidéo doit utiliser l'un des types MIME de format vidéo suivants:

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

Le service File API extrait des images des vidéos à raison d'une image par seconde (FPS) et audio à 1 kbit/s, avec un seul canal, avec des codes temporels ajoutés toutes les secondes. Ces taux sont susceptibles de changer à l'avenir pour améliorer l'inférence.

Les trames individuelles comptent 258 jetons et l'audio 32 jetons par seconde. Avec métadonnées, chaque seconde de vidéo devient environ 300 jetons, soit un million de contexte peut contenir un peu moins d'une heure de vidéo.

Pour poser des questions sur des lieux horodatés, utilisez le format MM:SS, où les deux premiers chiffres représentent les minutes et les deux derniers chiffres représentent secondes.

Pour des résultats optimaux, procédez comme suit :

  • Utilisez une vidéo par requête.
  • Si vous utilisez une seule vidéo, placez la requête textuelle après la vidéo.

Importer un fichier vidéo à l'aide de l'API File

L'API File accepte directement les formats de fichiers vidéo. Cet exemple utilise court film de la NASA "Jupiter's Great Red Spots Shrinks and Grows". Crédit: Goddard Space Flight Center (GSFC)/David Ladd (2018).

"La grande tâche rouge de Jupiter rétrécit et grandit" relève du domaine public et ne pas montrer de personnes identifiables. (Consignes relatives à l'utilisation des images et contenus multimédias de la NASA)

Commencez par récupérer le Short:

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

Importez la vidéo à l'aide de l'API File et imprimez 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}")

Vérifier l'importation du fichier et vérifier l'état

Vérifiez que l'API a bien reçu les fichiers en appelant la méthode 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)

Requête avec une vidéo et du texte

Une fois que la vidéo importée est à l'état ACTIVE, vous pouvez GenerateContent qui spécifient l'URI de l'API File pour cette vidéo. Sélectionnez l'IA générative avec la vidéo importée et une requête textuelle.

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

Reportez-vous aux codes temporels du contenu.

Vous pouvez utiliser les codes temporels au format MM:SS pour faire référence à des moments spécifiques du vidéo.

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

Transcrire la vidéo et fournir des descriptions visuelles

Si la vidéo n'est pas rythmée (seule une image par seconde est échantillonnée), il est possible de transcrire la vidéo avec des descriptions visuelles pour chaque plan.

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

Répertorier les fichiers

Vous pouvez répertorier tous les fichiers importés avec l'API File et leurs URI à l'aide de la méthode files.list_files()

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

Supprimer des fichiers

Les fichiers importés à l'aide de l'API File sont automatiquement supprimés au bout de deux jours. Toi vous pouvez également les supprimer manuellement à l'aide de files.delete().

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

Étape suivante

Ce guide vous explique comment utiliser generateContent et pour générer des sorties textuelles à partir d'entrées d'image et de vidéo. Pour en savoir plus, consultez les ressources suivantes:

  • Invite avec des fichiers multimédias: l'option L'API Gemini prend en charge les requêtes contenant du texte, des images, de l'audio et de la vidéo, appelées requêtes multimodales.
  • Instructions relatives au système: Système vous permettent de contrôler le comportement du modèle en fonction besoins et cas d'utilisation.
  • Conseils de sécurité: parfois, l'IA générative les modèles produisent des résultats inattendus, tels que des résultats inexacts, biaisées ou choquantes. Le post-traitement et l'évaluation humaine sont essentiels pour limiter le risque que ces sorties soient néfastes.