Настройте изображения на основе указанного стиля с помощью Imagen


На этой странице описывается, как использовать возможности настройки Imagen для редактирования или создания изображений на основе указанного стиля с использованием Firebase AI Logic SDK.

Как это работает : вы предоставляете текстовую подсказку и как минимум одно эталонное изображение, демонстрирующее определённый стиль (например, узор, текстуру или стиль дизайна). Модель использует эти входные данные для генерации нового изображения на основе указанного стиля эталонных изображений.

Например, вы можете создать новое изображение кухни на основе предоставленного вами изображения из популярного розничного каталога.

Перейти к коду



Прежде чем начать

Доступно только при использовании API Vertex AI Gemini в качестве поставщика API.

Если вы еще этого не сделали, ознакомьтесь с руководством по началу работы , в котором описывается, как настроить проект Firebase, подключить приложение к Firebase, добавить SDK, инициализировать внутреннюю службу для выбранного поставщика API и создать экземпляр ImagenModel .

Модели, поддерживающие эту возможность

Imagen предлагает редактирование изображений с помощью своей модели capability :

  • imagen-3.0-capability-001

Обратите внимание, что для моделей Imagen global местоположение не поддерживается.

Отправить запрос на настройку стиля

В следующем примере показан запрос на настройку стиля, который просит модель сгенерировать новое изображение со стилем предоставленного эталонного изображения (в данном примере «Звездная ночь» Ван Гога).

Ознакомьтесь с шаблонами подсказок далее на этой странице, чтобы узнать о написании подсказок и о том, как использовать в них справочные изображения.

Быстрый

Редактирование изображений с помощью моделей Imagen не поддерживается в Swift. Следите за обновлениями в этом году!

Kotlin

// Using this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun customizeImage() {
    // Initialize the Vertex AI Gemini API backend service
    // Optionally specify the location to access the model (for example, `us-central1`)
    val ai = Firebase.ai(backend = GenerativeBackend.vertexAI(location = "us-central1"))

    // Create an `ImagenModel` instance with an Imagen "capability" model
    val model = ai.imagenModel("imagen-3.0-capability-001")

    // This example assumes 'referenceImage' is a pre-loaded Bitmap.
    // In a real app, this might come from the user's device or a URL.
    val referenceImage: Bitmap = TODO("Load your reference image Bitmap here")

    // Define the style reference using the reference image.
    val styleReference = ImagenStyleReference(
        image = referenceImage,
        referenceID = 1,
        description = "Van Gogh style"
    )

    // Provide a prompt that describes the final image.
    // The "[1]" links the prompt to the style reference with ID 1.
    val prompt = "A cat flying through outer space, in the Van Gogh style[1]"

    // Use the editImage API to perform the style customization.
    // Pass the list of references, the prompt, and an editing configuration.
    val editedImage = model.editImage(
        references = listOf(styleReference),
        prompt = prompt,
        config = ImagenEditingConfig(
            editSteps = 50 // Number of editing steps, a higher value can improve quality
        )
    )

    // Process the result
}

Java

// Initialize the Vertex AI Gemini API backend service
// Optionally specify the location to access the model (for example, `us-central1`)
// Create an `ImagenModel` instance with an Imagen "capability" model
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.vertexAI("us-central1"))
        .imagenModel(
                /* modelName */ "imagen-3.0-capability-001");

ImagenModelFutures model = ImagenModelFutures.from(imagenModel);

// This example assumes 'referenceImage' is a pre-loaded Bitmap.
// In a real app, this might come from the user's device or a URL.
Bitmap referenceImage = null; // TODO("Load your image Bitmap here");

// Define the style reference using the reference image.
ImagenStyleReference subjectReference = new ImagenStyleReference.Builder()
        .setImage(referenceImage)
        .setReferenceID(1)
        .setDescription("Van Gogh style")
        .build();

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
String prompt = "A cat flying through outer space, in the Van Gogh style[1]";

// Define the editing configuration.
ImagenEditingConfig imagenEditingConfig = new ImagenEditingConfig.Builder()
        .setEditSteps(50) // Number of editing steps, a higher value can improve quality
        .build();

// Use the editImage API to perform the style customization.
// Pass the list of references, the prompt, and the editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(styleReference), prompt, imagenEditingConfig), new FutureCallback<ImagenGenerationResponse>() {
    @Override
    public void onSuccess(ImagenGenerationResponse 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());

Web

Редактирование изображений с помощью моделей Imagen не поддерживается в веб-приложениях. Следите за обновлениями позже в этом году!

Dart

import 'dart:typed_data';
import 'package:firebase_ai/firebase_ai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';

// Initialize FirebaseApp
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

// Initialize the Vertex AI Gemini API backend service
// Optionally specify a location to access the model (for example, `us-central1`)
final ai = FirebaseAI.vertexAI(location: 'us-central1');

// Create an `ImagenModel` instance with an Imagen "capability" model
final model = ai.imagenModel(model: 'imagen-3.0-capability-001');

