Poznaj możliwości w zakresie rozpoznawania treści dzięki interfejsowi Gemini API

Wyświetl na ai.google.dev Wypróbuj notatnik Colab Wyświetl notatnik na GitHubie

Interfejs Gemini API może wnioskować na podstawie przekazanych obrazów i filmów. Po zaliczeniu Gemini może:

  • Opisz treści lub odpowiedz na pytania na ich temat
  • Streść treści
  • wyciągaj wnioski na podstawie treści,

Ten samouczek przedstawia kilka możliwych sposobów tworzenia promptów dla interfejsu Gemini API obrazów i danych wejściowych wideo. Wszystkie dane wyjściowe zawierają tylko tekst.

Zanim zaczniesz: skonfiguruj projekt i klucz interfejsu API

Zanim wywołasz Gemini API, musisz skonfigurować projekt klucz interfejsu API.

Prompty obrazami

W tym samouczku będziesz przesyłać obrazy przy użyciu interfejsu File API lub jako dane wbudowane i generować na ich podstawie treści.

Szczegóły techniczne (obrazy)

Gemini 1.5 Pro i 1.5 Flash obsługują maksymalnie 3600 plików graficznych.

Obrazy muszą być w jednym z tych typów MIME danych obrazu:

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

Każdy obraz odpowiada 258 tokenom.

Nie ma żadnych konkretnych ograniczeń liczby pikseli na obrazie okna kontekstu modelu, większe obrazy są skalowane w dół rozdzielczości 3072x3072 przy zachowaniu oryginalnych proporcji mniejsze obrazy są skalowane do rozmiaru 768 x 768 pikseli. Nie ma żadnej redukcji kosztów w przypadku obrazów o mniejszym rozmiarze, innym niż przepustowość lub poprawa wydajności w przypadku zdjęć w wyższej rozdzielczości.

Aby uzyskać najlepsze wyniki:

  • Przed przesłaniem obróć zdjęcia do prawidłowej orientacji.
  • Unikaj rozmytych obrazów.
  • Jeśli używasz jednego obrazu, umieść prompt tekstowy za nim.

Przesyłanie pliku graficznego za pomocą interfejsu File API

Za pomocą interfejsu File API możesz przesyłać obrazy o dowolnym rozmiarze. (Zawsze używaj interfejsu File API, Kombinacja plików i instrukcji systemowych, które chcesz wysłać, to większe niż 20 MB).

Zacznij od pobrania szkic plecaka odrzutowego.

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

Prześlij obraz za pomocą media.upload i wydrukuj identyfikator URI, który będzie używany jako punkt odniesienia w wywołaniach interfejsu Gemini API.

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

Sprawdzanie, czy plik obrazu został przesłany, i uzyskaj metadane

Możesz sprawdzić, czy interfejs API prawidłowo zapisał przesłany plik i pobrać jego metadanych, wywołując metodę files.get za pomocą pakietu SDK. Tylko name (a co za tym idzie, uri) są unikalne. Używaj display_name, aby identyfikować pliki tylko wtedy, gdy samodzielnie zarządzasz niepowtarzalnością.

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

W zależności od zastosowania możesz przechowywać identyfikatory URI w określonych strukturach, np. dict lub bazę danych.

Prompt z przesłanym obrazem i tekstem

Po przesłaniu pliku możesz przesłać GenerateContent próśb, które odwołują się identyfikator URI interfejsu File API. Wybierz model generatywny i podaj mu prompt tekstowy i przesłanego obrazu.

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

Prześlij co najmniej jeden lokalnie przechowywany plik obrazu

Możesz też przesłać własne pliki. Plik do pobrania i używania możesz rysunki woda spowodowana piranhą i strażak z kotem.

Gdy kombinacja plików i instrukcji systemowych, które chcesz wysłać, jest większy niż 20 MB, użyj interfejsu File API do przesłania tych plików wyświetlone wcześniej. Mniejsze pliki można wywoływać lokalnie z Interfejs Gemini API:

import PIL.Image

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

Pamiętaj, że tego rodzaju wbudowane wywołania danych nie obejmują wielu funkcji za pomocą interfejsu File API, na przykład pobierania metadanych pliku, informacji usuwania plików.

Prompt z wieloma obrazami

Do interfejsu Gemini API możesz dodać dowolną kombinację obrazów i tekstu, do okna kontekstu modelu. W tym przykładzie podajemy jeden krótki tekst oraz 3 wcześniej przesłane obrazy.

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

Pobieranie ramki ograniczającej dla obiektu

Możesz poprosić model o współrzędne ramek ograniczających obiekty w obrazach. Do wykrywania obiektów model Gemini został wytrenowany tak, te współrzędne jako szerokości lub wysokości względne w zakresie [0,1], skalowane według 1000 i przekonwertowane na liczbę całkowitą. Podane współrzędne odpowiadają wersji 1000x1000, którą trzeba przekonwertować z powrotem na wymiarów oryginalnego obrazu.

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

