Halaman ini menjelaskan cara menggunakan kemampuan penyesuaian dari Imagen hingga mengedit atau membuat gambar berdasarkan subjek yang ditentukan menggunakan SDK Firebase AI Logic.
Cara kerjanya: Anda memberikan perintah teks dan minimal satu gambar referensi yang menampilkan subjek tertentu (seperti produk, orang, atau hewan peliharaan). Model menggunakan input ini untuk membuat gambar baru berdasarkan subjek yang ditentukan dalam gambar referensi.
Misalnya, Anda dapat meminta model untuk menerapkan gaya kartun pada foto anak atau mengubah warna sepeda dalam gambar.
Sebelum memulai
Hanya tersedia saat menggunakan Vertex AI Gemini API sebagai penyedia API Anda. |
Jika belum, 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
Imagen menawarkan pengeditan gambar melalui model capability
:
imagen-3.0-capability-001
Perhatikan bahwa untuk model Imagen, lokasi global
tidak didukung.
Mengirim permintaan penyesuaian subjek
Contoh berikut menunjukkan permintaan penyesuaian subjek yang meminta model
untuk membuat gambar baru berdasarkan gambar referensi yang diberikan (dalam contoh ini,
seekor kucing). Karena kucing adalah hewan, kucing menggunakan jenis subjek
ImagenSubjectReferenceType.ANIMAL
.
Jika subjek Anda adalah orang atau produk, Anda juga dapat menggunakan contoh ini, tetapi dengan perubahan berikut:
Jika subjek Anda adalah orang, gunakan jenis subjek
ImagenSubjectReferenceType.PERSON
. Anda dapat mengirim jenis permintaan ini dengan atau tanpa gambar kontrol mesh wajah untuk memandu pembuatan gambar lebih lanjut.Jika subjek Anda adalah produk, gunakan jenis subjek
ImagenSubjectReferenceType.PRODUCT
.
Tinjau template perintah nanti di halaman ini untuk mempelajari cara menulis perintah dan cara menggunakan gambar referensi di dalamnya.
Swift
Pengeditan gambar dengan model Imagen tidak didukung untuk Swift. Periksa kembali nanti tahun ini.
Kotlin
// Using this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun customizeImage() {
// Initialize the Vertex AI Gemini API backend service
// Optionally specify the location to access the model (for example, `us-central1`)
val ai = Firebase.ai(backend = GenerativeBackend.vertexAI(location = "us-central1"))
// Create an `ImagenModel` instance with an Imagen "capability" model
val model = ai.imagenModel("imagen-3.0-capability-001")
// This example assumes 'referenceImage' is a pre-loaded Bitmap.
// In a real app, this might come from the user's device or a URL.
val referenceImage: Bitmap = TODO("Load your reference image Bitmap here")
// Define the subject reference using the reference image.
val subjectReference = ImagenSubjectReference(
image = referenceImage,
referenceID = 1,
description = "cat",
subjectType = ImagenSubjectReferenceType.ANIMAL
)
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
val prompt = "A cat[1] flying through outer space"
// Use the editImage API to perform the subject customization.
// Pass the list of references, the prompt, and an editing configuration.
val editedImage = model.editImage(
references = listOf(subjectReference),
prompt = prompt,
config = ImagenEditingConfig(
editSteps = 50 // Number of editing steps, a higher value can improve quality
)
)
// Process the result
}
Java
// Initialize the Vertex AI Gemini API backend service
// Optionally specify the location to access the model (for example, `us-central1`)
// Create an `ImagenModel` instance with an Imagen "capability" model
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.vertexAI("us-central1"))
.imagenModel(
/* modelName */ "imagen-3.0-capability-001");
ImagenModelFutures model = ImagenModelFutures.from(imagenModel);
// This example assumes 'referenceImage' is a pre-loaded Bitmap.
// In a real app, this might come from the user's device or a URL.
Bitmap referenceImage = null; // TODO("Load your image Bitmap here");
// Define the subject reference using the reference image.
ImagenSubjectReference subjectReference = new ImagenSubjectReference.Builder()
.setImage(referenceImage)
.setReferenceID(1)
.setDescription("cat")
.setSubjectType(ImagenSubjectReferenceType.ANIMAL)
.build();
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
String prompt = "A cat[1] flying through outer space";
// Define the editing configuration.
ImagenEditingConfig imagenEditingConfig = new ImagenEditingConfig.Builder()
.setEditSteps(50) // Number of editing steps, a higher value can improve quality
.build();
// Use the editImage API to perform the subject customization.
// Pass the list of references, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(subjectReference), prompt, imagenEditingConfig), new FutureCallback<ImagenGenerationResponse>() {
@Override
public void onSuccess(ImagenGenerationResponse 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
Pengeditan gambar dengan model Imagen tidak didukung untuk aplikasi Web. Periksa kembali nanti tahun ini.
Dart
import 'dart:typed_data';
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 Vertex AI Gemini API backend service
// Optionally specify a location to access the model (for example, `us-central1`)
final ai = FirebaseAI.vertexAI(location: 'us-central1');
// Create an `ImagenModel` instance with an Imagen "capability" model
final model = ai.imagenModel(model: 'imagen-3.0-capability-001');
// This example assumes 'referenceImage' is a pre-loaded Uint8List.
// In a real app, this might come from the user's device or a URL.
final Uint8List referenceImage = Uint8List(0); // TODO: Load your reference image data here
// Define the subject reference using the reference image.
final subjectReference = ImagenSubjectReference(
image: referenceImage,
referenceId: 1,
description: 'cat',
subjectType: ImagenSubjectReferenceType.animal,
);
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
final prompt = "A cat[1] flying through outer space.";
try {
// Use the editImage API to perform the subject customization.
// Pass the list of references, the prompt, and an editing configuration.
final response = await model.editImage(
[subjectReference],
prompt,
config: ImagenEditingConfig(
editSteps: 50, // Number of editing steps, a higher value can improve quality
),
);
// Process the result.
if (response.images.isNotEmpty) {
final editedImage = response.images.first.bytes;
// Use the editedImage (a Uint8List) to display the image, save it, etc.
print('Image successfully generated!');
} else {
// Handle the case where no images were generated.
print('Error: No images were generated.');
}
} catch (e) {
// Handle any potential errors during the API call.
print('An error occurred: $e');
}
Unity
Pengeditan gambar dengan model Imagen tidak didukung untuk Unity. Periksa kembali nanti tahun ini.
Template perintah
Dalam permintaan, Anda memberikan gambar referensi (hingga 4 gambar) dengan menentukan
ImagenSubjectReference
yang di dalamnya Anda menentukan ID referensi untuk gambar
(dan secara opsional deskripsi subjek juga). Perhatikan bahwa beberapa gambar dapat memiliki ID referensi yang sama (misalnya, beberapa foto kucing yang sama).
Kemudian, saat menulis perintah, Anda merujuk ke ID ini. Misalnya, Anda menggunakan
[1]
dalam perintah untuk merujuk ke gambar dengan ID referensi 1
. Jika Anda memberikan
deskripsi subjek, Anda juga dapat menyertakannya dalam perintah sehingga perintah
lebih mudah dibaca oleh manusia.
Tabel berikut menjelaskan template perintah yang dapat menjadi titik awal untuk menulis perintah untuk penyesuaian berdasarkan subjek (seperti produk, orang, atau hewan peliharaan).
Kasus penggunaan | Gambar referensi | Template perintah | Contoh |
---|---|---|---|
Penataan gaya gambar produk - iklan | Gambar subjek (maksimal 4) | Buat gambar tentang SUBJECT_DESCRIPTION [1] agar sesuai dengan deskripsi: ${PROMPT} |
Buat gambar tentang Luxe Elixir hair oil, golden liquid in glass bottle [1] agar sesuai dengan deskripsi: Gambar close-up, high-key tangan seorang wanita yang memegang Luxe Elixir hair oil, golden liquid in glass bottle [1] dengan latar belakang putih bersih. Tangan perempuan tersebut diterangi dengan baik dan fokusnya tajam pada botol, dengan kedalaman bidang yang dangkal mengaburkan latar belakang dan menekankan produk. Cahayanya lembut dan menyebar, menciptakan cahaya halus di sekitar botol dan tangan. Komposisi keseluruhan sederhana dan elegan, menyoroti daya tarik mewah produk. |
Penataan gaya gambar produk - perubahan atribut | Gambar subjek (maksimal 4) | Buat gambar SUBJECT_DESCRIPTION tetapi ${PROMPT} |
Buat gambar Seiko watch [1], tetapi berwarna biru. |
Penyesuaian gaya gambar orang tanpa input jaring wajah | Gambar subjek (maksimal 4) | Buat gambar tentang SUBJECT_DESCRIPTION [1] agar sesuai dengan deskripsi: potret SUBJECT_DESCRIPTION [1] ${PROMPT} | Buat gambar tentang a woman with short hair[1] agar sesuai dengan deskripsi: potret a woman with short hair[1] dalam gaya kartun 3D dengan latar belakang blur. Karakter yang imut dan menggemaskan, dengan wajah tersenyum, melihat ke arah kamera, nuansa warna pastel ... |
Penyesuaian gaya gambar orang tanpa input jaring wajah | Gambar subjek (maksimal 4) | Buat gambar STYLE_DESCRIPTION [2] tentang SUBJECT_DESCRIPTION [1] agar sesuai dengan deskripsi: potret SUBJECT_DESCRIPTION [1] STYLE_PROMPT | Buat gambar 3d-cartoon style [2] tentang a woman with short hair [1] agar sesuai dengan deskripsi: potret a woman with short hair [1] dalam gaya kartun 3D dengan latar belakang yang diburamkan. Karakter yang imut dan menarik, dengan wajah tersenyum, melihat ke arah kamera, nuansa warna pastel ... |
Penyesuaian gaya gambar orang dengan input jaring wajah |
Gambar subjek (maksimal 3) Gambar kontrol mesh wajah (1) |
Buat gambar SUBJECT_DESCRIPTION [1] dengan Face mesh from the control image [2]. ${PROMPT} | Buat gambar the person [1] dengan face mesh from the control image [2]. Orang tersebut harus melihat lurus ke depan dengan ekspresi netral. Latar belakang harus berupa ... |
Penyesuaian gaya gambar orang dengan input jaring wajah |
Gambar subjek (maksimal 3) Gambar kontrol mesh wajah (1) |
Buat gambar tentang SUBJECT_DESCRIPTION [1] dalam pose CONTROL_IMAGE [2] agar sesuai dengan deskripsi: potret SUBJECT_DESCRIPTION [1] ${PROMPT} | Buat gambar tentang a woman with short hair [1] dalam pose control image [2] agar sesuai dengan deskripsi: potret a woman with short hair [1] dalam gaya kartun 3D dengan latar belakang yang diblur. Karakter yang imut dan menggemaskan, dengan wajah tersenyum, melihat ke arah kamera, nuansa warna pastel ... |
Penyesuaian gaya gambar orang dengan input jaring wajah |
Gambar subjek (maksimal 3) Gambar kontrol mesh wajah (1) |
Buat gambar STYLE_DESCRIPTION [3] tentang SUBJECT_DESCRIPTION [1] dalam pose CONTROL_IMAGE [2] agar sesuai dengan deskripsi: potret SUBJECT_DESCRIPTION [1] ${PROMPT} | Buat gambar 3d-cartoon style [3] tentang a woman with short hair [1] dalam pose control image [2] agar sesuai dengan deskripsi: potret a woman with short hair [1] dalam gaya kartun 3D dengan latar belakang yang diblur. Karakter yang imut dan menarik, dengan wajah tersenyum, melihat ke arah kamera, nuansa warna pastel ... |
Praktik terbaik dan batasan
Jika Anda menggunakan orang sebagai subjek, sebaiknya wajah dalam gambar referensi Anda memiliki properti berikut:
- Berada di tengah dan menempati setidaknya setengah dari seluruh gambar
- Diputar dalam tampilan depan ke segala arah (roll, pitch, dan yaw)
- Tidak terhalang oleh objek, seperti kacamata hitam atau masker
Kasus penggunaan
Kemampuan penyesuaian menawarkan perintah gaya bebas, yang dapat memberikan kesan bahwa model dapat melakukan lebih banyak hal daripada yang dilatih untuk dilakukan. Bagian berikut menjelaskan kasus penggunaan yang dimaksudkan untuk penyesuaian, dan contoh kasus penggunaan yang tidak dimaksudkan yang tidak lengkap.
Sebaiknya gunakan kemampuan ini untuk kasus penggunaan yang dimaksudkan, karena kami telah melatih model pada kasus penggunaan tersebut dan mengharapkan hasil yang baik untuknya. Sebaliknya, jika Anda mendorong model untuk melakukan hal-hal di luar kasus penggunaan yang dimaksudkan, Anda akan mendapatkan hasil yang buruk.
Kasus penggunaan yang dimaksudkan
Berikut adalah kasus penggunaan yang dimaksudkan untuk penyesuaian berdasarkan subjek:
Menata gaya foto seseorang.
Menata gaya foto seseorang, dan mempertahankan ekspresi wajah orang tersebut.
(Rendah) Tempatkan produk, seperti sofa atau kue, ke dalam berbagai adegan dengan sudut produk yang berbeda.
Membuat variasi produk yang tidak mempertahankan detail yang tepat.
Menata gaya foto seseorang, sambil mempertahankan ekspresi wajah.
Contoh kasus penggunaan yang tidak diinginkan
Berikut adalah daftar tidak lengkap kasus penggunaan tidak diinginkan untuk penyesuaian berdasarkan subjek. Model tidak dilatih untuk kasus penggunaan ini, dan kemungkinan akan menghasilkan hasil yang buruk.
Tempatkan dua orang atau lebih di adegan yang berbeda sambil mempertahankan identitas mereka.
Tempatkan dua orang atau lebih dalam adegan yang berbeda sambil mempertahankan identitas mereka dan menentukan gaya gambar output menggunakan gambar contoh sebagai input untuk gaya.
Menata gaya foto dua orang atau lebih sambil mempertahankan identitas mereka.
Tempatkan hewan peliharaan ke dalam adegan yang berbeda sambil mempertahankan identitasnya.
Menata gaya foto hewan peliharaan dan mengubahnya menjadi gambar.
Menata gaya foto hewan peliharaan dan mengubahnya menjadi gambar, sambil mempertahankan atau menentukan gaya gambar (seperti cat air).
Tempatkan hewan peliharaan dan orang ke dalam adegan yang berbeda, sambil mempertahankan identitas keduanya.
Menata gaya foto hewan peliharaan dan satu orang atau lebih, lalu mengubahnya menjadi gambar.
Tempatkan dua produk ke dalam adegan yang berbeda dengan sudut produk yang berbeda.
Tempatkan produk, seperti kue atau sofa, ke dalam adegan yang berbeda dengan sudut produk yang berbeda, dan mengikuti gaya gambar tertentu (seperti fotorealistik dengan warna, gaya pencahayaan, atau animasi tertentu).
Tempatkan produk ke dalam adegan yang berbeda, sambil mempertahankan komposisi adegan tertentu seperti yang ditentukan oleh gambar kontrol.
Tempatkan dua produk ke dalam adegan yang berbeda dengan sudut produk yang berbeda, menggunakan gambar tertentu sebagai input (seperti fotorealistik dengan warna tertentu, gaya pencahayaan, atau animasi).
Tempatkan dua produk ke dalam adegan yang berbeda, sambil mempertahankan komposisi adegan tertentu seperti yang ditentukan oleh gambar kontrol.