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


Bu sayfada, Firebase AI Logic SDK'larını kullanarak Imagen'deki özelleştirme özelliğini kullanarak belirtilen bir konuya göre resimleri nasıl düzenleyeceğiniz veya oluşturacağınız açıklanmaktadır.

Nasıl çalışır? Bir metin istemi ve belirli bir konuyu (ör. ürün, kişi veya hayvan arkadaşı) gösteren en az bir referans resim sağlarsınız. Model, referans resimlerdeki belirtilen özneye dayalı yeni bir resim oluşturmak için bu girişleri kullanır.

Örneğin, modelden bir çocuğun fotoğrafına çizgi film stili uygulamasını veya bir resimdeki bisikletin rengini değiştirmesini isteyebilirsiniz.

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.

Konu özelleştirme isteği gönderme

Aşağıdaki örnekte, modelden sağlanan referans resme (bu örnekte kedi) göre yeni bir resim oluşturmasını isteyen bir konu özelleştirme isteği gösterilmektedir. Kedi bir hayvan olduğundan ImagenSubjectReferenceType.ANIMAL özne türünü kullanır.

Konunuz bir kişi veya ürün ise bu örneği aşağıdaki değişikliklerle birlikte kullanabilirsiniz:

  • Konunuz kişi ise konu türü ImagenSubjectReferenceType.PERSON'yi kullanın. Bu tür istekleri, resim oluşturma sürecine daha fazla rehberlik etmek için yüz ağı kontrol resmi ile veya bu resim olmadan gönderebilirsiniz.

  • Konunuz bir ürün ise konu türü ImagenSubjectReferenceType.PRODUCT özelliğini kullanın.

İ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 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

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 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

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 konu açıklaması) belirlediğiniz bir ImagenSubjectReference 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ı kediye 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, bir konuya (ör. ürün, kişi veya evcil hayvan) göre özelleştirme için istem yazmaya başlarken kullanabileceğiniz istem şablonları açıklanmaktadır.

Kullanım alanı Referans resimler İstem şablonu Örnek
Ürün resmi stilizasyonu - reklam Özne resmi (en fazla 4) SUBJECT_DESCRIPTION [1] hakkında şu açıklamaya uygun bir resim oluştur: ${PROMPT}

Luxe Elixir hair oil, golden liquid in glass bottle [1] hakkında şu açıklamaya uygun bir resim oluştur: Saf beyaz bir arka plan üzerinde Luxe Elixir hair oil, golden liquid in glass bottle [1] tutan bir kadının elinin yakın çekim ve yüksek ışıklı görüntüsü. Kadının eli iyi aydınlatılmış ve şişeye net bir şekilde odaklanılmış. Sığ alan derinliği sayesinde arka plan bulanıklaştırılmış ve ürün vurgulanmış. Aydınlatma yumuşak ve dağınık olup şişenin ve elin etrafında ince bir parıltı oluşturuyor. Genel kompozisyon basit ve zarif olup ürünün lüks görünümünü vurguluyor.

Ürün resmi stilizasyonu - özellik değişikliği Özne resmi (en fazla 4) SUBJECT_DESCRIPTION resmi oluştur ancak ${PROMPT}

Seiko watch [1] resmi oluştur ancak mavi renkte olsun.

