Gemini API ile görüş özelliklerini keşfedin

ai.google.dev adresinde görüntüle Colab not defteri denemesi Not defterini GitHub'da görüntüleme

Gemini modelleri, resimleri ve videoları işleyebilir. Bu sayede, geçmişte alana özgü modeller gerektiren birçok yenilikçi geliştirici kullanım alanı mümkün olur. Gemini'nin görüntüleme özelliklerinden bazıları şunlardır:

  • Resimlerle ilgili soruları yanıtlama ve resimlere altyazı ekleme
  • 2 milyon jetona kadar olan PDF'leri metne dönüştürme ve bunlarla ilgili çıkarım yapma
  • 90 dakikaya kadar uzunluktaki videoları tanımlama, segmentlere ayırma ve videolardan bilgi ayıklama
  • Bir resimdeki nesneleri algılayıp bu nesnelerin sınırlayıcı kutu koordinatlarını döndürme

Gemini sıfırdan çok modlu olacak şekilde tasarlandı ve yapabileceklerimizin sınırlarını zorlamaya devam ediyoruz.

Resim girişi

Toplam resim yükü boyutu 20 MB'tan azsa base64 kodlu resimler yüklemenizi veya yerel olarak depolanan resim dosyalarını doğrudan yüklemenizi öneririz.

Yerel görüntülerle çalışma

Python görüntüleme kitaplığını (Pillow ) kullanıyorsanız PIL resim nesnelerini de kullanabilirsiniz.

from google import genai
from google.genai import types

import PIL.Image

image = PIL.Image.open('/path/to/image.png')

client = genai.Client(api_key="GEMINI_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash",
    contents=["What is this image?", image])

print(response.text)

Base64 kodlu resimler

Herkese açık resim URL'lerini Base64 yük verileri olarak kodlayarak yükleyebilirsiniz. Aşağıdaki kod örneğinde, yalnızca standart kitaplık araçları kullanılarak bunun nasıl yapılacağı gösterilmektedir:

from google import genai
from google.genai import types

import requests

image_path = "https://goo.gle/instrument-img"
image = requests.get(image_path)

client = genai.Client(api_key="GEMINI_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash-exp",
    contents=["What is this image?",
              types.Part.from_bytes(image.content, "image/jpeg")])

print(response.text)

Birden fazla resim

Birden fazla resimle istemde bulunmak için generate_content çağrısında birden fazla resim sağlayabilirsiniz. Bunlar base64 veya PIL dahil olmak üzere desteklenen herhangi bir biçimde olabilir.

from google import genai
from google.genai import types

import pathlib
import PIL.Image

image_path_1 = "path/to/your/image1.jpeg"  # Replace with the actual path to your first image
image_path_2 = "path/to/your/image2.jpeg" # Replace with the actual path to your second image

image_url_1 = "https://goo.gle/instrument-img" # Replace with the actual URL to your third image

pil_image = PIL.Image.open(image_path_1)

b64_image = types.Part.from_bytes(
    pathlib.Path(image_path_2).read_bytes(), "image/jpeg")

downloaded_image = requests.get(image_url_1)

client = genai.Client(api_key="GEMINI_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash-exp",
    contents=["What do these images have in common?",
              pil_image, b64_image, downloaded_image])

print(response.text)

Bu satır içi veri çağrılarının, dosya meta verilerini alma, listeleme veya dosyaları silme gibi File API üzerinden kullanılabilen özelliklerin çoğunu içermediğini unutmayın.

Büyük resim yükü

Göndermek istediğiniz dosya ve sistem talimatlarının toplam boyutu 20 MB'tan büyükse bu dosyaları yüklemek için File API'yi kullanın.

Herhangi bir boyutta resim yüklemek için File API'nin media.upload yöntemini kullanın.

Dosyayı yükledikten sonra File API URI'sine atıfta bulunan GenerateContent istekleri gönderebilirsiniz. Üretken modeli seçin ve modele bir metin istemi ile yüklenen resmi sağlayın.

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

img_path = "/path/to/Cajun_instruments.jpg"
file_ref = client.files.upload(path=img_path)
print(f'{file_ref=}')

