Tạo hình ảnh bằng Imagen

Imagen là một mô hình tạo hình ảnh. Bạn có thể dùng tính năng này để tạo hình đại diện tuỳ chỉnh cho hồ sơ người dùng hoặc để tích hợp các thành phần hình ảnh được cá nhân hoá vào luồng màn hình hiện có nhằm tăng mức độ tương tác của người dùng.

Bạn có thể truy cập vào các mô hình Imagen từ ứng dụng Android của mình bằng Firebase AI Logic SDK. Bạn có thể sử dụng các mô hình Imagen bằng cả nhà cung cấp API Firebase AI Logic: Gemini Developer API (nên dùng cho hầu hết các nhà phát triển) và Vertex AI.

Sơ đồ minh hoạ cấu trúc tích hợp Firebase AI Logic để truy cập vào Gemini Developer API. Ứng dụng Android sử dụng Firebase Android SDK để kết nối với Firebase. Sau đó, Firebase tương tác với Gemini Developer API, API này truy cập vào Gemini Pro và Flash trong đám mây.
Hình 1. Truy cập vào các mô hình Imagen bằng Firebase AI Logic.

Thử nghiệm với câu lệnh

Việc tạo ra câu lệnh lý tưởng thường mất nhiều lần thử. Bạn có thể thử nghiệm với câu lệnh hình ảnh trong Vertex AI Studio, một IDE để thiết kế và tạo nguyên mẫu câu lệnh. Để biết các mẹo về cách cải thiện câu lệnh, hãy xem hướng dẫn về câu lệnh và thuộc tính hình ảnh.

Ảnh chụp màn hình giao diện Google Cloud Vertex AI Studio, cho thấy 4 hình ảnh được tạo về một con khủng long bạo chúa đeo ba lô màu xanh dương trong một khu rừng thời tiền sử. Thanh bên trái cho thấy các lựa chọn điều hướng như Trang tổng quan, Model Garden và Vision, trong khi bảng điều khiển bên phải chứa các Tham số cho chế độ cài đặt tạo hình ảnh.
Hình 2. Vertex AI Studio có thể giúp bạn tinh chỉnh câu lệnh tạo hình ảnh.

Thiết lập dự án Firebase và kết nối ứng dụng của bạn

Làm theo các bước trong tài liệu của Firebase để thêm Firebase vào dự án Android.

Thêm phần phụ thuộc vào Gradle

Thêm các phần phụ thuộc sau vào tệp build.gradle:

dependencies {
  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:34.2.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")
}

Tạo hình ảnh

Để tạo hình ảnh trong ứng dụng Android, hãy bắt đầu bằng cách khởi tạo một ImagenModel bằng cấu hình không bắt buộc.

Bạn có thể sử dụng tham số generationConfig để xác định câu lệnh phủ định, số lượng hình ảnh, tỷ lệ khung hình của hình ảnh đầu ra, định dạng hình ảnh và thêm hình mờ. Bạn có thể dùng tham số safetySettings để thiết lập bộ lọc an toàn và bộ lọc khuôn mặt.

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())
);

Sau khi tạo thực thể ImagenModel, bạn có thể tạo hình ảnh bằng cách gọi 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();
}