![]() |
![]() |
![]() |
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
vey
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:
- Her çıkış koordinatını 1.000'e bölün.
- X koordinatlarını orijinal resim genişliğiyle çarpın.
- 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.