Membuat gambar menggunakan Imagen


SDK Firebase AI Logic memberi Anda akses ke model Imagen (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 bagian Kemampuan dan fitur yang didukung nanti di halaman ini.

Langsung ke kode untuk input khusus teks

Memilih antara model Gemini dan Imagen

SDK Firebase AI Logic mendukung pembuatan gambar menggunakan model Gemini atau model Imagen. Untuk sebagian besar kasus penggunaan, mulai dengan Gemini, lalu pilih Imagen untuk tugas khusus yang kualitas gambarnya sangat penting.

Perhatikan bahwa SDK Firebase AI Logic belum mendukung input gambar (seperti untuk pengeditan) dengan model Imagen. Jadi, jika ingin memproses gambar input, Anda dapat menggunakan model Gemini.

Pilih Gemini jika Anda ingin:

  • Menggunakan pengetahuan dan penalaran tentang dunia untuk membuat gambar yang relevan secara kontekstual.
  • Untuk memadukan teks dan gambar dengan lancar.
  • Untuk menyematkan visual yang akurat dalam urutan teks yang panjang.
  • Untuk mengedit gambar secara percakapan sambil mempertahankan konteks.

Pilih Imagen jika Anda ingin:

  • Untuk memprioritaskan kualitas gambar, fotorealisme, detail artistik, atau gaya tertentu (misalnya, impresionisme atau anime).
  • Untuk menentukan rasio aspek atau format gambar yang dihasilkan secara eksplisit.

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

Gemini Developer API hanya mendukung pembuatan gambar oleh model Imagen 3 stabil terbaru, tetapi tidak mendukung model Imagen lainnya. Batasan model Imagen ini berlaku terlepas dari cara Anda mengakses Gemini Developer API.

  • imagen-3.0-generate-002

Membuat gambar dari input khusus teks

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

Membuat satu gambar dari input khusus teks

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

Anda dapat meminta model Imagen untuk membuat satu gambar dengan memberikan perintah menggunakan 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.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

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 sampel ini, selesaikan bagian Sebelum memulai dalam panduan ini untuk menyiapkan project dan aplikasi Anda.
Di bagian tersebut, Anda juga akan mengklik tombol untuk penyedia Gemini API yang Anda pilih agar Anda dapat melihat konten khusus penyedia di halaman ini.

Secara default, model Imagen hanya membuat 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.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

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 menawarkan banyak fitur terkait pembuatan gambar. Bagian ini menjelaskan apa yang didukung saat menggunakan model dengan Firebase AI Logic.

Kemampuan dan fitur yang didukung

Firebase AI Logic mendukung fitur model Imagen ini.

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

  • Membuat teks dalam gambar yang dibuat

  • Menambahkan watermark ke gambar yang dihasilkan

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

  • Mengonfigurasi setelan keamanan

Firebase AI Logic tidak mendukung fitur lanjutan model Imagen ini.

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

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

  • Menyertakan gambar dalam permintaan ke model (seperti untuk pembelajaran sedikit data)

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

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

  • Membuat gambar menggunakan gaya yang telah ditentukan sebelumnya

  • Menyetel bahasa teks input

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

  • Menonaktifkan peningkatan kualitas perintah (parameter enhancePrompt), yang berarti alat penulisan ulang perintah berbasis LLM akan selalu otomatis menambahkan detail ke perintah yang diberikan untuk menghasilkan 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 dibuat ke Cloud Storage, Anda dapat menggunakan Cloud Storage for Firebase.

Spesifikasi dan batasan

Properti (per permintaan) Nilai
Jumlah maksimum token input 480 token
Jumlah maksimum gambar output 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)



Kamu bisa apa lagi?

Mempelajari cara mengontrol pembuatan konten

Pelajari lebih lanjut model yang didukung

Pelajari model yang tersedia untuk berbagai kasus penggunaan dan kuota serta harganya.


Memberikan masukan tentang pengalaman Anda dengan Firebase AI Logic