Membuat gambar dengan Imagen

Imagen adalah model pembuatan gambar. Fitur ini dapat digunakan untuk membuat avatar kustom untuk profil pengguna atau untuk mengintegrasikan aset visual yang dipersonalisasi ke dalam alur layar yang ada untuk meningkatkan interaksi pengguna.

Anda dapat mengakses model Imagen dari aplikasi Android Anda menggunakan Firebase AI Logic SDK. Model Imagen tersedia menggunakan penyedia API Firebase AI Logic: Gemini Developer API (direkomendasikan untuk sebagian besar developer) dan Vertex AI.

Diagram yang menggambarkan arsitektur integrasi Firebase AI Logic
       untuk mengakses Gemini Developer API. Aplikasi Android menggunakan Firebase Android SDK untuk terhubung ke Firebase. Kemudian, Firebase berinteraksi dengan
       Gemini Developer API, yang mengakses Gemini Pro & Flash dalam
       cloud.
Gambar 1. Mengakses model Imagen menggunakan Firebase AI Logic.

Bereksperimen dengan perintah

Membuat perintah yang ideal sering kali memerlukan beberapa upaya. Anda dapat bereksperimen dengan perintah gambar di Vertex AI Studio, IDE untuk desain dan pembuatan prototipe perintah. Untuk mendapatkan tips tentang cara meningkatkan kualitas perintah, tinjau panduan atribut gambar dan perintah.

Screenshot antarmuka Google Cloud Vertex AI Studio,
      yang menampilkan empat gambar T-Rex dengan ransel biru di hutan prasejarah. Sidebar kiri menampilkan opsi navigasi seperti
      Dashboard, Model Garden, dan Vision, sedangkan panel kanan berisi
      Parameter untuk setelan pembuatan gambar.
Gambar 2. Vertex AI Studio dapat membantu Anda menyempurnakan perintah pembuatan gambar.

Menyiapkan project Firebase dan menghubungkan aplikasi Anda

Ikuti langkah-langkah dalam dokumentasi Firebase untuk menambahkan Firebase ke project Android Anda.

Menambahkan dependensi Gradle

Tambahkan dependensi berikut ke file build.gradle Anda:

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")
}

Buat gambar

Untuk membuat gambar di aplikasi Android, mulailah dengan membuat instance ImagenModel dengan konfigurasi opsional.

Anda dapat menggunakan parameter generationConfig untuk menentukan perintah negatif, jumlah gambar, rasio aspek gambar output, format gambar, dan menambahkan watermark. Anda dapat menggunakan parameter safetySettings untuk mengonfigurasi filter keselamatan dan orang.

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())
);

Setelah ImagenModel di-instance, Anda dapat membuat gambar dengan memanggil generateImages:

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();
}