使用 Imagen 3 生成圖片

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

您可以使用 Firebase SDK 中的 Vertex AI,從 Android 應用程式存取 Imagen 模型

使用 Firebase 中的 Vertex AI 存取 Imagen 3 模型
圖 1: 在 Firebase 中使用 Vertex AI 存取 Imagen 3 模型。

測試提示

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

Vertex AI Studio 可協助您改善圖像生成提示
圖 2. Vertex AI Studio 可協助您改善圖片產生提示。

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

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

新增 Gradle 依附元件

build.gradle 應用程式檔案中新增下列依附元件:

dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.9.0"))

    implementation("com.google.firebase:firebase-vertexai")
}

如要使用 Firebase 中的 Vertex AI 的 Imagen 3,您必須使用 Firebase BOM 33.10.0 以上版本

生成圖片

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

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

Kotlin

val imagenModel = Firebase.vertexAI.imagenModel(
  modelName = "imagen-3.0-generate-001",
  generationConfig = ImagenGenerationConfig(
    negativePrompt = "frogs",
    numberOfImages = 2,
    aspectRatio = ImagenAspectRatio.LANDSCAPE_16x9,
    imageFormat = ImagenImageFormat.jpeg(compressionQuality = 100),
    addWatermark = false
  ),
  safetySettings = ImagenSafetySettings(
    safetyFilterLevel = ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE,
    personFilterLevel = ImagenPersonFilterLevel.BLOCK_ALL
  )
)

Java

GenerativeModel imagenModel = FirebaseVertexAI.getInstance().imagenModel(
    "imagen-3.0-generate-001",
    ImagenGenerationConfig.builder()
        .setNegativePrompt("frogs")
        .setNumberOfImages(2)
        .setAspectRatio(ImagenAspectRatio.LANDSCAPE_16x9)
        .setImageFormat(ImagenImageFormat.jpeg(100))
        .setAddWatermark(true)
        .build(),
    ImagenSafetySettings.builder()
        .setSafetyFilterLevel(ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE)
        .setPersonFilterLevel(ImagenPersonFilterLevel.BLOCK_ALL)
        .build()
);

ImagenModel 例項化後,您可以呼叫 generateImages 產生圖片:

Kotlin

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

Java

CompletableFuture<GenerateContentResponse> futureResponse =
    imagenModel.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();
}

後續步驟