Пакеты Firebase AI Logic SDK предоставляют доступ к моделям Imagen (через Imagen API ), что позволяет генерировать изображения из текстовых подсказок. Эта возможность позволяет:
- Генерируйте изображения на основе подсказок, написанных на естественном языке.
- Создавайте изображения в широком диапазоне форматов и стилей
- Отображать текст на изображениях
Обратите внимание, что Firebase AI Logic пока поддерживает не все функции, доступные для моделей Imagen . Подробнее см. в разделе «Поддерживаемые возможности и функции» далее на этой странице.
Перейти к коду для ввода только текста
Выбор между моделями Gemini и Imagen
Пакеты Firebase AI Logic SDK поддерживают генерацию изображений с использованием модели Gemini или Imagen . В большинстве случаев рекомендуется начать с Gemini , а затем выбрать Imagen для специализированных задач, где качество изображений критически важно.
Обратите внимание, что Firebase AI Logic SDK пока не поддерживает ввод изображений (например, для редактирования) с помощью моделей Imagen . Поэтому, если вы хотите работать с входными изображениями, вы можете использовать модель Gemini .
Выбирайте Близнецов , когда хотите:
- Использовать знания о мире и рассуждения для создания контекстно релевантных изображений.
- Для плавного смешивания текста и изображений или чередования вывода текста и изображений.
- Для встраивания точных визуальных образов в длинные текстовые последовательности.
- Редактировать изображения в диалоговом режиме, сохраняя при этом контекст.
Выбирайте Imagen , когда хотите:
- Отдать приоритет качеству изображения, фотореализму, художественной детализации или определенным стилям (например, импрессионизму или аниме).
- Для явного указания соотношения сторон или формата создаваемых изображений.
Прежде чем начать
Щелкните своего поставщика API Gemini , чтобы просмотреть специфичный для этого поставщика контент и код на этой странице. |
Если вы еще этого не сделали, ознакомьтесь с руководством по началу работы , в котором описывается, как настроить проект Firebase, подключить приложение к Firebase, добавить SDK, инициализировать внутреннюю службу для выбранного поставщика API и создать экземпляр ImagenModel .
Модели, поддерживающие эту возможность
API Gemini Developer поддерживает генерацию изображений с использованием последних стабильных моделей Imagen . Это ограничение на поддерживаемые модели Imagen действует независимо от способа доступа к API Gemini Developer .
-
imagen-4.0-generate-001 -
imagen-4.0-fast-generate-001 -
imagen-4.0-ultra-generate-001 -
imagen-3.0-generate-002
Генерация изображений из текстового ввода
Вы можете попросить модель 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-4.0-generate-001")
// 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
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())
// Create an `ImagenModel` instance with an Imagen model that supports your use case
val model = ai.imagenModel("imagen-4.0-generate-001")
// Provide an image generation prompt
val prompt = "An astronaut riding a horse"
// To generate an image, call `generateImages` with the text prompt
val imageResponse = model.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-4.0-generate-001");
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 model that supports your use case
const model = getImagenModel(ai, { model: "imagen-4.0-generate-001" });
// 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 model.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
final model = FirebaseAI.googleAI();
// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model = ai.imagenModel(model: 'imagen-4.0-generate-001');
// 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.');
}
Единство
using Firebase.AI;
// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create an `ImagenModel` instance with a model that supports your use case
var model = ai.GetImagenModel(modelName: "imagen-4.0-generate-001");
// Provide an image generation prompt
var prompt = "An astronaut riding a horse";
// To generate an image, call `generateImages` with the text prompt
var response = await model.GenerateImagesAsync(prompt: prompt);
// Handle the generated image
if (response.Images.Count == 0) {
throw new Exception("No image in the response.");
}
var image = response.Images[0].AsTexture2D();
Узнайте, как выбрать модельподходящий для вашего варианта использования и приложения.
Генерация нескольких изображений на основе текстового ввода
| Прежде чем приступить к работе с этим примером, выполните указания раздела «Перед началом работы» данного руководства, чтобы настроить свой проект и приложение. В этом разделе вы также нажмете кнопку для выбранного вами поставщика API Gemini , чтобы увидеть на этой странице контент, специфичный для этого поставщика . |
По умолчанию модели Imagen генерируют только одно изображение за запрос. Однако вы можете настроить модель 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-4.0-generate-001",
// 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
val ai = Firebase.ai(backend = GenerativeBackend.googleAI())
// Create an `ImagenModel` instance with an Imagen model that supports your use case
val model = ai.imagenModel(
modelName = "imagen-4.0-generate-001",
// 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 = model.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-4.0-generate-001",
/* 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 model that supports your use case
const model = getImagenModel(
ai,
{
model: "imagen-4.0-generate-001",
// 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 model.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
final ai = FirebaseAI.googleAI();
// Create an `ImagenModel` instance with an Imagen model that supports your use case
final model = ai.imagenModel(
model: 'imagen-4.0-generate-001',
// 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.');
}
Единство
using Firebase.AI;
// Initialize the Gemini Developer API backend service
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create an `ImagenModel` instance with a model that supports your use case
var model = ai.GetImagenModel(
modelName: "imagen-4.0-generate-001",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/ai-logic/model-parameters
generationConfig: new ImagenGenerationConfig(numberOfImages: 4)
);
// Provide an image generation prompt
var prompt = "An astronaut riding a horse";
// To generate an image, call `generateImages` with the text prompt
var response = await model.GenerateImagesAsync(prompt: prompt);
// If fewer images were generated than were requested,
// then `filteredReason` will describe the reason they were filtered out
if (!string.IsNullOrEmpty(response.FilteredReason)) {
UnityEngine.Debug.Log("Filtered reason: " + response.FilteredReason);
}
// Handle the generated images
var images = response.Images.Select(image => image.AsTexture2D());
Узнайте, как выбрать модельподходящий для вашего варианта использования и приложения.
Поддерживаемые функции и требования
Модели Imagen предлагают множество функций, связанных с генерацией изображений. В этом разделе описывается, какие функции поддерживаются при использовании моделей с Firebase AI Logic .
Поддерживаемые возможности и функции
Firebase AI Logic поддерживает эти функции моделей Imagen .
Генерация людей и лиц (при условии, что ваш проект Firebase одобрен Google Cloud )
Генерация текста внутри сгенерированных изображений
Добавление водяного знака к сгенерированным изображениям
Проверка цифровых водяных знаков при использовании API Vertex AI Gemini
Если вы хотите проверить, есть ли на изображении водяной знак, вы можете загрузить изображение в Vertex AI Studio, используя вкладку «Медиа» .Настройка параметров генерации изображений , таких как количество генерируемых изображений, соотношение сторон и водяные знаки
Настройка параметров безопасности
Firebase AI Logic не поддерживает эти расширенные функции моделей Imagen .
Обратите внимание, что для большинства этих функций требуется наличие в списке одобренных пользователей даже при использовании моделей Imagen на стороне сервера.
Функции редактирования или обработки изображений, включая масштабирование изображений
Включение изображений в запрос к модели (например, для обучения по нескольким кадрам)
Включение
includeSafetyAttributesозначает, чтоsafetyAttributes.categoriesиsafetyAttributes.scoresне могут быть возвращены.Отключение функции перезаписи подсказок (параметр
enhancePrompt). Это означает, что инструмент перезаписи подсказок на базе LLM всегда будет автоматически добавлять больше деталей к предоставленной подсказке, чтобы создавать изображения более высокого качества, которые лучше отражают предоставленную подсказку.Запись сгенерированного изображения непосредственно в Google Cloud Storage как часть ответа модели (параметр
storageUri). Вместо этого изображения всегда возвращаются в ответе в виде байтов, закодированных в формате base64.
Если вы хотите загрузить сгенерированное изображение в Cloud Storage , вы можете использовать Cloud Storage for Firebase .
Характеристики и ограничения
| Недвижимость (по запросу) | Ценить |
|---|---|
| Максимальное количество входных токенов | 480 токенов |
| Максимальное количество выходных изображений | 4 изображения |
| Поддерживаемые разрешения выходного изображения (пиксели) |
|
Что еще вы можете сделать?
- Начните думать о подготовке к производству (см. контрольный список производства ), включая:
- Настройка Firebase App Check для защиты API Gemini от злоупотреблений со стороны неавторизованных клиентов.
- Интеграция Firebase Remote Config для обновления значений в вашем приложении (например, названия модели) без выпуска новой версии приложения.
Узнайте, как контролировать генерацию контента
- Понимать дизайн подсказок , включая передовые практики, стратегии и примеры подсказок.
- Настройте параметры модели Imagen , такие как соотношение сторон, генерация людей и водяные знаки.
- Используйте настройки безопасности , чтобы отрегулировать вероятность получения ответов, которые могут считаться опасными.
Узнайте больше о поддерживаемых моделях
Узнайте о моделях, доступных для различных вариантов использования , их квотах и ценах .Оставьте отзыв о своем опыте работы с Firebase AI Logic