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
Mengaktifkan
includeSafetyAttributes
, yang berarti bahwasafetyAttributes.categories
dansafetyAttributes.scores
tidak dapat ditampilkanMenonaktifkan 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 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 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) |
|
|
Kamu bisa apa lagi?
-
Mulailah memikirkan 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 di aplikasi Anda (seperti nama model) tanpa merilis versi aplikasi baru.
Pelajari cara mengontrol pembuatan konten
- Memahami desain perintah, termasuk praktik terbaik, strategi, dan contoh perintah.
- Mengonfigurasi parameter model Imagen seperti rasio aspek, pembuatan orang, dan pemberian watermark.
- Gunakan setelan keamanan untuk menyesuaikan kemungkinan mendapatkan respons yang mungkin dianggap berbahaya.
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