使用 Imagen 生成图片


借助 Vertex AI in Firebase SDK,您可以通过 Imagen API 访问 Imagen 3 模型,以便根据文本提示生成图片。借助此功能,您可以执行以下操作:

  • 根据用自然语言编写的提示生成图片
  • 生成各种格式和风格的图片
  • 渲染图片中的文本

请注意,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 模型每个请求只生成一张图片。不过,您可以通过在模型初始化期间提供 generationConfig,让 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(
      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 搭配使用时支持的功能。

支持的 capability 和功能

Vertex AI in Firebase 支持 Imagen 3 模型的这些功能。

  • 生成人物和面孔(前提是您的 Firebase 项目已获得 Google Cloud批准

  • 在生成的图片中生成文本

  • 为生成的图片添加水印

  • 配置图片生成参数,例如生成的图片数量、宽高比和水印

  • 配置安全设置

Vertex AI in Firebase 支持 Imagen 3 模型的这些高级功能。

请注意,即使在服务器端使用 Imagen 模型,也需要位于已获批准的用户名单中才能使用其中的大多数功能。

  • 图片编辑或处理功能,包括放大图片

  • 在向模型发送的请求中添加图片(例如,用于少样本学习)

  • 使用 SDK 验证数字水印
    如果您想验证图片是否带有水印,可以使用 Vertex AI Studio 的媒体标签页将图片上传到 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
输入 token 数上限 480 个词元 480 个词元
输出图片数量上限 4 张图片 4 张图片
支持的输出图片分辨率(像素)
  • 1024x1024 像素(宽高比为 1:1)
  • 896x1280(宽高比为 3:4)
  • 1280x896(宽高比为 4:3)
  • 768x1408(宽高比为 9:16)
  • 1408x768(宽高比为 16:9)
  • 1024x1024 像素(宽高比为 1:1)
  • 896x1280(宽高比为 3:4)
  • 1280x896(宽高比为 4:3)
  • 768x1408(宽高比为 9:16)
  • 1408x768(宽高比为 16:9)

您还可以执行哪些操作?

了解如何控制内容生成

详细了解支持的模型

了解适用于各种用例的模型及其配额价格


提供有关 Vertex AI in Firebase 使用体验的反馈