使用 Imagen 3 生成图片

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

您可以从 Android 应用中使用 Firebase AI Logic SDK 访问 Imagen 模型。Imagen 模型可通过两种 Firebase AI Logic API 提供方获取:Gemini 开发者 API(推荐用于大多数开发者)和 Vertex AI。

A diagram illustrating a Firebase AI Logic integration architecture
       to access the Gemini Developer API. An Android App utilizes the Firebase
       Android SDK to connect to Firebase. Firebase then interacts with the
       Gemini Developer API, which accesses Gemini Pro & Flash within the
       cloud.
图 1. 使用 Firebase AI Logic 访问 Imagen 3 模型。

尝试使用提示

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

A screenshot of the Google Cloud Vertex AI Studio interface,
      displaying four generated images of a T-Rex with a blue backpack in a
      prehistoric forest. The left sidebar shows navigation options like
      Dashboard, Model Garden, and Vision, while the right panel contains
      Parameters for image generation settings.
图 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();
}