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
Mengaktifkan
includeSafetyAttributes
, yang berarti bahwasafetyAttributes.categories
dansafetyAttributes.scores
tidak dapat ditampilkanMenonaktifkan 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 diberikanMenulis 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) |
|
Kamu bisa apa lagi?
-
Mulai pikirkan persiapan untuk produksi (lihat
checklist produksi),
termasuk:
- Menyiapkan Firebase App Check untuk melindungi Gemini API dari penyalahgunaan oleh klien yang tidak sah.
- Mengintegrasikan Firebase Remote Config untuk memperbarui nilai dalam aplikasi Anda (seperti nama model) tanpa merilis versi aplikasi baru.
Mempelajari cara mengontrol pembuatan konten
- Pahami desain perintah, termasuk praktik terbaik, strategi, dan contoh perintah.
- Konfigurasi parameter model Imagen seperti rasio aspek, pembuatan orang, dan pemberian watermark.
- Gunakan setelan keamanan untuk menyesuaikan kemungkinan mendapatkan respons yang dapat dianggap berbahaya.
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