使用 Imagen 生成圖片


Vertex AI in Firebase SDK 可讓您存取 Imagen 3 模型 (透過 Imagen API),以便根據文字提示產生圖像。這項功能可讓您執行以下操作:

  • 根據自然語言寫成的提示生成圖片
  • 以多種格式和風格產生圖片
  • 在圖片中顯示文字

請注意,Vertex AI in Firebase 目前尚不支援 Imagen 型號提供的所有功能。如要進一步瞭解,請參閱本頁稍後的「支援的功能和功能」一節。

跳至僅限文字輸入的程式碼

事前準備

如果您尚未完成入門指南,請先完成這項操作。這包括設定 Firebase 專案、將應用程式連結至 Firebase、新增 SDK 以及初始化 Vertex AI 服務。您必須先完成這些必要工作,才能使用 Vertex AI in Firebase SDK 向 Imagen 模型傳送提示要求。

請注意,如要使用 Imagen 模型產生圖片,請遵循下列步驟:

  • 請務必至少使用下列 Firebase 程式庫版本:
    iOS+:v11.9.1 以上版本 | Android:v16.2.0 以上版本 (BoM:v33.10.0 以上版本) | Web:v11.4.1 以上版本 | Flutter:v1.4.0 以上版本 (BoM:v3.8.0 以上版本)

  • 初始化 ImagenModel (不是 GenerativeModel)

  • 在對 generateImages() 發出的呼叫中傳送提示 (generateContent()generateContentStream() 發送)

本頁的範例會顯示 ImagenModel 的初始化作業和 generateImages() 的使用方式。

支援這項功能的型號

Imagen 3 模型支援圖片產生功能。我們即將支援使用 Gemini 2.0 模型產生圖片。

從純文字輸入內容生成圖片

您可以使用文字提示,要求 Imagen 模型產生圖像。您可以產生一張圖片多張圖片

根據純文字輸入內容生成一張圖片

請先完成本指南的「事前準備」一節,再嘗試使用這個範例。

您可以要求 Imagen 模型透過文字提示生成單一圖像。

Kotlin

// Using Imagen with Vertex AI in Firebase is in public preview
// It requires opt-in to use the API
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
  // Initialize the Vertex AI service and Imagen model
  // Specify an Imagen 3 model that supports your use case
  val imagenModel = Firebase.vertexAI.imagenModel("imagen-3.0-generate-002")

  // Provide an image generation prompt
  val prompt = "An astronaut riding a horse"

  // To generate an image, call `generateImages` with the text prompt
  val imageResponse = imagenModel.generateImages(prompt)

  // Handle the generated image
  val image = imageResponse.images.first()

  val bitmapImage = image.asBitmap()
}

Java

// Initialize the Vertex AI service and Imagen model
// Specify an Imagen 3 model that supports your use case
ImagenModel imagenModel = FirebaseVertexAI.getInstance().imagenModel(
        /* modelName */ "imagen-3.0-generate-002");

ImagenModelFutures model = ImagenModelFutures.from(imagenModel);

// Provide an image generation prompt
String prompt = "An astronaut riding a horse";

// To generate an image, call `generateImages` with the text prompt
Futures.addCallback(model.generateImages(prompt), new FutureCallback<ImagenGenerationResponse<ImagenInlineImage>>() {
    @Override
    public void onSuccess(ImagenGenerationResponse<ImagenInlineImage> result) {
        if (result.getImages().isEmpty()) {
            Log.d("TAG", "No images generated");
        }
        Bitmap bitmap = result.getImages().get(0).asBitmap();
        // Use the bitmap to display the image in your UI
    }

    @Override
    public void onFailure(Throwable t) {
        // ...
    }
}, Executors.newSingleThreadExecutor());

瞭解如何選擇適合用途和應用程式的模型,以及選用的位置

根據純文字輸入內容生成多張圖片

請先完成本指南的「事前準備」一節,再嘗試使用這個範例。

根據預設,Imagen 3 模型每個要求只會產生一張圖片。不過,您可以要求 Imagen 模型在模型初始化期間提供 generationConfig,讓每個要求產生多張圖片。

Kotlin

// Using Imagen with Vertex AI in Firebase is in public preview
// It requires opt-in to use the API
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
  // Initialize the Vertex AI service and Imagen model
  // Specify an Imagen 3 model that supports your use case
  val imagenModel = Firebase.vertexAI.imagenModel(
      modelName = "imagen-3.0-generate-002",
      // Configure the model to generate multiple images for each request
      // See: https://firebase.google.com/docs/vertex-ai/model-parameters
      generationConfig = ImagenGenerationConfig(numberOfImages = 4)
  )

  // Provide an image generation prompt
  val prompt = "An astronaut riding a horse"

  // To generate images, call `generateImages` with the text prompt
  val imageResponse = imagenModel.generateImages(prompt)

  // If fewer images were generated than were requested,
  // then `filteredReason` will describe the reason they were filtered out
  if (imageResponse.filteredReason != null) {
    Log.d(TAG, "FilteredReason: ${imageResponse.filteredReason}")
  }

  for (image in imageResponse.images) {
    val bitmap = image.asBitmap()
    // Use the bitmap to display the image in your UI
  }
}