client = genai.Client(api_key="GEMINI_API_KEY")
response = client.models.generate_content(
    model="gemini-2.0-flash-exp",
    contents=["What can you tell me about these instruments?",
              file_ref])

print(response.text)

OpenAI Uyumluluğu

OpenAI kitaplıklarını kullanarak Gemini'nin görüntü anlama özelliklerine erişebilirsiniz. Bu sayede, üç kod satırını güncelleyerek ve Gemini API anahtarınızı kullanarak Gemini'yi mevcut OpenAI iş akışlarına entegre edebilirsiniz. Base64 yük olarak kodlanmış resimlerin nasıl gönderileceğini gösteren kod için Görüntü anlama örneğine bakın.

Resimlerle istem verme

Bu eğitimde, File API'yi kullanarak veya satır içi veri olarak resim yükleyip bu resimlere göre içerik oluşturacaksınız.

Teknik ayrıntılar (resimler)

Gemini 1.5 Pro ve 1.5 Flash en fazla 3.600 resim dosyası destekler.

Resimler aşağıdaki resim verisi MIME türlerinden birinde olmalıdır:

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

Token'lar

Resimler için jetonlar şu şekilde hesaplanır:

  • Gemini 1.0 Pro Vision: Her resim 258 jeton olarak hesaplanır.
  • Gemini 1.5 Flash ve Gemini 1.5 Pro: Bir resmin her iki boyutu da 384 pikseli aşmıyorsa 258 jeton kullanılır. Bir resmin boyutu 384 pikselden büyükse resim, karolara bölünerek kırpılır. Her karo boyutu varsayılan olarak en küçük boyutun (genişlik veya yükseklik) 1,5'e bölünmesiyle elde edilir. Gerekirse her karo, 256 pikselden küçük ve 768 pikselden büyük olmayacak şekilde ayarlanır. Ardından her karo 768x768 olarak yeniden boyutlandırılır ve 258 jeton kullanılır.
  • Gemini 2.0 Flash: Her iki boyutu da 384 pikselden küçük olan resim girişleri 258 jeton olarak sayılır. Bir veya her iki boyutu da daha büyük olan resimler, gerektiği şekilde kırpılır ve 768x768 piksellik karolara ölçeklendirilir. Her karo 258 jeton olarak sayılır.

En iyi sonuçlar için

  • Yüklemeden önce resimleri doğru yönde döndürün.
  • Bulanık resimler kullanmayın.
  • Tek resim kullanıyorsanız metin isteklerini resmin sonuna yerleştirin.

İşlemler

Bu bölümde, nesne algılama ve sınırlayıcı kutu koordinatları da dahil olmak üzere Gemini modelinin belirli görüntüleme özellikleri özetlenmiştir.

Bir nesne için sınır kutusu alma

Gemini modelleri, sınırlayıcı kutu koordinatlarını [0, 1] aralığındaki göreli genişlikler veya yükseklikler olarak döndürecek şekilde eğitilir. Bu değerler daha sonra 1.000'e göre ölçeklendirilir ve tam sayıya dönüştürülür. Koordinatlar, aslında resmin 1000x1000 piksellik sürümündeki sınırlayıcı kutuyu temsil eder. Bu nedenle, sınırlayıcı kutuları doğru şekilde eşlemek için bu koordinatları orijinal resminizin boyutlarına dönüştürmeniz gerekir.

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

prompt = (
  "Return a bounding box for each of the objects in this image "
  "in [ymin, xmin, ymax, xmax] format.")

response = client.models.generate_content(
  model="gemini-1.5-pro",
  contents=[sample_file_1, prompt])

print(response.text)

Görüntü ve videolarda nesne algılama ve yerelleştirme için sınırlayıcı kutuları kullanabilirsiniz. Nesneleri sınırlayıcı kutularla doğru şekilde tanımlayıp sınırlandırarak çok çeşitli uygulamalardan yararlanabilir ve projelerinizin zekasını artırabilirsiniz.

