Firebase AI Logic SDK'lar, metin isteminden resim oluşturabilmeniz için Imagen modellerine (Imagen API aracılığıyla) erişmenizi sağlar. Bu özellik sayesinde şunları yapabilirsiniz:
- Doğal dilde yazılmış istemlerden resim oluşturma
- Çok çeşitli biçim ve stillerde görseller oluşturun
- Resimlerdeki metinleri oluşturma
Firebase AI Logic'nın henüz Imagen modellerinde bulunan tüm özellikleri desteklemediğini unutmayın. Bu sayfanın ilerleyen bölümlerindeki Desteklenen özellikler bölümünde daha fazla bilgi edinebilirsiniz.
Yalnızca metin girişi için koda atlama
Gemini ve Imagen modelleri arasında seçim yapma
Firebase AI Logic SDK'ları, Gemini modeli veya Imagen modeli kullanılarak resim oluşturmayı destekler. Çoğu kullanım alanında Gemini ile başlayın, ardından görüntü kalitesinin kritik olduğu özel görevler için Imagen'ı seçin.
Firebase AI Logic SDK'ların, Imagen modelleriyle henüz resim girişini (ör. düzenleme için) desteklemediğini unutmayın. Bu nedenle, giriş resimleriyle çalışmak istiyorsanız bunun yerine Gemini modelini kullanabilirsiniz.
Aşağıdaki durumlarda Gemini seçeneğini belirleyin:
- Bağlama dayalı alakalı resimler oluşturmak için dünya bilgisi ve akıl yürütme özelliklerini kullanır.
- Metin ve resimleri sorunsuz bir şekilde harmanlamak için.
- Uzun metin dizilerine doğru görseller yerleştirmek için kullanılır.
- Bağlamı koruyarak resimleri sohbet eder gibi düzenlemek için.
Aşağıdaki durumlarda Imagen seçeneğini belirleyin:
- Görüntü kalitesine, fotoğraf gerçekliğine, sanatsal ayrıntıya veya belirli stillere (ör. izlenimcilik veya anime) öncelik vermek için.
- Oluşturulan resimlerin en-boy oranını veya biçimini açıkça belirtmek için kullanılır.
Başlamadan önce
Bu sayfada sağlayıcıya özel içerikleri ve kodu görüntülemek için Gemini API sağlayıcınızı tıklayın. |
Henüz yapmadıysanız başlangıç kılavuzunu tamamlayın. Bu kılavuzda Firebase projenizi ayarlama, uygulamanızı Firebase'e bağlama, SDK'yı ekleme, seçtiğiniz API sağlayıcısı için arka uç hizmetini başlatma ve ImagenModel
örneği oluşturma hakkında bilgiler yer alır.
Bu özelliği destekleyen modeller
Gemini Developer API yalnızca en yeni kararlı Imagen 3 modeliyle görüntü üretmeyi destekler, diğer Imagen modellerini desteklemez. Bu Imagen model sınırlamaları, Gemini Developer API'a nasıl eriştiğinizden bağımsız olarak geçerlidir.
imagen-3.0-generate-002
Yalnızca metin girişinden resim oluşturma
Imagen modelinden metin istemiyle görüntü oluşturmasını isteyebilirsiniz. Tek bir resim veya birden fazla resim oluşturabilirsiniz.
Yalnızca metin içeren girişten bir resim 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ı için bir düğmeyi de tıklayarak bu sayfada sağlayıcıya özel içerikleri görebilirsiniz. |
Imagen modelinden metin istemiyle tek bir resim oluşturmasını isteyebilirsiniz.
ImagenModel
örneği oluşturduğunuzdan ve generateImages
'ı çağırdığınızdan emin olun.
Swift
import FirebaseAI
// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create an `ImagenModel` instance with a model that supports your use case
let model = ai.imagenModel(modelName: "imagen-3.0-generate-002")
// Provide an image generation prompt
let prompt = "An astronaut riding a horse"
// To generate an image, call `generateImages` with the text prompt
let response = try await model.generateImages(prompt: prompt)
// Handle the generated image
guard let image = response.images.first else {
fatalError("No image in the response.")
}
let uiImage = UIImage(data: image.data)
Kotlin
// Using this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
// Initialize the Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
val imagenModel = Firebase.ai(backend = GenerativeBackend.googleAI()).imagenModel("imagen-3.0-generate-002")
// Provide an image generation prompt
val prompt = "An astronaut riding a horse"
// To generate an image, call `generateImages` with the text prompt
val imageResponse = imagenModel.generateImages(prompt)
// Handle the generated image
val image = imageResponse.images.first()
val bitmapImage = image.asBitmap()
}
Java
// Initialize the Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.googleAI()).imagenModel(
/* modelName */ "imagen-3.0-generate-002");
ImagenModelFutures model = ImagenModelFutures.from(imagenModel);
// Provide an image generation prompt
String prompt = "An astronaut riding a horse";
// To generate an image, call `generateImages` with the text prompt
Futures.addCallback(model.generateImages(prompt), new FutureCallback<ImagenGenerationResponse<ImagenInlineImage>>() {
@Override
public void onSuccess(ImagenGenerationResponse<ImagenInlineImage> result) {
if (result.getImages().isEmpty()) {
Log.d("TAG", "No images generated");
}
Bitmap bitmap = result.getImages().get(0).asBitmap();
// Use the bitmap to display the image in your UI
}
@Override
public void onFailure(Throwable t) {
// ...
}
}, Executors.newSingleThreadExecutor());
Web
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 an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(ai, { model: "imagen-3.0-generate-002" });
// Provide an image generation prompt
const prompt = "An astronaut riding a horse.";
// To generate an image, call `generateImages` with the text prompt
const response = await imagenModel.generateImages(prompt)
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason) {
console.log(response.filteredReason);
}
if (response.images.length == 0) {
throw new Error("No images in the response.")
}
const image = response.images[0];
Dart
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 an `ImagenModel` instance with an Imagen model that supports your use case
final model =
FirebaseAI.googleAI().imagenModel(model: 'imagen-3.0-generate-002');
// Provide an image generation prompt
const prompt = 'An astronaut riding a horse.';
// To generate an image, call `generateImages` with the text prompt
final response = await model.generateImages(prompt);
if (response.images.isNotEmpty) {
final image = response.images[0];
// Process the image
} else {
// Handle the case where no images were generated
print('Error: No images were generated.');
}
Unity
Imagen henüz Unity'de desteklenmiyor ancak yakında desteklenecek.
Kullanım alanınıza ve uygulamanıza uygun bir model seçmeyi öğrenin.
Yalnızca metin girişinden birden fazla resim 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ı için bir düğmeyi de tıklayarak bu sayfada sağlayıcıya özel içerikleri görebilirsiniz. |
Varsayılan olarak Imagen modelleri, istek başına yalnızca bir resim oluşturur.
Ancak Imagen modelinden, ImagenModel
örneğini oluştururken ImagenGenerationConfig
sağlayarak istek başına birden fazla resim oluşturmasını isteyebilirsiniz.
ImagenModel
örneği oluşturduğunuzdan ve generateImages
'ı çağırdığınızdan emin olun.
Swift
import FirebaseAI
// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create an `ImagenModel` instance with a model that supports your use case
let model = ai.imagenModel(
modelName: "imagen-3.0-generate-002",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
generationConfig: ImagenGenerationConfig(numberOfImages: 4)
)
// Provide an image generation prompt
let prompt = "An astronaut riding a horse"
// To generate images, call `generateImages` with the text prompt
let response = try await model.generateImages(prompt: prompt)
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if let filteredReason = response.filteredReason {
print(filteredReason)
}
// Handle the generated images
let uiImages = response.images.compactMap { UIImage(data: $0.data) }
Kotlin
// Using this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
// Initialize the Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
val imagenModel = Firebase.ai(backend = GenerativeBackend.googleAI()).imagenModel(
modelName = "imagen-3.0-generate-002",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
generationConfig = ImagenGenerationConfig(numberOfImages = 4)
)
// Provide an image generation prompt
val prompt = "An astronaut riding a horse"
// To generate images, call `generateImages` with the text prompt
val imageResponse = imagenModel.generateImages(prompt)
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (imageResponse.filteredReason != null) {
Log.d(TAG, "FilteredReason: ${imageResponse.filteredReason}")
}
for (image in imageResponse.images) {
val bitmap = image.asBitmap()
// Use the bitmap to display the image in your UI
}
}
Java
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
ImagenGenerationConfig imagenGenerationConfig = new ImagenGenerationConfig.Builder()
.setNumberOfImages(4)
.build();
// Initialize the Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.googleAI()).imagenModel(
/* modelName */ "imagen-3.0-generate-002",
/* imageGenerationConfig */ imagenGenerationConfig);
ImagenModelFutures model = ImagenModelFutures.from(imagenModel);
// Provide an image generation prompt
String prompt = "An astronaut riding a horse";
// To generate images, call `generateImages` with the text prompt
Futures.addCallback(model.generateImages(prompt), new FutureCallback<ImagenGenerationResponse<ImagenInlineImage>>() {
@Override
public void onSuccess(ImagenGenerationResponse<ImagenInlineImage> result) {
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (result.getFilteredReason() != null){
Log.d("TAG", "FilteredReason: " + result.getFilteredReason());
}
// Handle the generated images
List<ImagenInlineImage> images = result.getImages();
for (ImagenInlineImage image : images) {
Bitmap bitmap = image.asBitmap();
// Use the bitmap to display the image in your UI
}
}
@Override
public void onFailure(Throwable t) {
// ...
}
}, Executors.newSingleThreadExecutor());
Web
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 an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(
ai,
{
model: "imagen-3.0-generate-002",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
generationConfig: {
numberOfImages: 4
}
}
);
// Provide an image generation prompt
const prompt = "An astronaut riding a horse.";
// To generate images, call `generateImages` with the text prompt
const response = await imagenModel.generateImages(prompt)
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason) {
console.log(response.filteredReason);
}
if (response.images.length == 0) {
throw new Error("No images in the response.")
}
const images = response.images[0];
Dart
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 an `ImagenModel` instance with an Imagen model that supports your use case
final model =
FirebaseAI.googleAI().imagenModel(
model: 'imagen-3.0-generate-002',
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
generationConfig: ImagenGenerationConfig(numberOfImages: 4),
);
// Provide an image generation prompt
const prompt = 'An astronaut riding a horse.';
// To generate images, call `generateImages` with the text prompt
final response = await model.generateImages(prompt);
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason != null) {
print(response.filteredReason);
}
if (response.images.isNotEmpty) {
final images = response.images;
for(var image in images) {
// Process the image
}
} else {
// Handle the case where no images were generated
print('Error: No images were generated.');
}
Unity
Imagen henüz Unity'de desteklenmiyor ancak yakında desteklenecek.
Kullanım alanınıza ve uygulamanıza uygun bir model seçmeyi öğrenin.
Desteklenen özellikler ve şartlar
Imagen modelleri, görüntü üretmeyle ilgili birçok özellik sunar. Bu bölümde, Firebase AI Logic ile modelleri kullanırken desteklenenler açıklanmaktadır.
Desteklenen özellikler
Firebase AI Logic, Imagen modellerinin şu özelliklerini destekler.
Kişi ve yüz oluşturma (Firebase projenizin Google Cloud tarafından onaylandığı varsayılır)
Üretilen resimlerde metin oluşturma
Üretilen resimlere filigran ekleme
Oluşturulan resim sayısı, en boy oranı ve filigran gibi resim oluşturma parametrelerini yapılandırma
Güvenlik ayarlarını yapılandırma
Firebase AI Logic, Imagen modellerinin bu ileri seviye özelliklerini desteklemez.
Bu özelliklerin çoğunun, Imagen modelleri sunucu tarafında kullanılırken bile onaylı kullanıcı listesinde yer almayı gerektirdiğini unutmayın.
Resimleri ölçekleme de dahil olmak üzere resim düzenleme veya değiştirme özellikleri
Modele gönderilen isteğe resim ekleme (ör. çok görevli öğrenme için)
SDK'ları kullanarak dijital filigranları doğrulama
Bir resmin filigranlı olduğunu doğrulamak istiyorsanız resmi Medya sekmesini kullanarak Vertex AI Studio'ya yükleyebilirsiniz.Metinden"canlı görüntüler" oluşturma (MP4 oluşturma)
Önceden tanımlanmış bir stili kullanarak resim oluşturma
includeSafetyAttributes
etkinleştirildiğindesafetyAttributes.categories
vesafetyAttributes.scores
döndürülemez.İstem geliştirme (
enhancePrompt
parametresi) devre dışı bırakıldığında, LLM tabanlı bir istem yeniden yazma aracı, sağlanan isteme her zaman otomatik olarak daha fazla ayrıntı ekleyerek daha yüksek kaliteli ve sağlanan istemi daha iyi yansıtan resimler sunar.Oluşturulan bir resmi, modelin yanıtının (
storageUri
parametresi) bir parçası olarak doğrudan Google Cloud Storage içine yazma. Bunun yerine, yanıt her zaman base64 kodlu görüntü baytları olarak döndürülür.
Üretilen bir resmi Cloud Storage'e yüklemek istiyorsanız Cloud Storage for Firebase kullanabilirsiniz.
Özellikler ve sınırlamalar
Mülk (istek başına) | Değer |
---|---|
Maksimum giriş jetonu sayısı | 480 jeton |
Maksimum çıkış resmi sayısı | 4 resim |
Desteklenen çıkış resmi çözünürlükleri (piksel) |
|
Başka ne yapabilirsin?
-
Aşağıdakiler de dahil olmak üzere üretime hazırlanma hakkında düşünmeye başlayın (üretim yapılacaklar listesine bakın):
- Firebase App Check kurarak Gemini API'ı yetkisiz istemcilerin kötüye kullanımına karşı koruyun.
- Yeni bir uygulama sürümü yayınlamadan uygulamanızdaki değerleri (ör. model adı) güncellemek için Firebase Remote Config entegrasyonu.
İçerik oluşturmayı kontrol etme hakkında bilgi
- En iyi uygulamalar, stratejiler ve örnek istemler de dahil olmak üzere istem tasarımını anlama
- En boy oranı, kişi oluşturma ve filigran gibi Imagen 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, bu modellerin kotaları ve fiyatlandırması hakkında bilgi edinin.Firebase AI Logic ile ilgili deneyiminiz hakkında geri bildirim verme