Imagen 3 ile resim oluşturma

Imagen 3, görüntü üretme modelidir. Kullanıcı profilleri için özel avatarlar oluşturmak veya kullanıcı etkileşimini artırmak amacıyla kişiselleştirilmiş görsel öğeleri mevcut ekran akışlarına entegre etmek için kullanılabilir.

Firebase AI Logic SDK'sını kullanarak Android uygulamanızdan Imagen modellerine erişebilirsiniz. Imagen modelleri, hem Firebase AI Logic API sağlayıcıları (Gemini Developer API (çoğu geliştirici için önerilir) ve Vertex AI) kullanılarak kullanılabilir.

Gemini Developer API'ye erişmek için Firebase AI Logic entegrasyon mimarisini gösteren bir şema. Android uygulamaları, Firebase'e bağlanmak için Firebase Android SDK'sını kullanır. Ardından Firebase, buluttaki Gemini Pro ve Flash'a erişen Gemini Developer API ile etkileşim kurar.
Şekil 1. Firebase AI Logic'i kullanarak Imagen 3 modellerine erişin.

İstemlerle deneme yapma

İdeal istemleri oluşturmak genellikle birden fazla deneme gerektirir. İstem tasarımı ve prototip oluşturma için bir IDE olan Vertex AI Studio'da görüntü istemleriyle denemeler yapabilirsiniz. İstemlerinizi iyileştirmeyle ilgili ipuçları için istem ve resim özelliği kılavuzunu inceleyin.

Google Cloud Vertex AI Studio arayüzünün ekran görüntüsü. Bu arayüzde, prehistorik bir ormanda mavi sırt çantası olan bir T-Rex'in dört yapay zeka tarafından üretilmiş resmi gösterilmektedir. Sol kenar çubuğunda Kontrol paneli, Model Bahçesi ve Vizyon gibi gezinme seçenekleri, sağ panelde ise resim oluşturma ayarlarıyla ilgili parametreler gösterilir.
Şekil 2. Vertex AI Studio, resim oluşturma istemlerinizi hassaslaştırmanıza yardımcı olabilir.

Firebase projesi oluşturma ve uygulamanızı bağlama

Firebase'i Android projenize eklemek için Firebase dokümanlarında yer alan adımları uygulayın.

Gradle bağımlılığını ekleme

build.gradle dosyanıza aşağıdaki bağımlılıkları ekleyin:

dependencies {
  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:33.14.0"))

  // Add the dependency for the Firebase AI Logic library. When using the BoM,
  // you don't specify versions in Firebase library dependencies
  implementation("com.google.firebase:firebase-ai")
}

Resim oluşturma

Android uygulamanızda bir resim oluşturmak için isteğe bağlı bir yapılandırmayla bir ImagenModel örneği oluşturarak başlayın.

Negatif istemi, resim sayısını, çıkış resmi en boy oranını, resim biçimini tanımlamak ve filigran eklemek için generationConfig parametresini kullanabilirsiniz. Güvenlik ve kişi filtrelerini yapılandırmak için safetySettings parametresini kullanabilirsiniz.

Kotlin

val config = ImagenGenerationConfig {
    numberOfImages = 2,
    aspectRatio = ImagenAspectRatio.LANDSCAPE_16x9,
    imageFormat = ImagenImageFormat.jpeg(compressionQuality = 100),
    addWatermark = false
}

// Initialize the Gemini Developer API backend service
// For Vertex AI use Firebase.ai(backend = GenerativeBackend.vertexAI())
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).imagenModel(
    modelName = "imagen-3.0-generate-002",
    generationConfig = config,
    safetySettings = ImagenSafetySettings(
       safetyFilterLevel = ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE,
       personFilterLevel = ImagenPersonFilterLevel.BLOCK_ALL
    )
)

Java

ImagenGenerationConfig config = new ImagenGenerationConfig.Builder()
    .setNumberOfImages(2)
    .setAspectRatio(ImagenAspectRatio.LANDSCAPE_16x9)
    .setImageFormat(ImagenImageFormat.jpeg(100))
    .setAddWatermark(false)
    .build();

// For Vertex AI use Firebase.ai(backend = GenerativeBackend.vertexAI())
ImagenModelFutures model = ImagenModelFutures.from(
    FirebaseAI.ai(backend = GenerativeBackend.googleAI()).imagenModel(
       "imagen-3.0-generate-002",
       config,
       ImagenSafetySettings.builder()
          .setSafetyFilterLevel(ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE)
          .setPersonFilterLevel(ImagenPersonFilterLevel.BLOCK_ALL)
          .build())
);

ImagenModel nesnesi oluşturulduktan sonra generateImages'i çağırarak resim oluşturabilirsiniz:

Kotlin

val imageResponse = model.generateImages(
  prompt = "An astronaut riding a horse",
)
val image = imageResponse.images.first
val bitmapImage = image.asBitmap()

Java

CompletableFuture<GenerateContentResponse> futureResponse =
    model.generateContent(
        Content.newBuilder()
            .addParts(
                Part.newBuilder()
                    .setText("An astronaut riding a horse")
                    .build())
            .build());

try {
  GenerateContentResponse imageResponse = futureResponse.get();
  List<GeneratedImage> images =
      imageResponse
          .getCandidates(0)
          .getContent()
          .getParts(0)
          .getInlineData()
          .getImagesList();

  if (!images.isEmpty()) {
    GeneratedImage image = images.get(0);
    Bitmap bitmapImage = image.asBitmap();
    // Use bitmapImage
  }
} catch (ExecutionException | InterruptedException e) {
  e.printStackTrace();
}