// This example assumes 'referenceImage' is a pre-loaded Uint8List.
// In a real app, this might come from the user's device or a URL.
final Uint8List referenceImage = Uint8List(0); // TODO: Load your reference image data here

// Define the style reference using the reference image.
final styleReference = ImagenStyleReference(
  image: referenceImage,
  referenceId: 1,
  description: 'Van Gogh style',
);

// Provide a prompt that describes the final image.
// The "[1]" links the prompt to the style reference with ID 1.
final prompt = "A cat flying through outer space, in the Van Gogh style[1]";

try {
  // Use the editImage API to perform the style customization.
  // Pass the list of references, the prompt, and an editing configuration.
  final response = await model.editImage(
    [styleReference],
    prompt,
    config: ImagenEditingConfig(
      editSteps: 50, // Number of editing steps, a higher value can improve quality
    ),
  );

  // Process the result.
  if (response.images.isNotEmpty) {
    final editedImage = response.images.first.bytes;
    // Use the editedImage (a Uint8List) to display the image, save it, etc.
    print('Image successfully generated!');
  } else {
    // Handle the case where no images were generated.
    print('Error: No images were generated.');
  }
} catch (e) {
  // Handle any potential errors during the API call.
  print('An error occurred: $e');
}

Единство

Редактирование изображений с помощью моделей Imagen не поддерживается в Unity. Следите за обновлениями позже в этом году!

Шаблоны подсказок

В запросе вы предоставляете эталонные изображения (до 4), определяя объект ImagenStyleReference , в котором указываете идентификатор эталонного изображения (и, при необходимости, описание стиля). Обратите внимание, что несколько изображений могут иметь один и тот же идентификатор (например, несколько фотографий одного и того же узора).

Затем при написании подсказки вы ссылаетесь на эти идентификаторы. Например, [1] используется в подсказке для ссылки на изображения с идентификатором 1 Если вы предоставляете описание темы, вы также можете включить его в подсказку, чтобы её было легче читать человеку.

В следующей таблице приведены шаблоны подсказок, которые могут стать отправной точкой для написания подсказок для настройки на основе стиля.

Вариант использования Справочные изображения Шаблон запроса Пример
Стиль объекта Изображение объекта (1-4) Создайте изображение в STYLE_DESCRIPTION [1] на основе следующей подписи: IMAGE_DESCRIPTION . Создайте изображение в neon sign style [1] на основе следующей надписи: a sign saying have a great day .
Стилизация изображения человека без ввода сетки лица Изображение объекта (1-4) Создайте изображение по теме SUBJECT_DESCRIPTION [1] соответствующее описанию: портрет SUBJECT_DESCRIPTION [1] ${PROMPT} Создайте изображение a woman with short hair[1] , соответствующее описанию: портрет a woman with short hair[1] в стиле 3D-мультфильма с размытым фоном. Милый и очаровательный персонаж с улыбающимся лицом, смотрящий в камеру, пастельные тона...
Стилизация изображения человека с помощью ввода сетки лица Изображение объекта (1-3)

Изображение управления Facemesh (1)
Создайте изображение о SUBJECT_DESCRIPTION [1] в позе CONTROL_IMAGE [2] чтобы оно соответствовало описанию: портрет SUBJECT_DESCRIPTION [1] ${PROMPT} Создайте изображение a woman with short hair [1] в позе control image [2] , соответствующее описанию: портрет a woman with short hair [1] в стиле 3D-мультфильма с размытым фоном. Милый и очаровательный персонаж с улыбающимся лицом, смотрящий в камеру, пастельные тона...



Лучшие практики и ограничения

Варианты использования

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

Мы рекомендуем использовать эту возможность для предполагаемых вариантов использования, поскольку мы обучили модель именно на них и ожидаем хороших результатов. И наоборот, если вы заставляете модель выполнять действия, выходящие за рамки предполагаемых вариантов использования, следует ожидать плохих результатов.

Предполагаемые варианты использования

Ниже приведены предполагаемые варианты использования настройки на основе стиля :

  • Создайте изображение на основе введенного текста, которое будет соответствовать определенному стилю, предоставленному эталонным изображением.

  • Изменить фотографию человека.

  • Измените фотографию человека и сохраните выражение его лица.

Примеры непреднамеренного использования

Ниже представлен неполный список непредусмотренных вариантов использования настройки на основе стиля . Модель не обучена для этих вариантов использования и, скорее всего, будет давать неудовлетворительные результаты.

  • Создайте изображение из текста, используя эталонное изображение, с целью иметь определенный уровень контроля над композицией, созданной на основе эталонного изображения.

  • Создайте изображение человека на основе эталонного изображения, на котором есть человек с определенным выражением лица.

  • Поместите двух людей в разные сцены, сохраните их индивидуальность и укажите стиль выходного изображения (например, масляная живопись), используя эталонное изображение.

  • Стилизуйте фотографию домашнего животного и превращайте ее в рисунок, сохраняя или уточняя композицию изображения.

  • Поместите продукт, например печенье или диван, в разные сцены с разными углами обзора и соблюдая определенный стиль изображения (например, фотореалистичное с определенными цветами, стилями освещения или анимацией).