Gemini modelinden, satır içi (Base64 olarak kodlanmış) veya URL aracılığıyla sağladığınız resim dosyalarını analiz etmesini isteyebilirsiniz. Firebase AI Logic kullanırken bu isteği doğrudan uygulamanızdan yapabilirsiniz.
Bu özellik sayesinde şunları yapabilirsiniz:
- Resimler için başlık oluşturma veya resimlerle ilgili soruları yanıtlama
- Bir resim hakkında kısa bir hikaye veya şiir yazma
- Resimdeki nesneleri algılama ve sınırlayıcı kutu koordinatlarını döndürme
- Bir resim grubunu duygu, stil veya diğer özelliklere göre etiketleme ya da kategorize etme
Bu kılavuzda, görüntü girişinden metin oluşturma işlemi ele alınmaktadır ancak görüntü girişinden görüntü de oluşturabilirsiniz.
Kod örneklerine git
Akış yanıtları için koda git
|
Resimlerle çalışmaya yönelik diğer seçenekler için diğer kılavuzlara göz atın Yapılandırılmış çıkış oluşturma Çok turlu sohbet Cihaz üzerinde resimleri analiz etme Resim oluşturma |
Başlamadan önce
|
Bu sayfada sağlayıcıya özel içerikleri ve kodları görüntülemek için Gemini API sağlayıcınızı tıklayın. |
Henüz yapmadıysanız başlangıç kılavuzundaki adımları tamamlayın. Bu kılavuzda Firebase projenizi nasıl oluşturacağınız, uygulamanızı Firebase'e nasıl bağlayacağınız, SDK'yı nasıl ekleyeceğiniz, seçtiğiniz Gemini API sağlayıcı için arka uç hizmetini nasıl başlatacağınız ve bir GenerativeModel örneği nasıl oluşturacağınız açıklanmaktadır.
İstemlerinizi test etmek ve yinelemek için Google AI Studio kullanmanızı öneririz.
Bu özelliği destekleyen modeller
Bu kılavuz, görüntü girişinden metin oluşturma hakkındadır ve aşağıdaki Gemini modelleri için geçerlidir:
gemini-4-argongemini-3.8-flashgemini-3.5-flash-lite(ve daha eskigemini-3.1-flash-lite)
Eski genel kullanımlı Gemini 3.x Flash ve Gemini 2.5 modelleri bu özelliği destekler ancak yaklaşan kapatma tarihleri ve/veya daha yeni modellere otomatik yönlendirme nedeniyle artık kullanılması önerilmez.
Resim dosyalarından (Base64 kodlu) metin oluşturma
|
Bu örneği denemeden önce projenizi ve uygulamanızı ayarlamak için bu kılavuzun Başlamadan önce bölümünü tamamlayın. Bu bölümde, seçtiğiniz Gemini API sağlayıcıya ait düğmeyi tıklayarak bu sayfada sağlayıcıya özel içerikleri görebilirsiniz. |
Metin ve resimlerle istem vererek Gemini modelinden metin üretmesini isteyebilirsiniz. Bunun için her giriş dosyasının mimeType değerini ve dosyanın kendisini sağlamanız gerekir. Giriş dosyalarıyla ilgili koşulları ve önerileri bu sayfanın ilerleyen bölümlerinde bulabilirsiniz.
Swift
Metin ve resimlerden oluşan çok formatlı girişten metin oluşturmak için generateContent() yöntemini çağırabilirsiniz.
Tek dosya girişi
import FirebaseAILogic
// Initialize the Gemini Developer API backend service.
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create a `GenerativeModel` instance with a model that supports your use case.
let model = ai.generativeModel(modelName: "gemini-3.8-flash")
guard let image = UIImage(systemName: "bicycle") else { fatalError() }
// Provide a text prompt to include with the image
let prompt = "What's in this picture?"
// To generate text output, call generateContent and pass in the prompt
let response = try await model.generateContent(image, prompt)
print(response.text ?? "No text in response.")
Birden çok dosya girişi
import FirebaseAILogic
// Initialize the Gemini Developer API backend service.
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create a `GenerativeModel` instance with a model that supports your use case.
let model = ai.generativeModel(modelName: "gemini-3.8-flash")
guard let image1 = UIImage(systemName: "car") else { fatalError() }
guard let image2 = UIImage(systemName: "car.2") else { fatalError() }
// Provide a text prompt to include with the images
let prompt = "What's different between these pictures?"
// To generate text output, call generateContent and pass in the prompt
let response = try await model.generateContent(image1, image2, prompt)
print(response.text ?? "No text in response.")
Kotlin
Metin ve resimlerden oluşan çok formatlı girişten metin oluşturmak için generateContent() yöntemini çağırabilirsiniz.
Tek dosya girişi
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel("gemini-3.8-flash")
// Loads an image from the app/res/drawable/ directory
val bitmap: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.sparky)
// Provide a prompt that includes the image specified above and text
val prompt = content {
image(bitmap)
text("What developer tool is this mascot from?")
}
// To generate text output, call generateContent with the prompt
val response = model.generateContent(prompt)
print(response.text)
Birden çok dosya girişi
Kotlin için bu SDK'daki yöntemler askıya alma işlevleridir ve Coroutine kapsamından çağrılmaları gerekir.
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.generativeModel("gemini-3.8-flash")
// Loads an image from the app/res/drawable/ directory
val bitmap1: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.sparky)
val bitmap2: Bitmap = BitmapFactory.decodeResource(resources, R.drawable.sparky_eats_pizza)
// Provide a prompt that includes the images specified above and text
val prompt = content {
image(bitmap1)
image(bitmap2)
text("What is different between these pictures?")
}
// To generate text output, call generateContent with the prompt
val response = model.generateContent(prompt)
print(response.text)
Java
Metin ve resimlerden oluşan çok formatlı girişten metin oluşturmak için generateContent() yöntemini çağırabilirsiniz.
ListenableFuture döndürür.
Tek dosya girişi
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("gemini-3.8-flash");
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);
// Provide a prompt that includes the image specified above and text
Content content = new Content.Builder()
.addImage(bitmap)
.addText("What developer tool is this mascot from?")
.build();
// To generate text output, call generateContent with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(content);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Birden çok dosya girişi
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
GenerativeModel ai = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.generativeModel("gemini-3.8-flash");
// Use the GenerativeModelFutures Java compatibility layer which offers
// support for ListenableFuture and Publisher APIs
GenerativeModelFutures model = GenerativeModelFutures.from(ai);
Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.sparky);
Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.sparky_eats_pizza);
// Provide a prompt that includes the images specified above and text
Content prompt = new Content.Builder()
.addImage(bitmap1)
.addImage(bitmap2)
.addText("What's different between these pictures?")
.build();
// To generate text output, call generateContent with the prompt
ListenableFuture<GenerateContentResponse> response = model.generateContent(prompt);
Futures.addCallback(response, new FutureCallback<GenerateContentResponse>() {
@Override
public void onSuccess(GenerateContentResponse result) {
String resultText = result.getText();
System.out.println(resultText);
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
Web
Metin ve resimlerden oluşan çok formatlı girişten metin oluşturmak için generateContent() yöntemini çağırabilirsiniz.
Tek dosya girişi
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// TODO(developer): Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create a `GenerativeModel` instance with a model that supports your use case.
const model = getGenerativeModel(ai, { model: "gemini-3.8-flash" });
// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
const base64EncodedDataPromise = new Promise((resolve) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result.split(',')[1]);
reader.readAsDataURL(file);
});
return {
type: "inlineData",
inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
};
}
async function run() {
// Provide a text prompt to include with the image
const prompt = "What do you see?";
const fileInputEl = document.querySelector("input[type=file]");
const imagePart = await fileToGenerativePart(fileInputEl.files[0]);
// To generate text output, call generateContent with the text and image
const result = await model.generateContent([prompt, imagePart]);
const response = result.response;
const text = response.text();
console.log(text);
}
run();
Birden çok dosya girişi
import { initializeApp } from "firebase/app";
import { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// TODO(developer): Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Gemini Developer API backend service.
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create a `GenerativeModel` instance with a model that supports your use case.
const model = getGenerativeModel(ai, { model: "gemini-3.8-flash" });
// Converts a File object to a Part object.
async function fileToGenerativePart(file) {
const base64EncodedDataPromise = new Promise((resolve) => {
const reader = new FileReader();
reader.onloadend = () => resolve(reader.result.split(',')[1]);
reader.readAsDataURL(file);
});
return {
type: "inlineData",
inlineData: { data: await base64EncodedDataPromise, mimeType: file.type },
};
}
async function run() {
// Provide a text prompt to include with the images
const prompt = "What's different between these pictures?";
// Prepare images for input
const fileInputEl = document.querySelector("input[type=file]");
const imageParts = await Promise.all(
[...fileInputEl.files].map(fileToGenerativePart)
);
// To generate text output, call generateContent with the text and images
const result = await model.generateContent([prompt, ...imageParts]);
const response = result.response;
const text = response.text();
console.log(text);
}
run();
Dart
Metin ve resimlerden oluşan çok formatlı girişten metin oluşturmak için generateContent() yöntemini çağırabilirsiniz.
Tek dosya girişi
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
// Initialize FirebaseApp
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
final model =
FirebaseAI.googleAI().generativeModel(model: 'gemini-3.8-flash');
// Provide a text prompt to include with the image
final prompt = TextPart("What's in the picture?");
// Prepare images for input
final image = await File('image0.jpg').readAsBytes();
final imagePart = InlineDataPart('image/jpeg', image);
// To generate text output, call generateContent with the text and image
final response = await model.generateContent([
Content.multi([prompt,imagePart])
]);
print(response.text);
Birden çok dosya girişi
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
// Initialize FirebaseApp
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Gemini Developer API backend service.
// Create a `GenerativeModel` instance with a model that supports your use case.
final model =
FirebaseAI.googleAI().generativeModel(model: 'gemini-3.8-flash');
final (firstImage, secondImage) = await (
File('image0.jpg').readAsBytes(),
File('image1.jpg').readAsBytes()
).wait;
// Provide a text prompt to include with the images
final prompt = TextPart("What's different between these pictures?");
// Prepare images for input
final imageParts = [
InlineDataPart('image/jpeg', firstImage),
InlineDataPart('image/jpeg', secondImage),
];
// To generate text output, call generateContent with the text and images
final response = await model.generateContent([
Content.multi([prompt, ...imageParts])
]);
print(response.text);
Unity
Metin ve resimlerden oluşan çok formatlı girişten metin oluşturmak için GenerateContentAsync() yöntemini çağırabilirsiniz.
Tek dosya girişi
using Firebase;
using Firebase.AI;
// Initialize the Gemini Developer API backend service.
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create a `GenerativeModel` instance with a model that supports your use case.
var model = ai.GetGenerativeModel(modelName: "gemini-3.8-flash");
// Convert a Texture2D into InlineDataParts
var grayImage = ModelContent.InlineData("image/png",
UnityEngine.ImageConversion.EncodeToPNG(UnityEngine.Texture2D.grayTexture));
// Provide a text prompt to include with the image
var prompt = ModelContent.Text("What's in this picture?");
// To generate text output, call GenerateContentAsync and pass in the prompt
var response = await model.GenerateContentAsync(new [] { grayImage, prompt });
UnityEngine.Debug.Log(response.Text ?? "No text in response.");
Birden çok dosya girişi
using Firebase;
using Firebase.AI;
// Initialize the Gemini Developer API backend service.
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create a `GenerativeModel` instance with a model that supports your use case.
var model = ai.GetGenerativeModel(modelName: "gemini-3.8-flash");
// Convert Texture2Ds into InlineDataParts
var blackImage = ModelContent.InlineData("image/png",
UnityEngine.ImageConversion.EncodeToPNG(UnityEngine.Texture2D.blackTexture));
var whiteImage = ModelContent.InlineData("image/png",
UnityEngine.ImageConversion.EncodeToPNG(UnityEngine.Texture2D.whiteTexture));
// Provide a text prompt to include with the images
var prompt = ModelContent.Text("What's different between these pictures?");
// To generate text output, call GenerateContentAsync and pass in the prompt
var response = await model.GenerateContentAsync(new [] { blackImage, whiteImage, prompt });
UnityEngine.Debug.Log(response.Text ?? "No text in response.");
Kullanım alanınıza ve uygulamanıza uygun bir model seçmeyi öğrenin.
Yanıtı akış şeklinde göster
|
Bu örneği denemeden önce projenizi ve uygulamanızı ayarlamak için bu kılavuzun Başlamadan önce bölümünü tamamlayın. Bu bölümde, seçtiğiniz Gemini API sağlayıcıya ait düğmeyi tıklayarak bu sayfada sağlayıcıya özel içerikleri görebilirsiniz. |
Model tarafından üretilen sonucun tamamını beklemek yerine akış özelliğini kullanarak kısmi sonuçları işleyebilir ve daha hızlı etkileşimler elde edebilirsiniz.
Yanıtı aktarmak için generateContentStream yöntemini çağırın.
Giriş resim dosyaları için koşullar ve öneriler
Satır içi veri olarak sağlanan bir dosyanın aktarım sırasında base64 olarak kodlandığını ve bunun da isteğin boyutunu artırdığını unutmayın. İstek çok büyükse HTTP 413 hatası alırsınız.
Aşağıdakiler hakkında ayrıntılı bilgi edinmek için "Desteklenen giriş dosyaları ve koşullar" sayfasına bakın:
- İstekte dosya sağlamak için farklı seçenekler (satır içi veya dosyanın URL'sini kullanarak)
- Resim dosyalarıyla ilgili koşullar ve en iyi uygulamalar
Desteklenen resim MIME türleri
Gemini çok formatlı modelleri aşağıdaki resim MIME türlerini destekler:
- PNG -
image/png - JPEG -
image/jpeg - WebP -
image/webp
İstek başına sınırlar
Bir resimdeki piksel sayısı için belirli bir sınır yoktur. Ancak daha büyük resimler, orijinal en boy oranları korunarak maksimum 3072 x 3072 çözünürlüğe sığacak şekilde küçültülür ve doldurulur.
İstek başına maksimum dosya sayısı: 3.000 resim dosyası
Başka ne yapabilirsin?
- Modele uzun istemler göndermeden önce parçaları nasıl sayacağınızı öğrenin.
- Cloud Storage for Firebase kurulumu büyük dosyaları çok formatlı isteklerinize dahil edebilmenizi ve istemlerde dosya sağlamak için daha yönetilebilir bir çözüme sahip olmanızı sağlar. Dosyalar resim, PDF, video ve ses içerebilir.
-
Üretime hazırlanmaya başlayın (üretim yapılacaklar listesine bakın):
- Gemini API hizmetini yetkisiz istemcilerin kötüye kullanımından korumak için Firebase App Check politikasını mümkün olan en kısa sürede uygulayın.
- Uygulamanızın yeni bir sürümünü yayınlamadan yapay zeka özelliğinizin yapılandırmalarında (model adı gibi) seç-izle değişiklikler yapabilmek için Firebase Remote Config veya sunucu istem şablonlarını kullanın.
Diğer özellikleri deneme
- Çok adımlı görüşmeler (sohbet) oluşturun.
- Yalnızca metin içeren istemlerden metin oluşturma
- Hem metin hem de çok formatlı istemlerden yapılandırılmış çıkış (ör. JSON) oluşturun.
- Hem metin hem de çok formatlı istem yazmadan görüntü oluşturun ve düzenleyin.
- Gemini metin okuma (TTS) modellerini kullanarak konuşma (hem tek hem de birden fazla konuşmacı) oluşturun.
-
Gemini modelini uygulamanızın diğer bölümlerine, harici sistemlere ve bilgilere bağlamak için araçları (işlev çağrısı ve
Google Search veyaGoogle Maps ile temellendirme gibi) kullanın.
İçerik üretimini nasıl kontrol edeceğinizi öğrenin.
- En iyi uygulamalar, stratejiler ve örnek istemler de dahil olmak üzere istem tasarımını anlama
- Maksimum çıkış jetonu sayısı, tekrarlanan çıkış jetonlarının olasılığı gibi model parametrelerini yapılandırın.
- Zararlı olarak değerlendirilebilecek yanıtlar alma olasılığını ayarlamak için güvenlik ayarlarını kullanın.
Desteklenen modeller hakkında daha fazla bilgi
Çeşitli kullanım alanları için kullanılabilen modeller, kotaları ve fiyatlandırmaları hakkında bilgi edinin.Firebase AI Logic ile ilgili deneyiminiz hakkında geri bildirimde bulunun