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

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

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

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

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

Быстрый

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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