En Önemli Avantajları

  • Basit: Bilgisayar görüşü uzmanlığınızdan bağımsız olarak nesne algılama özelliklerini uygulamalarınıza kolayca entegre edin.
  • Özelleştirilebilir: Özel bir model eğitmeniz gerekmeden özel talimatlara (ör. "Bu resimdeki tüm yeşil nesnelerin sınırlayıcı kutularını görmek istiyorum") göre sınırlayıcı kutular oluşturun.

Teknik Ayrıntılar

  • Giriş: İsteminiz ve ilişkili resimler veya video kareleri.
  • Çıkış: [y_min, x_min, y_max, x_max] biçiminde sınırlayıcı kutular. Başlangıç noktası sol üst köşedir. x ve y ekseni sırasıyla yatay ve dikey olarak gider. Koordinat değerleri her resim için 0-1000 olarak normalleştirilir.
  • Görselleştirme: AI Studio kullanıcıları, kullanıcı arayüzünde sınır kutularının çizildiğini görür.

Python geliştiricileri 2D uzamsal anlama not defterini veya deneysel 3D işaretleme not defterini deneyebilir.

Koordinatları normalleştirme

Model, [y_min, x_min, y_max, x_max] biçiminde sınırlayıcı kutu koordinatlarını döndürür. Bu normalleştirilmiş koordinatları orijinal resminizin piksel koordinatlarına dönüştürmek için aşağıdaki adımları uygulayın:

  1. Her çıkış koordinatını 1.000'e bölün.
  2. X koordinatlarını orijinal resim genişliğiyle çarpın.
  3. Y koordinatlarını orijinal resim yüksekliğiyle çarpın.

Sınırlayıcı kutu koordinatları oluşturma ve bunları resimlerde görselleştirmeyle ilgili daha ayrıntılı örnekleri incelemek için Nesne Algılama yemek kitabı örneğimizi incelemenizi öneririz.

Videolu istem

Bu eğitimde, File API'yi kullanarak bir video yükleyip bu görüntülere dayalı içerikler oluşturacaksınız.

Teknik ayrıntılar (video)

Gemini 1.5 Pro ve Flash, yaklaşık bir saatlik video verisini destekler.

Video, aşağıdaki video biçimi MIME türlerinden birinde olmalıdır:

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

File API hizmeti, videolardan saniyede 1 kare (FPS) hızında resim kareleri, tek kanalda 1 Kb/sn hızında ses çıkarır ve her saniyede zaman damgaları ekler. Bu oranlar, gelecekte çıkarımlarda iyileştirmeler yapılması amacıyla değiştirilebilir.

Tek kareler 258 jeton, ses ise saniye başına 32 jetondur. Meta verilerle birlikte, videonun her bir saniyesi yaklaşık 300 jetona dönüşür. Bu da 1 milyon bağlam penceresine bir saatten biraz daha kısa bir video sığabileceği anlamına gelir.

Zaman damgalı konumlarla ilgili soru sormak için MM:SS biçimini kullanın. Bu biçimde ilk iki basamak dakikaları, son iki basamak ise saniyeleri temsil eder.

En iyi sonuçlar için:

  • Her istem için bir video kullanın.
  • Tek bir video kullanıyorsanız metin istemini videodan sonra yerleştirin.

File API'yi kullanarak video dosyası yükleme

File API, video dosya biçimlerini doğrudan kabul eder. Bu örnekte, "Jüpiter'in Büyük Kırmızı Lekesi Küçülüyor ve Büyüyor" adlı kısa NASA filmi kullanılmıştır. Fotoğraf: Goddard Uzay Uçuş Merkezi (GSFC)/David Ladd (2018).

