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


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

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

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

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



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

Доступно только при использовании 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(
        referenceImages = 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 = ((ImagenInlineImage) 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)

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



Передовые методы и ограничения

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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