Halaman ini menjelaskan cara menggunakan kemampuan penyesuaian dari Imagen hingga mengedit atau membuat gambar berdasarkan gaya yang ditentukan menggunakan SDK Firebase AI Logic.
Cara kerjanya: Anda memberikan perintah teks dan setidaknya satu gambar referensi yang menunjukkan gaya tertentu (seperti pola, tekstur, atau gaya desain). Model menggunakan input ini untuk membuat gambar baru berdasarkan gaya yang ditentukan dalam gambar referensi.
Misalnya, Anda dapat membuat gambar baru dapur berdasarkan gambar dari katalog retail populer yang Anda berikan.
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 gaya
Contoh berikut menunjukkan permintaan penyesuaian gaya yang meminta model untuk membuat gambar baru dengan gaya gambar referensi yang diberikan (dalam contoh ini, "Starry Night" karya Van Gogh).
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 style reference using the reference image.
val styleReference = ImagenStyleReference(
image = referenceImage,
referenceID = 1,
description = "Van Gogh style"
)
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
val prompt = "A cat flying through outer space, in the Van Gogh style[1]"
// Use the editImage API to perform the style customization.
// Pass the list of references, the prompt, and an editing configuration.
val editedImage = model.editImage(
references = listOf(styleReference),
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 style reference using the reference image.
ImagenStyleReference subjectReference = new ImagenStyleReference.Builder()
.setImage(referenceImage)
.setReferenceID(1)
.setDescription("Van Gogh style")
.build();
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
String prompt = "A cat flying through outer space, in the Van Gogh style[1]";
// 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 style customization.
// Pass the list of references, the prompt, and the editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(styleReference), 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 style reference using the reference image.
final styleReference = ImagenStyleReference(
image: referenceImage,
referenceId: 1,
description: 'Van Gogh style',
);
// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
final prompt = "A cat flying through outer space, in the Van Gogh style[1]";
try {
// Use the editImage API to perform the style customization.
// Pass the list of references, the prompt, and an editing configuration.
final response = await model.editImage(
[styleReference],
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
ImagenStyleReference
yang di dalamnya Anda menentukan ID referensi untuk gambar
(dan deskripsi gaya secara opsional). Perhatikan bahwa beberapa gambar dapat memiliki ID referensi yang sama (misalnya, beberapa foto dengan pola 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 menyediakan template perintah yang dapat menjadi titik awal untuk menulis perintah yang dapat disesuaikan berdasarkan gaya.
Kasus penggunaan | Gambar referensi | Template perintah | Contoh |
---|---|---|---|
Gaya objek | Gambar subjek (1-4) | Buat gambar dalam STYLE_DESCRIPTION [1] berdasarkan teks berikut: IMAGE_DESCRIPTION. | Buat gambar dalam neon sign style [1] berdasarkan teks berikut: a sign saying have a great day. |
Penyesuaian gaya gambar orang tanpa input mesh wajah | Gambar subjek (1-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 ... |
Penataan gaya gambar orang dengan input mesh wajah |
Gambar subjek (1-3) Gambar kontrol Facemesh (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 ... |
Praktik terbaik dan batasan
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 gaya:
Membuat gambar dari input teks yang mengikuti gaya spesifik yang diberikan oleh gambar referensi.
Mengubah foto seseorang.
Mengubah foto seseorang dan mempertahankan ekspresi wajahnya.
Contoh kasus penggunaan yang tidak diinginkan
Berikut adalah daftar tidak lengkap kasus penggunaan yang tidak diinginkan untuk penyesuaian berdasarkan gaya. Model tidak dilatih untuk kasus penggunaan ini, dan kemungkinan akan menghasilkan hasil yang buruk.
Membuat gambar dari teks dan menggunakan gambar referensi, dengan maksud untuk memiliki tingkat kontrol tertentu atas komposisi yang dihasilkan dari gambar referensi.
Buat gambar seseorang dari gambar referensi yang memiliki seseorang dengan ekspresi wajah tertentu.
Tempatkan dua orang dalam adegan yang berbeda, pertahankan identitas mereka, dan sambil menentukan gaya gambar output (seperti lukisan cat minyak) menggunakan gambar referensi.
Menata gaya foto hewan peliharaan dan mengubahnya menjadi gambar, sambil mempertahankan atau menentukan komposisi gambar.
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).