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