На этой странице описано, как использовать возможности настройки Imagen для редактирования или создания изображений на основе заданной тематики с помощью SDK Firebase AI Logic .
Как это работает : Вы предоставляете текстовую подсказку и как минимум одно эталонное изображение, демонстрирующее конкретный объект (например, продукт, человека или домашнее животное). Модель использует эти входные данные для генерации нового изображения на основе указанного объекта на эталонных изображениях.
Например, вы можете попросить модель применить мультяшный стиль к фотографии ребенка или изменить цвет велосипеда на снимке.
Прежде чем начать
| Доступно только при использовании 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(
referenceImages = 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 = ((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 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-мультяшном стиле с размытым фоном. Милый и очаровательный персонаж с улыбающимся лицом, смотрящий в камеру, пастельные тона... |
Передовые методы и ограничения
Если в качестве объекта съёмки вы используете человека, мы рекомендуем, чтобы лицо на эталонном изображении обладало следующими свойствами:
- Расположен в центре и занимает не менее половины всего изображения.
- В режиме фронтального обзора самолет вращается во всех направлениях (крен, тангаж и рыскание).
- Не закрывается такими предметами, как солнцезащитные очки или маски.
Варианты использования
Возможность настройки предлагает подсказки в свободном стиле, что может создать впечатление, будто модель способна на большее, чем та, на что она обучена. В следующих разделах описаны предполагаемые варианты использования настройки, а также приведены неполные примеры непредусмотренных вариантов использования.
Мы рекомендуем использовать эту функцию для предполагаемых сценариев применения, поскольку мы обучили модель на этих сценариях и ожидаем хороших результатов. И наоборот, если вы заставите модель делать что-то, выходящее за рамки предполагаемых сценариев использования, следует ожидать плохих результатов.
Предполагаемые варианты использования
Ниже перечислены предполагаемые сценарии использования персонализации на основе заданной тематики :
Стилизируйте фотографию человека.
Стилизуйте фотографию человека, сохранив при этом выражение его лица.
(Низкий уровень успеха) Разместите товар, например, диван или печенье, в разных сценах с разными ракурсами.
Создавайте варианты продукта, которые не сохраняют точные детали.
Стилизация фотографии человека с сохранением выражения лица.
Примеры непредусмотренных вариантов использования
Ниже приведён неполный список непредусмотренных вариантов использования персонализации на основе заданной темы . Модель не обучена для этих сценариев использования и, вероятно, покажет неудовлетворительные результаты.
Разместите двух или более человек в разных сценах, сохранив при этом их личности.
Разместите двух или более человек в разных сценах, сохраняя при этом их личности и указывая стиль выходного изображения, используя в качестве входных данных для стиля пример изображения.
Стилизуйте фотографию двух или более человек, сохранив при этом их индивидуальность.
Поместите питомца в разные сцены, сохраняя при этом его индивидуальность.
Стилизуйте фотографию домашнего животного и превратите её в рисунок.
Стилизуйте фотографию домашнего животного и превратите ее в рисунок, сохранив или уточнив стиль изображения (например, акварель).
Поместите домашнее животное и человека в другую сцену, сохранив при этом индивидуальность каждого из них.
Стилизуйте фотографию домашнего животного и одного или нескольких человек и превратите её в рисунок.
Разместите два товара в разных сценах с разных ракурсов.
Разместите товар, например, печенье или диван, в разных сценах с разных ракурсов и в соответствии с определенным стилем изображения (например, фотореалистичным с использованием определенных цветов, стилей освещения или анимации).
Поместите продукт в другую сцену, сохранив при этом конкретную композицию сцены, заданную контрольным изображением.
Разместите два товара в разных сценах с разными ракурсами, используя в качестве исходного изображения определенное изображение (например, фотореалистичное с заданными цветами, стилем освещения или анимацией).
Разместите два продукта в разных сценах, сохраняя при этом конкретную композицию сцены, заданную контрольным изображением.