Membuat gambar dengan Imagen 3

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

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

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

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 tips tentang cara meningkatkan perintah, tinjau panduan atribut gambar dan perintah.

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

Menyiapkan project Firebase dan menghubungkan aplikasi

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

Membuat gambar

Untuk membuat gambar di aplikasi Android, mulai 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 keamanan 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 dibuat instance-nya, 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();
}