Yüz ağı girişi olmadan kişi resmi stilizasyonu Özne resmi (en fazla 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şi olmadan kişi resmi stilizasyonu Özne resmi (en fazla 4) Açıklamaya uygun olarak STYLE_DESCRIPTION [2] hakkında bir SUBJECT_DESCRIPTION [1] resmi oluştur: SUBJECT_DESCRIPTION [1] STYLE_PROMPT portresi Açıklamaya uygun olarak 3d-cartoon style [2] hakkında a woman with short hair [1] resmi oluştur: a woman with short hair [1]'ı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şi ile kişi resmi stilizasyonu Özne resmi (en fazla 3)

Yüz ağı kontrol resmi (1)
SUBJECT_DESCRIPTION [1] ile ilgili Face mesh from the control image [2] kullanarak resim oluştur. ${PROMPT} face mesh from the control image [2] ile the person [1] resmini oluştur. Kişi, nötr bir ifadeyle doğrudan öne bakmalıdır. Arka plan ... olmalıdır. ...
Yüz ağı girişi ile kişi resmi stilizasyonu Özne resmi (en fazla 3)

Yüz ağı 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. ...
Yüz ağı girişi ile kişi resmi stilizasyonu Özne resmi (en fazla 3)

Yüz ağı kontrol resmi (1)
Açıklamaya uygun olarak STYLE_DESCRIPTION [3] hakkında CONTROL_IMAGE [2] pozunda SUBJECT_DESCRIPTION [1] resmi oluştur: SUBJECT_DESCRIPTION [1] ${PROMPT} portresi Açıklamayla eşleşmesi için 3d-cartoon style [3] hakkında a woman with short hair [1] ile ilgili control image [2] pozunda bir resim oluştur: a woman with short hair [1]'ın bulanık arka planlı 3D çizgi film tarzında portresi. Kameraya bakan, gülümseyen yüzlü, pastel renk tonlu, sevimli ve güzel bir karakter ...



En iyi uygulamalar ve sınırlamalar

Özne olarak bir kişi kullanıyorsanız referans resminizdeki yüzün aşağıdaki özelliklere sahip olmasını öneririz:

  • Ortalanmış olmalı ve resmin en az yarısını kaplamalıdır.
  • Ön görünümde her yöne (yuvarlanma, eğilme ve sapma) döndürülmüş olmalıdır.
  • Güneş gözlüğü veya maske gibi nesnelerle kapatılmamış olmalıdır.

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, konuya göre özelleştirme yapılabilir:

  • Bir kişinin fotoğrafını stilize etme

  • Bir kişinin fotoğrafını stilize edin ve yüz ifadelerini koruyun.

  • (Başarı oranı düşük) Bir ürünü (ör. kanepe veya kurabiye) farklı ürün açılarıyla farklı sahnelerde yerleştirin.

  • Ürünün tam ayrıntılarını korumayan varyasyonlar oluşturma

  • Yüz ifadesini koruyarak bir kişinin fotoğrafını stilize etme

İ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ı, konuya dayalı özelleştirme ile ilgilidir. Model bu kullanım alanları için eğitilmediğinden muhtemelen kötü sonuçlar üretecektir.

  • Kimliklerini koruyarak iki veya daha fazla kişiyi farklı sahnelerde yerleştirin.

  • Kimliklerini koruyarak iki veya daha fazla kişiyi farklı sahnelerde yerleştirin ve stil için örnek bir resim kullanarak çıkış resminin stilini belirtin.

  • İki veya daha fazla kişinin yer aldığı fotoğrafları, kimliklerini koruyarak stilize edin.

  • Evcil hayvanınızın kimliğini koruyarak farklı sahnelerde yerleştirin.

  • Evcil hayvan fotoğrafını stilize edip çizime dönüştürme

  • Evcil hayvan fotoğrafını stilize edip çizime dönüştürürken görüntünün stilini (ör. suluboya) koruyun veya belirtin.

  • Hem evcil hayvanın hem de kişinin kimliğini koruyarak onları farklı bir sahneye yerleştirin.

  • Bir evcil hayvanın ve bir veya daha fazla kişinin fotoğrafını stilize edip çizime dönüştürme

  • İki ürünü farklı ürün açılarıyla farklı sahnelere yerleştirin.

  • 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.

  • Bir ürünü farklı bir sahneye yerleştirirken sahnenin kontrol resmiyle belirtilen kompozisyonunu koruyun.

  • Belirli bir resmi giriş olarak kullanarak (ör. belirli renkler, ışıklandırma stilleri veya animasyon içeren fotogerçekçi) iki ürünü farklı ürün açılarıyla farklı sahnelerde yerleştirin.

  • Bir kontrol resmiyle belirtilen sahnenin kompozisyonunu koruyarak iki ürünü farklı sahnelere yerleştirin.