Aby przekonwertować te współrzędne na wymiary oryginalnego obrazu:

  1. Podziel każdą współrzędne wyjściowe przez 1000.
  2. Pomnóż współrzędne X przez szerokość pierwotnego obrazu.
  3. Pomnóż współrzędne Y przez wysokość oryginalnego obrazu.

Prompt z obrazem

W tym samouczku prześlesz film za pomocą interfejsu File API i wygenerujesz na podstawie tych obrazów.

Szczegóły techniczne (film)

Gemini 1.5 Pro i Flash obsługują dane wideo o długości do około godziny.

Film musi być w jednym z tych formatów MIME:

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

Usługa File API wyodrębnia z filmów klatki z szybkością 1 klatki na sekundę. (FPS) i dźwięk z szybkością 1 kb/s, pojedynczy kanał z sygnaturami czasowymi co sekundę. Mogą one w przyszłości ulec zmianie w celu poprawy wnioskowania.

Pojedyncze klatki to 258 tokenów, a dźwięk to 32 tokeny na sekundę. Na metadanych, każda sekunda filmu to ok. 300 tokenów, co oznacza milion kontekstu może zmieścić się na mniej niż godzinę materiału wideo.

Aby zadać pytania na temat lokalizacji z sygnaturami czasowymi, użyj formatu MM:SS, gdzie pierwsze 2 cyfry oznaczają minuty, a 2 ostatnie cyfry – sek.

Aby uzyskać najlepsze wyniki:

  • Użyj 1 filmu na prompt.
  • Jeśli korzystasz z jednego filmu, umieść prompt tekstowy po filmie.

Przesyłanie pliku wideo za pomocą interfejsu File API

Interfejs File API akceptuje bezpośrednio formaty plików wideo. W tym przykładzie użyto parametru krótki film NASA „Wielka czerwona plama Jupitera zmniejsza się i wzrasta”. Źródło: Goddard Space Flight Center (GSFC)/David Ladd (2018).

„Wielka czerwona plama Jupitera zmniejsza się i wzrasta” należy do domeny publicznej i robi nie pokazuj możliwych do zidentyfikowania osób. (Wytyczne NASA dotyczące wykorzystania obrazów i multimediów).

Najpierw pobierz krótki film:

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

Prześlij film za pomocą interfejsu File API i wydrukuj identyfikator 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}")

Zweryfikuj przesłany plik i sprawdź stan

Sprawdź, czy interfejs API otrzymał pliki, wywołując metodę 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 za pomocą filmu i tekstu

Gdy przesłany film będzie miał stan ACTIVE, możesz GenerateContent z żądaniami określającymi identyfikator URI interfejsu File API dla danego filmu. Wybierz generatywną model i przekazać mu przesłany film oraz prompt tekstowy.

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

Odwoływać się do sygnatur czasowych w treści

Możesz użyć sygnatur czasowych w formie MM:SS, aby odnosić się do konkretnych momentów film.

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

Utwórz transkrypcję filmu i dodaj wizualne opisy

Jeśli odtwarzanie filmu nie jest szybkie (próbkowana jest tylko 1 klatka na sekundę), możesz utworzyć transkrypcję filmu z wizualnymi opisami poszczególnych ujęć.

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

Wyświetlanie listy plików

Możesz wyświetlić listę wszystkich plików przesłanych za pomocą interfejsu File API i ich identyfikatorów URI za pomocą files.list_files()

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

Usuwanie plików

Pliki przesłane przy użyciu interfejsu File API są automatycznie usuwane po 2 dniach. Ty możesz też usunąć je ręcznie za pomocą files.delete().

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

Co dalej?

Z tego przewodnika dowiesz się, jak używać generateContent i w celu generowania tekstowych wyników z danych wejściowych obrazu i wideo. Aby dowiedzieć się więcej, zajrzyj do tych materiałów:

  • Wyświetlanie promptów przy użyciu plików multimedialnych: Gemini API obsługuje prompty z danymi tekstowymi, graficznymi, audio i wideo, nazywanych promptami multimodalnymi.
  • Instrukcje systemowe: system które pozwalają sterować działaniem modelu w zależności od do potrzeb i przypadków użycia.
  • Wskazówki dotyczące bezpieczeństwa: czasami generatywna AI modele generują nieoczekiwane wyniki, na przykład nieprawidłowe dane wyjściowe, stronniczych lub obraźliwych. Przetwarzanie końcowe i ocena manualna ma kluczowe znaczenie ograniczają ryzyko szkód takich jak dane wyjściowe.