Mempelajari kemampuan visi dengan Gemini API

Lihat di ai.google.dev Coba notebook Colab Lihat notebook di GitHub

Gemini API dapat menjalankan inferensi pada gambar dan video yang diteruskan ke Gemini API. Jika lulus gambar, serangkaian gambar, atau video, Gemini dapat:

  • Jelaskan atau jawab pertanyaan tentang konten
  • Rangkum konten
  • Ekstrapolasi dari konten

Tutorial ini menunjukkan beberapa kemungkinan cara untuk menjalankan perintah Gemini API dengan input gambar dan video. Semua output hanya berupa teks.

Sebelum memulai: Siapkan project dan kunci API Anda

Sebelum memanggil Gemini API, Anda perlu menyiapkan project dan mengonfigurasi kunci API Anda.

Perintah dengan gambar

Dalam tutorial ini, Anda akan mengupload gambar menggunakan File API atau sebagai data inline serta membuat konten berdasarkan gambar tersebut.

Detail teknis (gambar)

Gemini 1.5 Pro dan 1.5 Flash mendukung maksimum 3.600 file gambar.

Gambar harus dalam salah satu jenis MIME data gambar berikut:

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

Setiap gambar setara dengan 258 token.

Meskipun tidak ada batasan khusus untuk jumlah {i>pixel<i} dalam sebuah gambar selain jendela konteks model, gambar yang lebih besar diperkecil skalanya hingga resolusi 3072x3072 dengan tetap mempertahankan rasio aspek aslinya, sekaligus gambar yang lebih kecil diskalakan hingga 768x768 {i>pixel<i}. Tidak ada pengurangan biaya untuk gambar dengan ukuran yang lebih rendah, selain bandwidth, atau peningkatan performa untuk gambar dengan resolusi lebih tinggi.

Untuk hasil terbaik:

  • Putar gambar ke orientasi yang benar sebelum mengupload.
  • Hindari gambar yang buram.
  • Jika menggunakan satu gambar, tempatkan perintah teks setelah gambar.

Mengupload file gambar menggunakan File API

Gunakan File API untuk mengupload gambar dalam berbagai ukuran. (Selalu gunakan File API saat kombinasi file dan instruksi sistem yang ingin Anda kirim adalah lebih dari 20 MB.)

Mulai dengan mendownload ini sketsa jetpack.

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

Upload gambar menggunakan media.upload dan mencetak URI, yang digunakan sebagai referensi dalam panggilan 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}")

Memverifikasi upload file gambar dan mendapatkan metadata

Anda dapat memverifikasi bahwa API berhasil menyimpan file yang diupload dan mendapatkan metadata dengan memanggil files.get melalui SDK. Hanya name (dan dengan demikian, uri) yang unik. Gunakan display_name untuk mengidentifikasi file hanya jika Anda mengelola keunikan sendiri.

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

Bergantung pada kasus penggunaan, Anda bisa menyimpan URI dalam struktur, seperti dict atau database.

Perintah dengan gambar dan teks yang diupload

Setelah mengupload file, Anda dapat membuat GenerateContent permintaan referensi tersebut URI File API. Pilih model generatif dan berikan perintah teks dan gambar yang diupload.

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

Upload satu atau beberapa file gambar yang disimpan secara lokal

Atau, Anda dapat mengupload file Anda sendiri. Anda dapat mendownload dan menggunakan gambar perairan yang dipenuhi piranha dan pemadam kebakaran dengan seekor kucing.

Saat kombinasi file dan petunjuk sistem yang ingin Anda kirim berukuran lebih dari 20 MB, gunakan File API untuk mengunggah file tersebut, yang ditampilkan sebelumnya. File yang lebih kecil dapat dipanggil secara lokal dari API Gemini:

import PIL.Image

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

Perlu diketahui bahwa panggilan data inline ini tidak menyertakan banyak fitur yang tersedia melalui File API, seperti mendapatkan metadata file, listingan, atau menghapus file.

Perintah dengan beberapa gambar

Anda dapat menyediakan Gemini API dengan kombinasi gambar dan teks yang sesuai dengan jendela konteks model. Contoh ini memberikan satu teks singkat dan tiga gambar yang telah diupload sebelumnya.

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

Mendapatkan kotak pembatas untuk suatu objek

