使用 Imagen 3 生成圖片

Imagen 3 是圖像生成模型。您可以使用這項功能為使用者個人資料產生自訂顯示圖片,或是將個人化視覺素材資源整合至現有的畫面流程,以提升使用者參與度。

您可以使用 Firebase AI Logic SDK 從 Android 應用程式存取 Imagen 模型。您可以使用 Firebase AI 邏輯 API 供應商 (Gemini Developer API,適用於大多數開發人員) 和 Vertex AI 使用 Imagen 模型。

這張圖表說明 Firebase AI 邏輯整合架構,可用來存取 Gemini Developer API。Android 應用程式會使用 Firebase Android SDK 連線至 Firebase。接著,Firebase 會與 Gemini Developer API 互動,後者會在雲端中存取 Gemini Pro 和 Flash。
圖 1. 使用 Firebase AI Logic 存取 Imagen 3 模型。

測試提示

通常需要多次嘗試,才能建立理想的提示。您可以在 Vertex AI Studio 中測試圖像提示,這是用於提示設計和原型設計的 IDE。如要瞭解如何改善提示,請參閱提示和圖像屬性指南

Google Cloud Vertex AI Studio 介面的螢幕截圖,顯示四張生成的圖片,其中有隻暴龍背著藍色背包,位於史前森林中。左側欄會顯示「資訊主頁」、「Model Garden」和「Vision」等導覽選項,右側面板則包含圖片產生設定的參數。
圖 2.Vertex AI Studio 可協助您改善圖片產生提示。

設定 Firebase 專案並連結應用程式

請按照 Firebase 說明文件中的步驟將 Firebase 新增至 Android 專案

新增 Gradle 依附元件

build.gradle 檔案中新增下列依附元件:

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

生成圖片

如要在 Android 應用程式中產生圖片,請先使用選用設定例項化 ImagenModel

您可以使用 generationConfig 參數定義負面提示、圖片數量、輸出圖片顯示比例、圖片格式,以及新增浮水印。您可以使用 safetySettings 參數設定安全和人物篩選器。

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 例項化之後,您可以呼叫 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();
}