Imagen ile resim oluşturma

Imagen, 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 diyagram. Android uygulaması, Firebase'e bağlanmak için Firebase Android SDK'sını kullanır. Ardından Firebase, buluttaki Gemini Pro ve Flash'e erişen Gemini Developer API ile etkileşim kurar.
1. şekil. Firebase AI Logic'i kullanarak Imagen 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ştirme hakkında 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, tarih öncesi bir ormanda mavi sırt çantalı bir T-Rex'in dört adet üretilmiş görüntüsü gösteriliyor. Sol kenar çubuğunda; Kontrol Paneli, Model Bahçesi ve Vision gibi gezinme seçenekleri gösterilirken sağ panelde görüntü oluşturma ayarlarıyla ilgili Parametreler yer alır.
Şekil 2. Vertex AI Studio, resim oluşturma istemlerinizi iyileştirmenize yardımcı olabilir.

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

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

Gradle bağımlılığını ekleyin

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:34.2.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 üretme

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

generationConfig parametresini kullanarak negatif istem, resim sayısı, çıktı resminin en boy oranı ve resim biçimini tanımlayabilir, ayrıca filigran ekleyebilirsiniz. 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 örneklendirildikten 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();
}