Java

// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/vertex-ai/model-parameters
ImagenGenerationConfig imagenGenerationConfig = new ImagenGenerationConfig.Builder()
        .setNumberOfImages(4)
        .build();

// Initialize the Vertex AI service and Imagen model
// Specify an Imagen 3 model that supports your use case
ImagenModel imagenModel = FirebaseVertexAI.getInstance().imagenModel(
        /* modelName */ "imagen-3.0-generate-002",
        /* imageGenerationConfig */ imagenGenerationConfig);

ImagenModelFutures model = ImagenModelFutures.from(imagenModel);

// Provide an image generation prompt
String prompt = "An astronaut riding a horse";

// To generate images, call `generateImages` with the text prompt
Futures.addCallback(model.generateImages(prompt), new FutureCallback<ImagenGenerationResponse<ImagenInlineImage>>() {
    @Override
    public void onSuccess(ImagenGenerationResponse<ImagenInlineImage> result) {
        // If fewer images were generated than were requested,
        // then `filteredReason` will describe the reason they were filtered out
        if (result.getFilteredReason() != null){
            Log.d("TAG", "FilteredReason: " + result.getFilteredReason());
        }

        // Handle the generated images
        List<ImagenInlineImage> images = result.getImages();
        for (ImagenInlineImage image : images) {
            Bitmap bitmap = image.asBitmap();
            // Use the bitmap to display the image in your UI
        }
    }

    @Override
    public void onFailure(Throwable t) {
        // ...
    }
}, Executors.newSingleThreadExecutor());

瞭解如何選擇適合用途和應用程式的模型,以及選用的位置

支援的功能和相關規定

Imagen 3 模型提供許多與圖像產生相關的功能。本節說明搭配 Vertex AI in Firebase 使用模型時支援的功能。

支援的功能

Vertex AI in Firebase 支援 Imagen 3 型號的這些功能。

  • 產生人物和臉孔 (前提是您的 Firebase 專案已獲得 Google Cloud核准)

  • 在產生的圖片中產生文字

  • 為產生的圖片加上浮水印

  • 設定圖片產生參數,例如產生的圖片數量、顯示比例和浮水印

  • 調整安全性設定

Vertex AI in Firebase不支援 Imagen 3 型號的這些進階功能。

請注意,即使在伺服器端使用 Imagen 模型,這些功能大多都需要已核准的使用者名單

  • 圖片編輯或處理功能,包括放大圖片

  • 在傳送至模型的要求中加入圖片 (例如少量樣本學習)

  • 使用 SDK 驗證數位浮水印
    如要驗證圖片是否含有浮水印,您可以使用 Media 分頁將圖片上傳至 Vertex AI Studio。

  • 使用文字產生「動態圖片」 (MP4 產生)

  • 使用預先定義的風格生成圖片

  • 設定輸入文字的語言

  • 啟用 includeSafetyAttributes,表示無法傳回 safetyAttributes.categoriessafetyAttributes.scores

  • 停用提示強化功能 (enhancePrompt 參數),這表示以 LLM 為基礎的提示重寫工具一律會自動為提供的提示新增更多詳細資料,以便提供更高品質的圖片,更貼近提供的提示

  • 將產生的圖片直接寫入 Google Cloud Storage,做為模型回應的一部分 (storageUri 參數)。相反地,圖片一律會以 base64 編碼的圖片位元組形式傳回。
    如要將產生的圖片上傳至 Cloud Storage,您可以使用 Cloud Storage for Firebase

規格和限制

限制 (每項要求) Imagen 3 Imagen 3 Fast
輸入符記數量上限 480 個符記 480 個符記
輸出圖片數量上限 4 張圖片 4 張圖片
支援的輸出圖片解析度 (像素)
  • 1024x1024 像素 (1:1 顯示比例)
  • 896x1280 (顯示比例 3:4)
  • 1280x896 (顯示比例 4:3)
  • 768x1408 (顯示比例 9:16)
  • 1408 x 768 (顯示比例 16:9)
  • 1024x1024 像素 (1:1 顯示比例)
  • 896x1280 (顯示比例 3:4)
  • 1280x896 (顯示比例 4:3)
  • 768x1408 (顯示比例 9:16)
  • 1408x768 (顯示比例 16:9)

其他功能

瞭解如何控管內容產生

進一步瞭解支援的型號

瞭解可用於各種用途的模型,以及相關配額價格


針對 Vertex AI in Firebase 的使用體驗提供意見回饋