使用 Imagen 3 生成图片

Imagen 3 是一种图片生成模型。它可用于为用户个人资料生成自定义头像,或将个性化视觉素材资源集成到现有屏幕流程中,以提高用户互动度。

您可以使用 Firebase AI Logic SDK 从 Android 应用访问 Imagen 模型。您可以使用 Firebase AI Logic 的两个 API 提供程序来使用 Imagen 模型:Gemini Developer API(适合大多数开发者)和 Vertex AI。

一张示意图,展示了用于访问 Gemini Developer API 的 Firebase AI Logic 集成架构。Android 应用使用 Firebase Android SDK 连接到 Firebase。然后,Firebase 会与 Gemini Developer API 交互,后者会访问云端的 Gemini Pro 和 Gemini Flash。
图 1. 使用 Firebase AI Logic 访问 Imagen 3 模型。

使用提示进行实验

创建理想的提示通常需要多次尝试。您可以在 Vertex AI Studio 中试用图片提示,该 IDE 可用于提示设计和原型设计。如需有关如何改进提示的提示,请参阅提示和图片属性指南

Google Cloud Vertex AI Studio 界面的屏幕截图,显示了四张生成的图片,其中显示了带有蓝色背包的霸王龙在史前森林中。左侧边栏显示信息中心、模型园和 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();
}