Настройте изображения на основе указанной темы с помощью 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 местоположение не поддерживается.

Отправить запрос на настройку темы

В следующем примере показан запрос на настройку объекта, который предлагает модели сгенерировать новое изображение на основе предоставленного эталонного изображения (в данном примере — кошки). Поскольку кошка — это животное , используется тип объекта ImagenSubjectReferenceType.ANIMAL .

Если вашей темой является человек или продукт , вы также можете использовать этот пример, но со следующими изменениями:

  • Если объектом съёмки является человек , используйте тип объекта ImagenSubjectReferenceType.PERSON . Вы можете отправлять этот тип запроса с контрольным изображением сетки лица или без него для дальнейшего управления процессом генерации изображения.

  • Если ваша тема — продукт , используйте тип темы ImagenSubjectReferenceType.PRODUCT .

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

Быстрый

Редактирование изображений с помощью моделей 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 subject reference using the reference image.
    val subjectReference = ImagenSubjectReference(
        image = referenceImage,
        referenceID = 1,
        description = "cat",
        subjectType = ImagenSubjectReferenceType.ANIMAL
    )

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

    // Use the editImage API to perform the subject customization.
    // Pass the list of references, the prompt, and an editing configuration.
    val editedImage = model.editImage(
        references = listOf(subjectReference),
        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 subject reference using the reference image.
ImagenSubjectReference subjectReference = new ImagenSubjectReference.Builder()
        .setImage(referenceImage)
        .setReferenceID(1)
        .setDescription("cat")
        .setSubjectType(ImagenSubjectReferenceType.ANIMAL)
        .build();

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

// 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 subject customization.
// Pass the list of references, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(subjectReference), 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 subject reference using the reference image.
final subjectReference = ImagenSubjectReference(
  image: referenceImage,
  referenceId: 1,
  description: 'cat',
  subjectType: ImagenSubjectReferenceType.animal,
);

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

try {
  // Use the editImage API to perform the subject customization.
  // Pass the list of references, the prompt, and an editing configuration.
  final response = await model.editImage(
    [subjectReference],
    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), определяя объект ImagenSubjectReference , в котором указываете идентификатор справочного изображения (и, при необходимости, описание темы). Обратите внимание, что несколько изображений могут иметь один и тот же идентификатор (например, несколько фотографий одного и того же кота).

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

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

Вариант использования Справочные изображения Шаблон запроса Пример
Стилизация изображения продукта - реклама Изображение объекта (до 4) Создайте изображение по теме SUBJECT_DESCRIPTION [1] , соответствующее описанию: ${PROMPT}

Создайте изображение о Luxe Elixir hair oil, golden liquid in glass bottle [1] соответствующее описанию: Изображение крупным планом в высоком ключе женской руки, держащей Luxe Elixir hair oil, golden liquid in glass bottle [1] на чистом белом фоне. Рука женщины хорошо освещена, и фокус на флаконе чёткий, с небольшой глубиной резкости, размывающей фон и подчёркивающей продукт. Мягкое рассеянное освещение создаёт лёгкое свечение вокруг флакона и руки. Общая композиция проста и элегантна, подчёркивая роскошную привлекательность продукта.

Стилизация изображения продукта - изменение атрибутов Изображение объекта (до 4) Сгенерировать изображение SUBJECT_DESCRIPTION , но ${PROMPT}

Создайте изображение Seiko watch [1] , но синего цвета .

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

Изображение управления сеткой лица (1)
Создайте изображение SUBJECT_DESCRIPTION [1] с Face mesh from the control image [2] . ${PROMPT} Создайте изображение the person [1] с помощью face mesh from the control image [2] . Человек должен смотреть прямо перед собой с нейтральным выражением лица. Фон должен быть...
Стилизация изображения человека с помощью ввода сетки лица Изображение объекта (до 3)

Изображение управления сеткой лица (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-мультфильма с размытым фоном. Милый и очаровательный персонаж с улыбающимся лицом, смотрящий в камеру, пастельные тона...
Стилизация изображения человека с помощью ввода сетки лица Изображение объекта (до 3)

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



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

Если в качестве объекта съемки вы используете человека, мы рекомендуем, чтобы лицо на вашем контрольном изображении обладало следующими свойствами:

  • Расположен в центре и занимает не менее половины всего изображения
  • Вращается в фронтальном положении во всех направлениях (крен, тангаж и рыскание)
  • Не закрывается предметами, такими как солнцезащитные очки или маски

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

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

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

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

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

  • Стилизуйте фотографию человека.

  • Стилизуйте фотографию человека, сохранив выражение его лица.

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

  • Создавайте вариации продукта, не сохраняющие точные детали.

  • Стилизуйте фотографию человека, сохранив выражение лица.

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

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

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

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

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

  • Поместите питомца в разные сцены, сохраняя при этом его индивидуальность.

  • Стилизуем фотографию домашнего животного и превращаем ее в рисунок.

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

  • Поместите домашнее животное и человека в разные сцены, сохранив личности обоих.

  • Стилизуйте фотографию домашнего животного и одного или нескольких людей и превратите ее в рисунок.

  • Разместите два продукта в разных сценах и под разными углами.

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

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

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

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