Пакеты 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 3 , но не других моделей Imagen . Эти ограничения модели Imagen действуют независимо от способа доступа к API Gemini Developer .
-
imagen-3.0-generate-002
-
imagen-4.0-generate-preview-06-06
-
imagen-4.0-ultra-generate-preview-06-06
Генерация изображений из текстового ввода
Вы можете попросить модель 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
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-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 = 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-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 model that supports your use case
const model = 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 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-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 генерируют только одно изображение за запрос. Однако вы можете настроить модель 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
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-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 = 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-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 model that supports your use case
const model = 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 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-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 предлагают множество функций, связанных с генерацией изображений. В этом разделе описывается, какие функции поддерживаются при использовании моделей с Firebase AI Logic .
Поддерживаемые возможности и функции
Firebase AI Logic поддерживает эти функции моделей Imagen .
Генерация людей и лиц (при условии, что ваш проект Firebase одобрен Google Cloud )
Генерация текста внутри сгенерированных изображений
Добавление водяного знака к сгенерированным изображениям
Настройка параметров генерации изображений , таких как количество генерируемых изображений, соотношение сторон и водяные знаки
Настройка параметров безопасности
Firebase AI Logic не поддерживает эти расширенные функции моделей Imagen .
Обратите внимание, что для большинства этих функций требуется наличие в списке одобренных пользователей даже при использовании моделей Imagen на стороне сервера.
Функции редактирования или обработки изображений, включая масштабирование изображений
Включение изображений в запрос к модели (например, для обучения по нескольким кадрам)
Проверка цифровых водяных знаков с помощью SDK
Если вы хотите проверить, есть ли на изображении водяной знак, вы можете загрузить изображение в Vertex AI Studio, используя вкладку «Медиа» .Создание «живых изображений» из текста (создание MP4)
Создание изображений с использованием предопределенного стиля
Включение
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