Membuat gambar menggunakan Imagen


SDK Firebase AI Logic memberi Anda akses ke model Imagen 3 (melalui Imagen API) sehingga Anda dapat membuat gambar dari perintah teks. Dengan kemampuan ini, Anda dapat melakukan hal-hal seperti:

  • Membuat gambar dari perintah yang ditulis dalam bahasa alami
  • Buat gambar dalam berbagai format dan gaya
  • Merender teks dalam gambar

Perhatikan bahwa Firebase AI Logic belum mendukung semua fitur yang tersedia untuk model Imagen. Pelajari lebih lanjut di Kemampuan dan fitur yang didukung nanti di halaman ini.

Langsung ke kode untuk input khusus teks

Sebelum memulai

Klik penyedia Gemini API untuk melihat konten dan kode khusus penyedia di halaman ini.

Jika belum melakukannya, selesaikan panduan memulai, yang menjelaskan cara menyiapkan project Firebase, menghubungkan aplikasi ke Firebase, menambahkan SDK, menginisialisasi layanan backend untuk penyedia API yang Anda pilih, dan membuat instance ImagenModel.

Model yang mendukung kemampuan ini

Pembuatan gambar didukung oleh model Imagen 3.

Perhatikan bahwa Firebase AI Logic juga mendukung pembuatan gambar oleh model Gemini—dokumentasi akan segera hadir.

Membuat gambar dari input khusus teks

Anda dapat meminta model Imagen untuk membuat gambar dengan meminta teks. Anda dapat membuat satu gambar atau beberapa gambar.

Membuat satu gambar dari input khusus teks

Sebelum mencoba contoh ini, selesaikan bagian Sebelum memulai dalam panduan ini untuk menyiapkan project dan aplikasi.
Di bagian tersebut, Anda juga akan mengklik tombol untuk penyedia Gemini API yang dipilih sehingga Anda melihat konten khusus penyedia di halaman ini.

Anda dapat meminta model Imagen untuk membuat satu gambar dengan meminta teks.

Pastikan untuk membuat instance ImagenModel dan memanggil generateImages.

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

Penggunaan Imagen belum didukung untuk Unity, tetapi periksa kembali nanti.

Pelajari cara memilih model yang sesuai untuk kasus penggunaan dan aplikasi Anda.

Membuat beberapa gambar dari input khusus teks

Sebelum mencoba contoh ini, selesaikan bagian Sebelum memulai dalam panduan ini untuk menyiapkan project dan aplikasi.
Di bagian tersebut, Anda juga akan mengklik tombol untuk penyedia Gemini API yang dipilih sehingga Anda melihat konten khusus penyedia di halaman ini.

Secara default, model Imagen 3 hanya menghasilkan satu gambar per permintaan. Namun, Anda dapat meminta model Imagen untuk membuat beberapa gambar per permintaan dengan memberikan ImagenGenerationConfig saat membuat instance ImagenModel.

Pastikan untuk membuat instance ImagenModel dan memanggil generateImages.

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

Penggunaan Imagen belum didukung untuk Unity, tetapi periksa kembali nanti.

Pelajari cara memilih model yang sesuai untuk kasus penggunaan dan aplikasi Anda.



Fitur dan persyaratan yang didukung

Model Imagen 3 menawarkan banyak fitur terkait pembuatan gambar. Bagian ini menjelaskan hal yang didukung saat menggunakan model dengan Firebase AI Logic.

Kemampuan dan fitur yang didukung

Firebase AI Logic mendukung fitur model Imagen 3 ini.

  • Membuat orang dan wajah (dengan asumsi bahwa project Firebase Anda memiliki persetujuan dari Google Cloud)

  • Membuat teks dalam gambar yang dihasilkan

  • Menambahkan watermark ke gambar yang dihasilkan

  • Mengonfigurasi parameter pembuatan gambar, seperti jumlah gambar yang dihasilkan, rasio aspek, dan watermark

  • Mengonfigurasi setelan keamanan

Firebase AI Logic tidak mendukung fitur lanjutan model Imagen 3 ini.

Perhatikan bahwa sebagian besar fitur ini mengharuskan pengguna berada dalam daftar pengguna yang disetujui meskipun menggunakan model Imagen sisi server.

  • Fitur pengeditan atau manipulasi gambar, yang mencakup peningkatan kualitas gambar

  • Menyertakan gambar dalam permintaan ke model (seperti untuk pembelajaran few-shot)

  • Memverifikasi watermark digital menggunakan SDK
    Jika ingin memverifikasi bahwa gambar memiliki watermark, Anda dapat mengupload gambar ke Vertex AI Studio menggunakan tab Media.

  • Membuat "gambar live" dari teks (pembuatan MP4)

  • Membuat gambar menggunakan gaya standar

  • Menyetel bahasa teks input

  • Mengaktifkan includeSafetyAttributes, yang berarti bahwa safetyAttributes.categories dan safetyAttributes.scores tidak dapat ditampilkan

  • Menonaktifkan peningkatan perintah (parameter enhancePrompt), yang berarti bahwa alat penulisan ulang perintah berbasis LLM akan selalu otomatis menambahkan detail selengkapnya ke perintah yang diberikan untuk memberikan gambar berkualitas lebih tinggi yang lebih mencerminkan perintah yang diberikan

  • Menulis gambar yang dihasilkan langsung ke Google Cloud Storage sebagai bagian dari respons dari model (parameter storageUri). Sebagai gantinya, gambar selalu ditampilkan sebagai byte gambar berenkode base64 dalam respons.
    Jika ingin mengupload gambar yang dihasilkan ke Cloud Storage, Anda dapat menggunakan Cloud Storage for Firebase.

Spesifikasi dan batasan

Batas (per permintaan) Imagen 3 Imagen 3 Fast
Jumlah maksimum token input 480 token 480 token
Jumlah maksimum gambar output 4 gambar 4 gambar
Resolusi gambar output yang didukung (piksel)
  • 1024x1024 piksel (rasio aspek 1:1)
  • 896x1280 (rasio aspek 3:4)
  • 1280x896 (rasio aspek 4:3)
  • 768x1408 (rasio aspek 9:16)
  • 1408x768 (rasio aspek 16:9)
  • 1024x1024 piksel (rasio aspek 1:1)
  • 896x1280 (rasio aspek 3:4)
  • 1280x896 (rasio aspek 4:3)
  • 768x1408 (rasio aspek 9:16)
  • 1408x768 (rasio aspek 16:9)



Kamu bisa apa lagi?

Pelajari cara mengontrol pembuatan konten

Pelajari lebih lanjut model yang didukung

Pelajari model yang tersedia untuk berbagai kasus penggunaan serta kuota dan harga-nya.


Berikan masukan tentang pengalaman Anda dengan Firebase AI Logic