Imagen'ı kullanarak resimleri belirtilen stile göre özelleştirme


Bu sayfada, Firebase AI Logic SDK'larını kullanarak Imagen'daki özelleştirme özelliğini kullanarak belirtilen bir stile göre resimleri düzenleme veya oluşturma işlemleri açıklanmaktadır.

Nasıl çalışır? Bir metin istemi ve belirli bir stili (ör. desen, doku veya tasarım stili) gösteren en az bir referans resim sağlarsınız. Model, referans resimlerde belirtilen stile göre yeni bir resim oluşturmak için bu girişleri kullanır.

Örneğin, sağladığınız popüler bir perakende kataloğundaki resme göre mutfakla ilgili yeni bir resim oluşturabilirsiniz.

Koda atla



Başlamadan önce

Yalnızca Vertex AI Gemini API API sağlayıcısı olarak kullanılırken kullanılabilir.

Henüz yapmadıysanız başlangıç kılavuzunu tamamlayın. Bu kılavuzda Firebase projenizi ayarlama, uygulamanızı Firebase'e bağlama, SDK'yı ekleme, seçtiğiniz API sağlayıcısı için arka uç hizmetini başlatma ve ImagenModel örneği oluşturma hakkında bilgiler yer alır.

Bu özelliği destekleyen modeller

Imagen, capability modeli aracılığıyla görüntü düzenleme hizmeti sunar:

  • imagen-3.0-capability-001

Imagen modellerinde global konumunun desteklenmediğini unutmayın.

Stil özelleştirme isteği gönderme

Aşağıdaki örnekte, modelden sağlanan referans resmin stilinde yeni bir resim oluşturmasını isteyen bir stil özelleştirme isteği gösterilmektedir (bu örnekte Van Gogh'un "Yıldızlı Gece" tablosu).

İstem yazma ve istemlerde referans resim kullanma hakkında bilgi edinmek için bu sayfanın ilerleyen bölümlerinde istem şablonlarını inceleyin.

Swift

Imagen modelleriyle görüntü düzenleme, Swift'te desteklenmez. Bu yılın ilerleyen zamanlarında tekrar kontrol edin.

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

Imagen modelleriyle resim düzenleme, web uygulamalarında desteklenmez. Bu yılın ilerleyen zamanlarında tekrar kontrol edin.

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

Imagen modelleriyle resim düzenleme, Unity'de desteklenmez. Bu yılın ilerleyen zamanlarında tekrar kontrol edin.

İstem şablonları

İstekle birlikte, bir resim için referans kimliği (ve isteğe bağlı olarak stil açıklaması) belirttiğiniz bir ImagenStyleReference tanımlayarak referans resimler (en fazla 4 resim) sağlarsınız. Birden fazla resmin aynı referans kimliğine sahip olabileceğini (örneğin, aynı desene ait birden fazla fotoğraf) unutmayın.

Ardından, istemi yazarken bu kimliklere başvurursunuz. Örneğin, istemde [1] kullanarak referans kimliği 1 olan resimlere atıfta bulunursunuz. Konu açıklaması sağlarsanız istemin insanlar tarafından daha kolay okunabilmesi için bu açıklamayı isteme de ekleyebilirsiniz.

Aşağıdaki tabloda, stil tabanlı özelleştirme için istem yazmaya başlarken kullanabileceğiniz istem şablonları verilmiştir.

Kullanım alanı Referans resimler İstem şablonu Örnek
Nesne stili Özne resmi (1-4) Aşağıdaki altyazıya göre STYLE_DESCRIPTION [1] cinsinden bir resim oluştur: IMAGE_DESCRIPTION. Aşağıdaki altyazıya göre neon sign style [1] cinsinden bir resim oluştur: a sign saying have a great day.
Yüz ağı girişi olmadan kişi görüntüsünü stilize etme Özne resmi (1-4) Açıklamaya uygun olarak SUBJECT_DESCRIPTION [1] hakkında bir resim oluştur: SUBJECT_DESCRIPTION [1] portresi ${PROMPT} Açıklamayla eşleşmesi için a woman with short hair[1] hakkında bir resim oluştur: a woman with short hair[1]'nın bulanık arka planlı 3D çizgi film tarzında portresi. Kameraya bakan, gülümseyen yüzlü, pastel renk tonlarında, sevimli ve güzel bir karakter ...
Yüz ağı girişiyle kişi resmi stilizasyonu Özne resmi (1-3)

Facemesh kontrol resmi (1)
Açıklamaya uygun olarak SUBJECT_DESCRIPTION [1] hakkında CONTROL_IMAGE [2] pozunda bir resim oluştur: SUBJECT_DESCRIPTION [1] portresi ${PROMPT} Açıklamaya uygun olarak a woman with short hair [1] hakkında control image [2] pozunda bir resim oluştur: a woman with short hair [1]'nın bulanık arka planlı 3D çizgi film tarzında bir portresi. Kameraya bakan, pastel renk tonlarında, gülümseyen yüzlü, sevimli ve güzel bir karakter. ...



En iyi uygulamalar ve sınırlamalar

Kullanım alanları

Özelleştirme özelliği, modelin eğitildiği işlevlerden daha fazlasını yapabileceği izlenimini verebilecek serbest stil istemler sunar. Aşağıdaki bölümlerde, özelleştirme için amaçlanan kullanım alanları ve amaçlanmayan kullanım alanlarına dair kapsamlı olmayan örnekler açıklanmaktadır.

Bu özelliği, modeli bu kullanım alanları üzerinde eğittiğimiz ve bu alanlarda iyi sonuçlar beklediğimiz için amaçlanan kullanım alanlarında kullanmanızı öneririz. Aksine, modeli amaçlanan kullanım alanları dışında bir şeyler yapmaya zorlarsanız kötü sonuçlar almayı beklemelisiniz.

Kullanım alanları

Aşağıda, amaçlanan kullanım alanları verilmiştir. Bu alanlarda, stile dayalı özelleştirme yapılabilir:

  • Referans resimde belirtilen stile uygun metin girişinden resim oluşturma.

  • Bir kişinin fotoğrafını değiştirme

  • Bir kişinin fotoğrafını değiştirip yüz ifadesini koruyun.

İstenmeyen kullanım alanlarına örnekler

Aşağıda, amaçlanmayan kullanım alanlarına dair olası her örneği içermeyen bir liste verilmiştir. Bu kullanım alanları, stile dayalı özelleştirme ile ilgilidir. Model bu kullanım alanları için eğitilmediğinden muhtemelen kötü sonuçlar üretecektir.

  • Metinden ve referans resim kullanarak, referans resimden oluşturulan kompozisyon üzerinde belirli bir düzeyde kontrol sahibi olmak amacıyla resim oluşturun.

  • Belirli bir yüz ifadesine sahip bir kişinin yer aldığı referans resimden bir kişinin resmini oluşturun.

  • İki kişiyi farklı bir sahneye yerleştirin, kimliklerini koruyun ve referans resim kullanarak çıkış resminin stilini (ör. yağlı boya tablo) belirleyin.

  • Evcil hayvan fotoğrafını stilize edip çizime dönüştürürken resmin kompozisyonunu koruyun veya belirtin.

  • Bir ürünü (ör. kurabiye veya kanepe) farklı ürün açılarıyla ve belirli bir resim stiline (ör. belirli renkler, ışıklandırma stilleri veya animasyonlarla fotogerçekçi) uygun şekilde farklı sahnelerde yerleştirin.