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

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

  • Giriş metninin dilini ayarlama

  • includeSafetyAttributes etkinleştirildiğinde safetyAttributes.categories ve safetyAttributes.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)
  • 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