Imagen'i kullanarak resim oluşturma


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 bilgi verilmektedir.

Bu özelliği destekleyen modeller

Gemini Developer API, en yeni kararlı Imagen modellerle görüntü oluşturmayı destekler. Desteklenen Imagen modellerle ilgili bu sınırlama, Gemini Developer API'e nasıl eriştiğinizden bağımsız olarak geçerlidir.

  • imagen-4.0-generate-001
  • imagen-4.0-fast-generate-001
  • imagen-4.0-ultra-generate-001
  • 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.

Ayrıca, en boy oranı ve resim biçimi gibi resim oluşturmayla ilgili birçok farklı yapılandırma seçeneği de ayarlayabilirsiniz.

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-4.0-generate-001")

// 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
  val ai = Firebase.ai(backend = GenerativeBackend.googleAI())

  // Create an `ImagenModel` instance with an Imagen model that supports your use case
  val model = ai.imagenModel("imagen-4.0-generate-001")

  // Provide an image generation prompt
  val prompt = "An astronaut riding a horse"

  // To generate an image, call `generateImages` with the text prompt
  val imageResponse = model.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-4.0-generate-001");

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 model that supports your use case
const model = getImagenModel(ai, { model: "imagen-4.0-generate-001" });

// 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 model.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
final model = FirebaseAI.googleAI();

// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model = ai.imagenModel(model: 'imagen-4.0-generate-001');

// 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


using Firebase.AI;

// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create an `ImagenModel` instance with a model that supports your use case
var model = ai.GetImagenModel(modelName: "imagen-4.0-generate-001");

// Provide an image generation prompt
var prompt = "An astronaut riding a horse";

// To generate an image, call `generateImages` with the text prompt
var response = await model.GenerateImagesAsync(prompt: prompt);

// Handle the generated image
if (response.Images.Count == 0) {
  throw new Exception("No image in the response.");
}
var image = response.Images[0].AsTexture2D();

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-4.0-generate-001",
  // 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
  val ai = Firebase.ai(backend = GenerativeBackend.googleAI())

  // Create an `ImagenModel` instance with an Imagen model that supports your use case
  val model = ai.imagenModel(
    modelName = "imagen-4.0-generate-001",
    // 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 = model.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-4.0-generate-001",
                /* 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 model that supports your use case
const model = getImagenModel(
  ai,
  {
    model: "imagen-4.0-generate-001",
    // 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 model.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
final ai = FirebaseAI.googleAI();

// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model = ai.imagenModel(
  model: 'imagen-4.0-generate-001',
  // 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


using Firebase.AI;

// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create an `ImagenModel` instance with a model that supports your use case
var model = ai.GetImagenModel(
  modelName: "imagen-4.0-generate-001",
  // Configure the model to generate multiple images for each request
  // See: https://firebase.google.com/docs/ai-logic/model-parameters
  generationConfig: new ImagenGenerationConfig(numberOfImages: 4)
);

// Provide an image generation prompt
var prompt = "An astronaut riding a horse";

// To generate an image, call `generateImages` with the text prompt
var response = await model.GenerateImagesAsync(prompt: prompt);

// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (!string.IsNullOrEmpty(response.FilteredReason)) {
  UnityEngine.Debug.Log("Filtered reason: " + response.FilteredReason);
}

// Handle the generated images
var images = response.Images.Select(image => image.AsTexture2D());

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

  • Dijital filigranları doğrulama Vertex AI Gemini API
    kullanılırken Bir resmin filigran içerdiğini doğrulamak istiyorsanız resmi Medya sekmesini kullanarak Vertex AI Studio'e yükleyebilirsiniz.

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

  • Giriş metninin dilini ayarlama

  • includeSafetyAttributes etkinleştirildiğinde safetyAttributes.categories ve safetyAttributes.scores döndürülemez.

  • İstem yeniden yazıcı'yı devre dışı bırakma (enhancePrompt parametresi). Bu, LLM tabanlı bir istem yeniden yazma aracının, sağlanan istemi daha iyi yansıtan daha yüksek kaliteli görüntüler sunmak için her zaman otomatik olarak daha fazla ayrıntı ekleyeceği anlamına gelir.

  • 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)
  • 1.024 x 1.024 piksel (1:1 en boy oranı)
  • 896x1280 (3:4 en boy oranı)
  • 1280x896 (4:3 en boy oranı)
  • 768x1408 (9:16 en boy oranı)
  • 1408x768 (16:9 en boy oranı)



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

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