Vertex AI в Firebase SDK предоставляет вам доступ к моделям Imagen 3 (через Imagen API ), чтобы вы могли создавать изображения из текстовой подсказки. Благодаря этой возможности вы можете делать такие вещи, как:
- Генерируйте изображения из подсказок, написанных на естественном языке.
- Создавайте изображения в широком диапазоне форматов и стилей.
- Рендеринг текста в изображениях
Обратите внимание, что Vertex AI в Firebase пока не поддерживает все функции, доступные для моделей Imagen . Подробную информацию см. в разделе «Поддерживаемые возможности и функции» далее на этой странице.
Перейти к коду для ввода только текста
Прежде чем начать
Если вы еще этого не сделали, прочтите руководство по началу работы , в котором описывается, как настроить проект Firebase, подключить приложение к Firebase, добавить SDK, инициализировать службу Vertex AI и создать экземпляр ImagenModel
.
Убедитесь, что вы используете как минимум следующие версии библиотеки Firebase:
iOS+ : v11.9.0+ | Android : v16.2.0+ ( BoM : v33.10.0+) | Интернет : v11.4.1+ | Flutter : v1.4.0+ (BoM: v3.8.0+)
Модели, поддерживающие эту возможность
Генерация изображений поддерживается моделями Imagen 3 . Скоро появится поддержка генерации изображений моделями Gemini 2.0 .
Генерация изображений из текстового ввода
Вы можете попросить модель Imagen генерировать изображения, запросив текст. Вы можете создать одно изображение или несколько изображений .
Создать одно изображение из текстового ввода
Прежде чем приступать к работе с этим примером, убедитесь, что вы завершили раздел « Перед началом работы» данного руководства.
Вы можете попросить модель Imagen сгенерировать одно изображение, запросив текст.
Обязательно создайте экземпляр ImagenModel
и вызовите generateImages
.
Быстрый
import FirebaseVertexAI
// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()
// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
let model = vertex.imagenModel(modelName: "imagen-3.0-generate-002")
// Provide an image generation prompt
let prompt = "An astronaut riding a horse"
// To generate an image, call `generateImages` with the text prompt
let response = try await model.generateImages(prompt: prompt)
// Handle the generated image
guard let image = response.images.first else {
fatalError("No image in the response.")
}
let uiImage = UIImage(data: image.data)
Kotlin
// Using Imagen with Vertex AI in Firebase is in public preview
// It requires opt-in to use the API
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
val imagenModel = Firebase.vertexAI.imagenModel("imagen-3.0-generate-002")
// Provide an image generation prompt
val prompt = "An astronaut riding a horse"
// To generate an image, call `generateImages` with the text prompt
val imageResponse = imagenModel.generateImages(prompt)
// Handle the generated image
val image = imageResponse.images.first()
val bitmapImage = image.asBitmap()
}
Java
// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
ImagenModel imagenModel = FirebaseVertexAI.getInstance().imagenModel(
/* modelName */ "imagen-3.0-generate-002");
ImagenModelFutures model = ImagenModelFutures.from(imagenModel);
// Provide an image generation prompt
String prompt = "An astronaut riding a horse";
// To generate an image, call `generateImages` with the text prompt
Futures.addCallback(model.generateImages(prompt), new FutureCallback<ImagenGenerationResponse<ImagenInlineImage>>() {
@Override
public void onSuccess(ImagenGenerationResponse<ImagenInlineImage> 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
import { initializeApp } from "firebase/app";
import { getVertexAI, getImagenModel } from "firebase/vertexai";
// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Vertex AI service
const vertexAI = getVertexAI(firebaseApp);
// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(
vertexAI,
{
model: "imagen-3.0-generate-002"
}
);
// Provide an image generation prompt
const prompt = "An astronaut riding a horse.";
// To generate an image, call `generateImages` with the text prompt
const response = await imagenModel.generateImages(prompt)
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason) {
console.log(response.filteredReason);
}
if (response.images.length == 0) {
throw new Error("No images in the response.")
}
const image = response.images[0];
Dart
import 'package:firebase_vertexai/firebase_vertexai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
final model =
FirebaseVertexAI.instance.imagenModel(model: 'imagen-3.0-generate-002');
// Provide an image generation prompt
const prompt = 'An astronaut riding a horse.';
// To generate an image, call `generateImages` with the text prompt
final response = await model.generateImages(prompt);
if (response.images.isNotEmpty) {
final image = response.images[0];
// Process the image
} else {
// Handle the case where no images were generated
print('Error: No images were generated.');
}
Узнайте, как выбрать модель и, при необходимости, местоположение, подходящее для вашего варианта использования и приложения.
Создание нескольких изображений из текстового ввода
Прежде чем приступать к работе с этим примером, убедитесь, что вы завершили раздел « Перед началом работы» данного руководства.
По умолчанию модели Imagen 3 генерируют только одно изображение за каждый запрос. Однако вы можете попросить модель Imagen генерировать несколько изображений для каждого запроса, предоставив ImagenGenerationConfig
при создании экземпляра ImagenModel
.
Обязательно создайте экземпляр ImagenModel
и вызовите generateImages
.
Быстрый
import FirebaseVertexAI
// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()
// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
let model = vertex.imagenModel(
modelName: "imagen-3.0-generate-002",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/vertex-ai/model-parameters
generationConfig: ImagenGenerationConfig(numberOfImages: 4)
)
// Provide an image generation prompt
let prompt = "An astronaut riding a horse"
// To generate images, call `generateImages` with the text prompt
let response = try await model.generateImages(prompt: prompt)
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if let filteredReason = response.filteredReason {
print(filteredReason)
}
// Handle the generated images
let uiImages = response.images.compactMap { UIImage(data: $0.data) }
Kotlin
// Using Imagen with Vertex AI in Firebase is in public preview
// It requires opt-in to use the API
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
val imagenModel = Firebase.vertexAI.imagenModel(
modelName = "imagen-3.0-generate-002",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/vertex-ai/model-parameters
generationConfig = ImagenGenerationConfig(numberOfImages = 4)
)
// Provide an image generation prompt
val prompt = "An astronaut riding a horse"
// To generate images, call `generateImages` with the text prompt
val imageResponse = imagenModel.generateImages(prompt)
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (imageResponse.filteredReason != null) {
Log.d(TAG, "FilteredReason: ${imageResponse.filteredReason}")
}
for (image in imageResponse.images) {
val bitmap = image.asBitmap()
// Use the bitmap to display the image in your UI
}
}
Java
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/vertex-ai/model-parameters
ImagenGenerationConfig imagenGenerationConfig = new ImagenGenerationConfig.Builder()
.setNumberOfImages(4)
.build();
// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
ImagenModel imagenModel = FirebaseVertexAI.getInstance().imagenModel(
/* modelName */ "imagen-3.0-generate-002",
/* imageGenerationConfig */ imagenGenerationConfig);
ImagenModelFutures model = ImagenModelFutures.from(imagenModel);
// Provide an image generation prompt
String prompt = "An astronaut riding a horse";
// To generate images, call `generateImages` with the text prompt
Futures.addCallback(model.generateImages(prompt), new FutureCallback<ImagenGenerationResponse<ImagenInlineImage>>() {
@Override
public void onSuccess(ImagenGenerationResponse<ImagenInlineImage> result) {
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (result.getFilteredReason() != null){
Log.d("TAG", "FilteredReason: " + result.getFilteredReason());
}
// Handle the generated images
List<ImagenInlineImage> images = result.getImages();
for (ImagenInlineImage image : images) {
Bitmap bitmap = image.asBitmap();
// Use the bitmap to display the image in your UI
}
}
@Override
public void onFailure(Throwable t) {
// ...
}
}, Executors.newSingleThreadExecutor());
Web
import { initializeApp } from "firebase/app";
import { getVertexAI, getImagenModel } from "firebase/vertexai";
// TODO(developer) Replace the following with your app's Firebase configuration
// See: https://firebase.google.com/docs/web/learn-more#config-object
const firebaseConfig = {
// ...
};
// Initialize FirebaseApp
const firebaseApp = initializeApp(firebaseConfig);
// Initialize the Vertex AI service
const vertexAI = getVertexAI(firebaseApp);
// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(
vertexAI,
{
model: "imagen-3.0-generate-002",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/vertex-ai/model-parameters
generationConfig: {
numberOfImages: 4
}
}
);
// Provide an image generation prompt
const prompt = "An astronaut riding a horse.";
// To generate images, call `generateImages` with the text prompt
const response = await imagenModel.generateImages(prompt)
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason) {
console.log(response.filteredReason);
}
if (response.images.length == 0) {
throw new Error("No images in the response.")
}
const images = response.images[0];
Dart
import 'package:firebase_vertexai/firebase_vertexai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
final model = FirebaseVertexAI.instance.imagenModel(
model: 'imagen-3.0-generate-002',
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/vertex-ai/model-parameters
generationConfig: ImagenGenerationConfig(numberOfImages: 4),
);
// Provide an image generation prompt
const prompt = 'An astronaut riding a horse.';
// To generate images, call `generateImages` with the text prompt
final response = await model.generateImages(prompt);
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (response.filteredReason != null) {
print(response.filteredReason);
}
if (response.images.isNotEmpty) {
final images = response.images;
for(var image in images) {
// Process the image
}
} else {
// Handle the case where no images were generated
print('Error: No images were generated.');
}
Узнайте, как выбрать модель и, при необходимости, местоположение, подходящее для вашего варианта использования и приложения.
Поддерживаемые функции и требования
Модели Imagen 3 предлагают множество функций, связанных с созданием изображений. В этом разделе описывается, что поддерживается при использовании моделей с Vertex AI в Firebase .
Поддерживаемые возможности и функции
Vertex AI в Firebase поддерживает эти функции моделей Imagen 3 .
Создание людей и лиц (учитывая, что ваш проект Firebase имеет одобрение Google Cloud )
Генерация текста внутри сгенерированных изображений
Добавление водяного знака к созданным изображениям
Настройка параметров создания изображений , таких как количество сгенерированных изображений, соотношение сторон и водяные знаки.
Настройка параметров безопасности
Vertex AI в Firebase не поддерживает эти расширенные функции моделей Imagen 3 .
Обратите внимание, что большинство этих функций требуют присутствия в утвержденном списке пользователей даже при использовании моделей Imagen на стороне сервера.
Функции редактирования или манипулирования изображениями, включая масштабирование изображений.
Включение изображений в запрос к модели (как при обучении по нескольким кадрам)
Проверка цифровых водяных знаков с помощью SDK
Если вы хотите убедиться, что изображение имеет водяной знак, вы можете загрузить изображение в Vertex AI Studio, используя вкладку «Медиа» .Генерация «живых изображений» из текста (генерация MP4)
Создание изображений с использованием предопределенного стиля
Включение
includeSafetyAttributes
означает, чтоsafetyAttributes.categories
иsafetyAttributes.scores
не могут быть возвращены.Отключение улучшения подсказки (параметр
enhancePrompt
). Это означает, что инструмент переписывания подсказки на основе LLM всегда будет автоматически добавлять больше деталей к предоставленной подсказке, чтобы предоставлять изображения более высокого качества, которые лучше отражают предоставленную подсказку.Запись сгенерированного изображения непосредственно в Google Cloud Storage как часть ответа модели (параметр
storageUri
). Вместо этого изображения всегда возвращаются в ответе как байты изображения в кодировке Base64.
Если вы хотите загрузить сгенерированное изображение в Cloud Storage , вы можете использовать Cloud Storage for Firebase .
Технические характеристики и ограничения
Лимиты (за запрос) | Изображение 3 | Изображение 3 Быстрое |
---|---|---|
Максимальное количество входных токенов | 480 жетонов | 480 жетонов |
Максимальное количество выходных изображений | 4 изображения | 4 изображения |
Поддерживаемое разрешение выходного изображения (пикселей) |
|
|
Что еще вы можете сделать?
- Начните думать о подготовке к работе, включая настройку Firebase App Check , чтобы защитить API-интерфейсы, которые вы используете в своем приложении, от злоупотреблений со стороны неавторизованных клиентов. Также обязательно ознакомьтесь с производственным контрольным списком .
Узнайте, как контролировать создание контента
- Понимание структуры подсказок , включая лучшие практики, стратегии и примеры подсказок.
- Настройте параметры модели Imagen , такие как соотношение сторон, генерация людей и водяные знаки.
- Используйте настройки безопасности , чтобы настроить вероятность получения ответов, которые могут быть расценены как вредные.
Узнайте больше о поддерживаемых моделях
Узнайте о моделях, доступных для различных вариантов использования , а также об их квотах и ценах .Оставьте отзыв о своем опыте использования Vertex AI в Firebase.