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

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

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

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

  • Если ваше эталонное изображение является изображением Canny Edge , используйте тип управления CONTROL_TYPE_CANNY .

  • Если ваше исходное изображение представляет собой сетку лица , используйте тип элемента управления CONTROL_TYPE_FACE_MESH . Этот элемент управления можно использовать только при настройке темы «Люди» .

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

Быстрый

Редактирование изображений с помощью моделей 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 controlReference = ImagenControlReference(
        image = referenceImage,
        referenceID = 1,
        controlType = CONTROL_TYPE_SCRIBBLE
    )

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

    // Use the editImage API to perform the controlled customization.
    // Pass the list of references, the prompt, and an editing configuration.
    val editedImage = model.editImage(
        references = listOf(controlReference),
        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.
ImagenControlReference controlReference = new ImagenControlReference.Builder()
        .setImage(referenceImage)
        .setReferenceID(1)
        .setControlType(CONTROL_TYPE_SCRIBBLE)
        .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 flying through outer space arranged like the space scribble[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 controlled customization.
// Pass the list of references, the prompt, and an editing configuration.
Futures.addCallback(model.editImage(Collections.singletonList(controlReference), 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 control reference using the reference image.
final controlReference = ImagenControlReference(
  image: referenceImage,
  referenceId: 1,
    controlType: ImagenControlType.scribble,
);

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

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

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

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

Вариант использования Справочные изображения Шаблон запроса Пример
Управляемая настройка Карта каракулей (1) Создайте изображение, совпадающее с scribble map [1] чтобы оно соответствовало описанию: ${STYLE_PROMPT} ${PROMPT} . Создайте изображение, соответствующее scribble map [1] и описанию: Изображение должно быть выполнено в стиле импрессионистской масляной живописи с плавными мазками. Изображение должно создавать естественное освещение и чёткие мазки. Вид автомобиля сбоку. Автомобиль припаркован на мокрой, отражающей поверхности дороги, а городские огни отражаются в лужах.
Управляемая настройка Изображение разумного управления (1) Создайте изображение, выровненное с edge map [1] чтобы оно соответствовало описанию: ${STYLE_PROMPT} ${PROMPT} Создайте изображение, выровненное по edge map [1] чтобы оно соответствовало описанию: Изображение должно быть выполнено в стиле импрессионистской масляной живописи с плавными мазками. Оно должно создавать естественное освещение и чёткие мазки. Вид автомобиля сбоку. Автомобиль припаркован на мокрой, отражающей поверхности дороги, а городские огни отражаются в лужах.
Стилизация изображения человека с помощью FaceMesh Изображение объекта (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-мультфильма с размытым фоном. Милый и очаровательный персонаж с улыбающимся лицом, смотрящий в камеру, пастельные тона...
Стилизация изображения человека с помощью FaceMesh Изображение объекта (1-3)

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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