Anda bisa meminta koordinat model untuk kotak pembatas objek gambar. Untuk deteksi objek, model Gemini telah dilatih untuk memberikan koordinat ini sebagai lebar atau tinggi relatif dalam rentang [0,1], yang diskalakan oleh 1000 dan dikonversi menjadi bilangan bulat. Secara efektif, koordinat yang diberikan adalah untuk versi 1000x1000 dari gambar asli, dan harus dikonversi kembali ke gambar asli.

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

Untuk mengonversi koordinat ini ke dimensi gambar asli:

  1. Bagi setiap koordinat output dengan 1000.
  2. Kalikan koordinat x dengan lebar gambar asli.
  3. Kalikan koordinat y dengan tinggi gambar asli.

Meminta dengan video

Dalam tutorial ini, Anda akan mengupload video menggunakan File API dan membuat konten berdasarkan gambar tersebut.

Detail teknis (video)

Gemini 1.5 Pro dan Flash mendukung hingga sekitar satu jam data video.

Video harus dalam salah satu jenis MIME format video berikut:

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

Layanan File API mengekstrak frame gambar dari video pada 1 frame per detik (FPS) dan audio dengan kecepatan 1 Kbps, satu saluran, dan menambahkan stempel waktu setiap detik. Kecepatan ini dapat berubah di masa mendatang untuk peningkatan inferensi.

Frame individu adalah 258 token, dan audio adalah 32 token per detik. Dengan metadata, setiap detik video menjadi ~300 token, yang berarti 1 juta konteks dapat memuat sedikit kurang dari satu jam video.

Untuk mengajukan pertanyaan tentang lokasi berstempel waktu, gunakan format MM:SS, dengan dua digit pertama mewakili menit dan dua digit terakhir mewakili detik.

Untuk hasil terbaik:

  • Gunakan satu video per perintah.
  • Jika menggunakan satu video, tempatkan perintah teks setelah video.

Mengupload file video menggunakan File API

File API menerima format file video secara langsung. Contoh ini menggunakan film pendek NASA "Titik Merah Besar Jupiter Menyusut dan Tumbuh". Kredit: Goddard Space Flight Center (GSFC)/David Ladd (2018).

"Titik Merah Besar Jupiter Menyusut dan Tumbuh" berada di domain publik dan tidak menampilkan orang yang dapat diidentifikasi. (Panduan penggunaan gambar dan media NASA.)

Memulai dengan mengambil video singkat:

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

Upload video menggunakan File API dan cetak 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}")

Memverifikasi upload file dan memeriksa status

Verifikasi bahwa API sudah berhasil menerima file dengan memanggil Metode 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)

Perintah dengan video dan teks

Setelah video yang diupload memiliki status ACTIVE, Anda dapat membuat GenerateContent yang menetapkan URI File API untuk video tersebut. Pilih model dan menyediakannya dengan video yang diupload dan prompt teks.

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

Lihat stempel waktu dalam konten

Anda dapat menggunakan stempel waktu formulir MM:SS untuk merujuk ke momen tertentu dalam video Anda.

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

Transkripsikan video dan berikan deskripsi visual

Jika video tidak tempo cepat (hanya 1 frame per detik dari video yang diambil sampelnya), Anda dapat mentranskripsikan video dengan deskripsi visual untuk setiap adegan.

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

Mencantumkan file

Anda dapat menampilkan daftar semua file yang diupload menggunakan File API dan URI-nya menggunakan files.list_files().

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

Menghapus file

File yang diupload menggunakan File API akan otomatis dihapus setelah 2 hari. Anda juga dapat menghapusnya secara manual menggunakan files.delete().

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

Langkah berikutnya

Panduan ini menunjukkan cara menggunakan generateContent dan untuk menghasilkan output teks dari input gambar dan video. Untuk mempelajari lebih lanjut, lihat referensi berikut:

  • Membuat perintah dengan file media: Gemini API mendukung pembuatan perintah dengan data teks, gambar, audio, dan video, yang dikenal sebagai multimodal prompting.
  • Petunjuk sistem: Sistem memungkinkan Anda mengarahkan perilaku model berdasarkan kebutuhan dan kasus penggunaan Anda.
  • Panduan keamanan: Terkadang AI generatif menghasilkan output yang tidak diharapkan, misalnya output yang tidak akurat, bias, atau menyinggung. Pascapemrosesan dan evaluasi manual sangat penting untuk membatasi risiko bahaya dari {i>output<i} tersebut.