"Jupiter's Great Red Spot Shrinks and Grows" (Jüpiter'in Büyük Kırmızı Lekesi Küçülüyor ve Büyüyor) herkese açık bir içeriktir ve kimliği tanımlanabilir kişiler göstermez. (NASA resim ve medya kullanım kuralları.)

Shorts videosunu indirerek başlayın:

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

Videoyu File API'yi kullanarak yükleyin ve URI'yi yazdırın.

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

print("Uploading file...")
video_file = client.files.upload(path="GreatRedSpot.mp4")
print(f"Completed upload: {video_file.uri}")

Dosya yükleme işlemini doğrulama ve durumu kontrol etme

files.get yöntemini çağırarak API'nin dosyaları başarıyla aldığını doğrulayın.

import time

# Check whether the file is ready to be used.
while video_file.state.name == "PROCESSING":
    print('.', end='')
    time.sleep(1)
    video_file = client.files.get(name=video_file.name)

if video_file.state.name == "FAILED":
  raise ValueError(video_file.state.name)

print('Done')

Video ve metin içeren istem

Yüklenen video ACTIVE durumundayken ilgili videonun File API URI'sini belirten GenerateContent istekleri gönderebilirsiniz. Üretken modeli seçin ve yüklenen videoyu ve bir metin istemi sağlayın.

from IPython.display import Markdown

# Pass the video file reference like any other media part.
response = client.models.generate_content(
    model="gemini-1.5-pro",
    contents=[
        video_file,
        "Summarize this video. Then create a quiz with answer key "
        "based on the information in the video."])

# Print the response, rendering any Markdown
Markdown(response.text)

İçerikteki zaman damgalarına atıfta bulunma

Videodaki belirli anlara referans vermek için HH:MM:SS biçiminde zaman damgalarını kullanabilirsiniz.

prompt = "What are the examples given at 01:05 and 01:19 supposed to show us?"

response = client.models.generate_content(
    model="gemini-1.5-pro",
    contents=[video_file, prompt])

print(response.text)

Videoyu metne dönüştürme ve görsel açıklamalar sağlama

Gemini modelleri, hem ses kanalını hem de görsel kareleri işleyerek video içeriğinin metnini oluşturabilir ve görsel açıklamaları sunabilir. Görsel açıklamalar için model, videoyu saniyede 1 kare hızında örnekler. Bu örnekleme hızı, özellikle hızlıca değişen görsellerin yer aldığı videolarda açıklamaların ayrıntı düzeyini etkileyebilir.

prompt = (
    "Transcribe the audio from this video, giving timestamps for "
    "salient events in the video. Also provide visual descriptions.")

response = client.models.generate_content(
    model="gemini-1.5-pro",
    contents=[video_file, prompt])

print(response.text)

Dosyaları listeleme

files.list kullanarak File API kullanılarak yüklenen tüm dosyaları ve URI'lerini listeleyebilirsiniz.

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

print('My files:')
for f in client.files.list():
  print(" ", f'{f.name}: {f.uri}')

Dosya silme

File API kullanılarak yüklenen dosyalar 2 gün sonra otomatik olarak silinir. files.delete simgesini kullanarak da bunları manuel olarak silebilirsiniz.

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

# Upload a file
poem_file = client.files.upload(path="poem.txt")

# Files will auto-delete after a period.
print(poem_file.expiration_time)

# Or they can be deleted explicitly.
dr = client.files.delete(name=poem_file.name)

try:
  client.models.generate_content(
      model="gemini-2.0-flash-exp",
      contents=['Finish this poem:', poem_file])
except genai.errors.ClientError as e:
  print(e.code)  # 403
  print(e.status)  # PERMISSION_DENIED
  print(e.message)  # You do not have permission to access the File .. or it may not exist.

Sırada ne var?

Bu kılavuzda, File API'yi kullanarak resim ve video dosyalarının nasıl yükleneceği ve ardından resim ve video girişlerinden metin çıkışlarının nasıl oluşturulacağı gösterilmektedir. Daha fazla bilgi edinmek için aşağıdaki kaynakları inceleyin:

  • Dosya istemi stratejileri: Gemini API, çoklu formatlı istem olarak da bilinen metin, resim, ses ve video verileriyle istemleri destekler.
  • Sistem talimatları: Sistem talimatları, modelin davranışını belirli ihtiyaçlarınıza ve kullanım alanlarınıza göre yönlendirmenize olanak tanır.
  • Güvenlik kılavuzu: Üretken yapay zeka modelleri bazen yanlış, önyargılı veya rahatsız edici gibi beklenmedik çıkışlar üretebilir. Bu tür çıkışlardan kaynaklanan zarar riskini sınırlamak için işlem sonrası ve gerçek kişiler tarafından değerlendirme yapılması önemlidir.