Firebase AI Logic SDKs предоставляют вам доступ к моделям Imagen 3 (через Imagen API ), чтобы вы могли генерировать изображения из текстового запроса. С помощью этой возможности вы можете делать следующее:
- Генерируйте изображения на основе подсказок, написанных на естественном языке.
- Создавайте изображения в широком диапазоне форматов и стилей
- Отображение текста в изображениях
Обратите внимание, что Firebase AI Logic пока не поддерживает все функции, доступные для моделей Imagen . Узнайте больше в разделе Поддерживаемые возможности и функции далее на этой странице.
Перейти к коду для ввода только текста
Прежде чем начать
Щелкните своего поставщика API Gemini , чтобы просмотреть специфичный для этого поставщика контент и код на этой странице. |
Если вы еще этого не сделали, ознакомьтесь с руководством по началу работы , в котором описывается, как настроить проект Firebase, подключить приложение к Firebase, добавить SDK, инициализировать внутреннюю службу для выбранного поставщика API и создать экземпляр ImagenModel
.
Модели, поддерживающие эту возможность
Генерация изображений поддерживается моделями Imagen 3 .
Обратите внимание, что Firebase AI Logic также поддерживает генерацию изображений с помощью моделей Gemini — документация появится скоро!
Генерация изображений из текстового ввода
Вы можете попросить модель Imagen сгенерировать изображения, используя текстовые подсказки. Вы можете сгенерировать одно изображение или несколько изображений .
Сгенерировать одно изображение из текстового ввода
Прежде чем приступить к работе с этим примером, выполните действия, описанные в разделе «Перед началом работы» данного руководства, чтобы настроить свой проект и приложение. В этом разделе вы также нажмете кнопку для выбранного вами поставщика API Gemini , чтобы увидеть на этой странице контент, специфичный для этого поставщика . |
Вы можете попросить модель Imagen сгенерировать одно изображение, отправив ей текстовую подсказку.
Обязательно создайте экземпляр ImagenModel
и вызовите generateImages
.
Быстрый
import FirebaseAI
// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create an `ImagenModel` instance with a model that supports your use case
let model = ai.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 this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
// Initialize the Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
val imagenModel = Firebase.ai(backend = GenerativeBackend.googleAI()).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 Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.googleAI()).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 { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// 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 Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(ai, { 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_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 Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model =
FirebaseAI.googleAI().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 пока не поддерживается для Unity, но проверьте позже!
Узнайте, как выбрать модель , подходящую для вашего варианта использования и приложения.
Генерация нескольких изображений из текстового ввода
Прежде чем приступить к работе с этим примером, выполните действия, описанные в разделе «Перед началом работы» данного руководства, чтобы настроить свой проект и приложение. В этом разделе вы также нажмете кнопку для выбранного вами поставщика API Gemini , чтобы увидеть на этой странице контент, специфичный для этого поставщика . |
По умолчанию модели Imagen 3 генерируют только одно изображение на запрос. Однако вы можете попросить модель Imagen генерировать несколько изображений на запрос, предоставив ImagenGenerationConfig
при создании экземпляра ImagenModel
.
Обязательно создайте экземпляр ImagenModel
и вызовите generateImages
.
Быстрый
import FirebaseAI
// Initialize the Gemini Developer API backend service
let ai = FirebaseAI.firebaseAI(backend: .googleAI())
// Create an `ImagenModel` instance with a model that supports your use case
let model = ai.imagenModel(
modelName: "imagen-3.0-generate-002",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/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 this SDK to access Imagen models is a Preview release and requires opt-in
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
// Initialize the Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
val imagenModel = Firebase.ai(backend = GenerativeBackend.googleAI()).imagenModel(
modelName = "imagen-3.0-generate-002",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/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/ai-logic/model-parameters
ImagenGenerationConfig imagenGenerationConfig = new ImagenGenerationConfig.Builder()
.setNumberOfImages(4)
.build();
// Initialize the Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
ImagenModel imagenModel = FirebaseAI.getInstance(GenerativeBackend.googleAI()).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 { getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";
// 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 Gemini Developer API backend service
const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });
// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(
ai,
{
model: "imagen-3.0-generate-002",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/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_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 Gemini Developer API backend service
// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model =
FirebaseAI.googleAI().imagenModel(
model: 'imagen-3.0-generate-002',
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/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 пока не поддерживается для Unity, но проверьте позже!
Узнайте, как выбрать модель , подходящую для вашего варианта использования и приложения.
Поддерживаемые функции и требования
Модели Imagen 3 предлагают множество функций, связанных с генерацией изображений. В этом разделе описывается, что поддерживается при использовании моделей с Firebase AI Logic .
Поддерживаемые возможности и функции
Firebase AI Logic поддерживает эти функции моделей Imagen 3 .
Генерация людей и лиц (при условии, что ваш проект Firebase одобрен Google Cloud )
Генерация текста внутри сгенерированных изображений
Добавление водяного знака к сгенерированным изображениям
Настройка параметров генерации изображений , таких как количество генерируемых изображений, соотношение сторон и водяные знаки
Настройка параметров безопасности
Firebase AI Logic не поддерживает эти расширенные функции моделей 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 | Imagen 3 Быстрый |
---|---|---|
Максимальное количество входных токенов | 480 токенов | 480 токенов |
Максимальное количество выходных изображений | 4 изображения | 4 изображения |
Поддерживаемые разрешения выходного изображения (пиксели) |
|
|
Что еще можно сделать?
- Начните думать о подготовке к производству (см. контрольный список производства ), включая:
- Настройка Firebase App Check для защиты API Gemini от злоупотреблений со стороны неавторизованных клиентов.
- Интеграция Firebase Remote Config для обновления значений в вашем приложении (например, названия модели) без выпуска новой версии приложения.
Узнайте, как контролировать генерацию контента
- Изучите дизайн подсказок , включая лучшие практики, стратегии и примеры подсказок.
- Настройте параметры модели Imagen , такие как соотношение сторон, генерация человека и водяные знаки.
- Используйте настройки безопасности , чтобы отрегулировать вероятность получения ответов, которые могут считаться вредоносными.
Узнайте больше о поддерживаемых моделях
Узнайте о моделях, доступных для различных вариантов использования , а также об их квотах и ценах .Оставьте отзыв о своем опыте использования Firebase AI Logic