На этой странице описано, как использовать возможности настройки Imagen для редактирования или создания изображений на основе указанного элемента управления с помощью SDK Firebase AI Logic .
Как это работает : Вы предоставляете текстовую подсказку и как минимум одно контрольное эталонное изображение (например, рисунок или изображение контура, полученное с помощью алгоритма Кэнни). Модель использует эти входные данные для генерации нового изображения на основе контрольных изображений.
Например, вы можете предоставить модели рисунок ракеты и луны, а также текстовую подсказку для создания акварельной картины на основе этого рисунка.
Типы контрольных эталонных изображений
В качестве эталонного изображения для контролируемой настройки может использоваться набросок , изображение контура по алгоритму Кэнни или сетка лица .
Набросок — это грубый, нарисованный от руки эскиз или контур, который задаёт модели базовую структуру, пространственное расположение и планировку. Текстовая подсказка определяет детали, цвет и текстуру для создаваемого изображения.
Пример: Вы предоставляете рисунок дома, дерева и солнца, а также текстовую подсказку, например: «Причудливая акварельная картина коттеджа с большим дубом рядом на рассвете». Затем модель сгенерирует изображение, соответствующее описанной сцене и повторяющее общую структуру вашего рисунка.
Изображение с эффектом Кэнни — это изображение, на котором алгоритм, а именно детектор краев Кэнни , применяется к исходному изображению для отображения краев объектов внутри изображения. Эти края помогают модели сохранять точную структуру объектов, изменяя при этом стиль, цвет или другие атрибуты, указанные в текстовом запросе.
Пример: У вас есть фотография собаки, сидящей на диване. Вы применяете детектор границ Кэнни к фотографии, чтобы получить изображение только контуров собаки и дивана. Затем вы используете эту карту границ в качестве контрольного изображения и текстовую подсказку, например: «фотография щенка золотистого ретривера на кожаном диване». Модель сгенерирует новую фотографию, которая точно соответствует позе оригинальной собаки и композиции дивана, но вместо оригинальных объектов на ней будут щенок золотистого ретривера и кожаный диван.
- Лицевая сетка — это изображение, которое помогает модели понять и воспроизвести конкретное лицо. Это цифровое представление человеческого лица в 3D, как правило, сеть взаимосвязанных точек (вершин) и треугольников, определяющих форму и контуры лица. Это предоставляет модели ключевые ориентиры (такие как глаза, нос и рот) и текстуры.
Прежде чем начать
| Доступно только при использовании API Vertex AI Gemini в качестве поставщика API. |
Если вы еще этого не сделали, пройдите руководство по началу работы , в котором описано, как настроить проект Firebase, подключить приложение к Firebase, добавить SDK, инициализировать бэкэнд-сервис для выбранного вами поставщика API и создать экземпляр ImagenModel .
Модели, поддерживающие эту возможность
Компания Imagen предлагает услуги по редактированию изображений в рамках своей модели capability :
-
imagen-3.0-capability-001
Обратите внимание, что для моделей Imagen global местоположение не поддерживается.
Отправьте запрос на контролируемую настройку.
В следующем примере показан управляемый запрос на настройку, который просит модель сгенерировать новое изображение на основе предоставленного эталонного изображения (в этом примере — рисунок космоса, например, ракеты и Луны). Поскольку эталонное изображение представляет собой приблизительный эскиз или контур, нарисованный от руки , используется тип управления CONTROL_TYPE_SCRIBBLE .
Если в качестве эталонного изображения используется изображение границ, полученное с помощью алгоритма Кэнни , или сетка лица , вы также можете использовать этот пример, но со следующими изменениями:
Если в качестве эталонного изображения используется изображение границ, полученное методом Кэнни , используйте тип управления
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(
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.
Создайте изображение, соответствующее подсказке и эскизам.
Стилизация фотографии человека с сохранением выражения лица.
Примеры непредусмотренных вариантов использования
Ниже приведён неполный список непредусмотренных вариантов использования настройки на основе управляющего элемента . Модель не обучена для этих вариантов использования и, вероятно, покажет плохие результаты.
Создайте изображение, используя стиль, указанный в подсказке.
Создайте изображение из текста, соответствующее определенному стилю, заданному эталонным изображением, с некоторым контролем над композицией изображения с помощью контрольного изображения.
Создайте изображение из текста, соответствующее определенному стилю, заданному эталонным изображением, с некоторым контролем над композицией изображения с помощью управляющего штриха.
Создайте изображение из текста, соответствующее определенному стилю, заданному эталонным изображением, с некоторым контролем над композицией изображения с помощью контрольного изображения. Человек на изображении имеет определенное выражение лица.
Стилизуйте фотографию, на которой изображены два или более человека, сохранив при этом их выражения лиц.
Стилизуйте фотографию домашнего животного и превратите её в рисунок. Сохраните или уточните композицию изображения (например, акварель).