Создавайте изображения с помощью Imagen 3

Imagen 3 — это модель генерации изображений. Его можно использовать для создания пользовательских аватаров для профилей пользователей или для интеграции персонализированных визуальных ресурсов в существующие экранные потоки для повышения вовлеченности пользователей.

Вы можете получить доступ к моделям Imagen из своего приложения Android с помощью Vertex AI в Firebase SDK .

Доступ к моделям Imagen 3 с помощью Vertex AI в Firebase
Рисунок 1 . Получите доступ к моделям Imagen 3 с помощью Vertex AI в Firebase.

Экспериментируйте с подсказками

Создание идеальных подсказок часто требует нескольких попыток. Поэкспериментировать с подсказками-изображениями можно в Vertex AI Studio — интегрированной среде разработки для проектирования и прототипирования подсказок. Советы о том, как улучшить подсказки, можно найти в руководстве по атрибутам подсказок и изображений .

Vertex AI Studio может помочь вам уточнить подсказки по созданию изображений.
Рисунок 2 . Vertex AI Studio может помочь вам уточнить подсказки по созданию изображений.

Настройте проект Firebase и подключите свое приложение

Следуйте инструкциям в документации Firebase, чтобы добавить Firebase в свой проект Android .

Добавьте зависимость Gradle

Добавьте следующие зависимости в файл приложения build.gradle :

dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.9.0"))

    implementation("com.google.firebase:firebase-vertexai")
}

Для изображения 3 в Vertex AI в Firebase требуется Firebase BOM 33.10.0 или выше .

Создать изображение

Чтобы создать изображение в приложении Android, начните с создания экземпляра ImagenModel с дополнительной конфигурацией.

Вы можете использовать параметр generationConfig , чтобы определить отрицательный запрос, количество изображений, соотношение сторон выходного изображения, формат изображения и добавить водяной знак. Параметр safetySettings можно использовать для настройки фильтров безопасности и лиц.

Котлин

val imagenModel = Firebase.vertexAI.imagenModel(
  modelName = "imagen-3.0-generate-001",
  generationConfig = ImagenGenerationConfig(
    negativePrompt = "frogs",
    numberOfImages = 2,
    aspectRatio = ImagenAspectRatio.LANDSCAPE_16x9,
    imageFormat = ImagenImageFormat.jpeg(compressionQuality = 100),
    addWatermark = false
  ),
  safetySettings = ImagenSafetySettings(
    safetyFilterLevel = ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE,
    personFilterLevel = ImagenPersonFilterLevel.BLOCK_ALL
  )
)

Ява

GenerativeModel imagenModel = FirebaseVertexAI.getInstance().imagenModel(
    "imagen-3.0-generate-001",
    ImagenGenerationConfig.builder()
        .setNegativePrompt("frogs")
        .setNumberOfImages(2)
        .setAspectRatio(ImagenAspectRatio.LANDSCAPE_16x9)
        .setImageFormat(ImagenImageFormat.jpeg(100))
        .setAddWatermark(true)
        .build(),
    ImagenSafetySettings.builder()
        .setSafetyFilterLevel(ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE)
        .setPersonFilterLevel(ImagenPersonFilterLevel.BLOCK_ALL)
        .build()
);

После создания экземпляра ImagenModel вы можете генерировать изображения, вызвав generateImages :

Котлин

val imageResponse = imagenModel.generateImages(
  prompt = "An astronaut riding a horse",
)
val image = imageResponse.images.first
val bitmapImage = image.asBitmap()

Ява

CompletableFuture<GenerateContentResponse> futureResponse =
    imagenModel.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();
}

Следующие шаги