Menyesuaikan gambar berdasarkan kontrol menggunakan Imagen


Halaman ini menjelaskan cara menggunakan kemampuan penyesuaian dari Imagen hingga mengedit atau membuat gambar berdasarkan kontrol yang ditentukan menggunakan SDK Firebase AI Logic.

Cara kerjanya: Anda memberikan perintah teks dan setidaknya satu gambar referensi kontrol (seperti gambar sketsa atau gambar tepi Canny). Model menggunakan input ini untuk membuat gambar baru berdasarkan gambar kontrol.

Misalnya, Anda dapat memberikan gambar roket dan bulan kepada model bersama dengan perintah teks untuk membuat lukisan cat air berdasarkan gambar tersebut.

Langsung ke kode

Jenis gambar referensi kontrol

Gambar referensi untuk penyesuaian terkontrol dapat berupa coretan, gambar tepi Canny, atau mesh wajah.



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 terkontrol

Contoh berikut menunjukkan permintaan penyesuaian terkontrol yang meminta model untuk membuat gambar baru berdasarkan gambar referensi yang diberikan (dalam contoh ini, gambar luar angkasa, seperti roket dan bulan). Karena gambar referensi adalah sketsa atau garis luar kasar yang digambar tangan, gambar tersebut menggunakan jenis kontrol CONTROL_TYPE_SCRIBBLE.

Jika gambar referensi Anda adalah gambar tepi Canny atau mesh wajah, Anda juga dapat menggunakan contoh ini, tetapi dengan perubahan berikut:

  • Jika gambar referensi Anda adalah Gambar tepi Canny, gunakan jenis kontrol CONTROL_TYPE_CANNY.

  • Jika gambar referensi Anda adalah mesh wajah, gunakan jenis kontrol CONTROL_TYPE_FACE_MESH. Kontrol ini hanya dapat digunakan dengan penyesuaian subjek orang.

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 controlReference = ImagenControlReference(
        image = referenceImage,
        referenceID = 1,
        controlType = CONTROL_TYPE_SCRIBBLE
    )

    // Provide a prompt that describes the final image.
    // The "[1]" links the prompt to the subject reference with ID 1.
    val prompt = "A cat flying through outer space arranged like the space scribble[1]"

    // Use the editImage API to perform the controlled customization.
    // Pass the list of references, the prompt, and an editing configuration.
    val editedImage = model.editImage(
        references = listOf(controlReference),
        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.
ImagenControlReference controlReference = new ImagenControlReference.Builder()
        .setImage(referenceImage)
        .setReferenceID(1)
        .setControlType(CONTROL_TYPE_SCRIBBLE)
        .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 flying through outer space arranged like the space scribble[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 controlled customization.
// Pass the list of references, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(controlReference), 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 control reference using the reference image.
final controlReference = ImagenControlReference(
  image: referenceImage,
  referenceId: 1,
    controlType: ImagenControlType.scribble,
);

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the subject reference with ID 1.
final prompt = "A cat flying through outer space arranged like the space scribble[1]";

try {
  // Use the editImage API to perform the controlled customization.
  // Pass the list of references, the prompt, and an editing configuration.
  final response = await model.editImage(
    [controlReference],
    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 ImagenControlReference tempat Anda menentukan ID referensi untuk gambar. Perhatikan bahwa beberapa gambar dapat memiliki ID referensi yang sama (misalnya, beberapa coretan dari ide 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.

Tabel berikut menyediakan template perintah yang dapat menjadi titik awal untuk menulis perintah yang dapat disesuaikan berdasarkan kontrol.

Kasus penggunaan Gambar referensi Template perintah Contoh
Penyesuaian terkontrol Peta coretan (1) Buat gambar yang sesuai dengan scribble map [1] agar cocok dengan deskripsi: ${STYLE_PROMPT} ${PROMPT}. Buat gambar yang sesuai dengan scribble map [1] agar cocok dengan deskripsi: Gambar harus bergaya lukisan cat minyak impresionistis dengan sapuan kuas yang santai. Gambar ini memiliki suasana yang diterangi cahaya alami dan goresan kuas yang terlihat jelas. Tampilan samping mobil. Mobil diparkir di permukaan jalan yang basah dan memantulkan cahaya, dengan pantulan lampu kota di genangan air.
Penyesuaian terkontrol Gambar kontrol yang cerdas (1) Buat gambar yang sesuai dengan edge map [1] agar cocok dengan deskripsi: ${STYLE_PROMPT} ${PROMPT} Buat gambar yang sesuai dengan edge map [1] agar cocok dengan deskripsi: Gambar harus bergaya lukisan cat minyak impresionis, dengan sapuan kuas yang santai. Memiliki suasana yang diterangi cahaya alami dan goresan kuas yang terlihat jelas. Tampilan samping mobil. Mobil diparkir di permukaan jalan yang basah dan memantulkan cahaya, dengan pantulan cahaya lampu kota di genangan air.
Penataan gaya gambar orang dengan input FaceMesh 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 ...
Penataan gaya gambar orang dengan input FaceMesh Gambar subjek (1-3)

Gambar kontrol FaceMesh (1)
Buat gambar ${STYLE_PROMPT} tentang SUBJECT_DESCRIPTION [1] dalam pose CONTROL_IMAGE [2] agar sesuai dengan deskripsi: potret SUBJECT_DESCRIPTION [1] ${PROMPT} Buat gambar gaya kartun 3D 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 diburamkan. Karakter yang imut dan cantik, dengan wajah tersenyum, melihat ke arah kamera, 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 kontrol:

  • Buat gambar yang mengikuti perintah dan gambar kontrol tepi canny.

  • Buat gambar yang mengikuti perintah dan gambar coretan.

  • Menata gaya foto seseorang sambil mempertahankan ekspresi wajah.

Contoh kasus penggunaan yang tidak diinginkan

Berikut adalah daftar tidak lengkap kasus penggunaan yang tidak diinginkan untuk penyesuaian berdasarkan kontrol. Model tidak dilatih untuk kasus penggunaan ini, dan kemungkinan akan menghasilkan hasil yang buruk.

  • Buat gambar menggunakan gaya yang ditentukan dalam perintah.

  • Buat gambar dari teks yang mengikuti gaya tertentu yang disediakan oleh gambar referensi, dengan tingkat kontrol tertentu pada komposisi gambar menggunakan gambar kontrol.

  • Buat gambar dari teks yang mengikuti gaya tertentu yang disediakan oleh gambar referensi, dengan beberapa tingkat kontrol pada komposisi gambar menggunakan coretan kontrol.

  • Buat gambar dari teks yang mengikuti gaya tertentu yang disediakan oleh gambar referensi, dengan beberapa tingkat kontrol pada komposisi gambar menggunakan gambar kontrol. Orang dalam gambar memiliki ekspresi wajah tertentu.

  • Menata gaya foto dua orang atau lebih, dan mempertahankan ekspresi wajah mereka.

  • Menata gaya foto hewan peliharaan, dan mengubahnya menjadi gambar. Pertahankan atau tentukan komposisi gambar (misalnya, cat air).