Пакеты Firebase AI Logic SDK предоставляют доступ к моделям Imagen (через Imagen API ), что позволяет генерировать изображения из текстовых подсказок. Эта возможность позволяет:
- Генерируйте изображения на основе подсказок, написанных на естественном языке.
- Создавайте изображения в широком диапазоне форматов и стилей
- Отображать текст на изображениях
В этом руководстве описывается, как генерировать изображения с помощью Imagen , предоставляя только текстовую подсказку.
Обратите внимание, что Imagen также может генерировать изображения на основе эталонного изображения, используя возможности настройки (в настоящее время доступны только для Android и Flutter). В запросе вы указываете текстовую подсказку и эталонное изображение, которые направляют модель на создание нового изображения на основе указанного стиля, темы (например, продукта, человека или животного) или элемента управления. Например, вы можете сгенерировать новое изображение на основе фотографии кошки или рисунка ракеты и Луны.
Перейти к коду для ввода только текста
Выбор между моделями Gemini и Imagen
Пакеты Firebase AI Logic SDK поддерживают генерацию и редактирование изображений с использованием модели Gemini или модели Imagen .
В большинстве случаев использования начните с Gemini , а затем выбирайте Imagen только для специализированных задач, где качество изображения имеет решающее значение.
Выбирайте Близнецов , когда хотите:
- Использовать знания о мире и рассуждения для создания контекстно релевантных изображений.
- Для плавного смешивания текста и изображений или чередования вывода текста и изображений.
- Для встраивания точных визуальных образов в длинные текстовые последовательности.
- Редактировать изображения в диалоговом режиме, сохраняя при этом контекст.
Выбирайте 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 :
Создание людей, лиц и текста на сгенерированных изображениях
Редактирование изображений или включение изображений в запрос при использовании API Vertex AI Gemini (в настоящее время только для Android и Flutter)
Добавление водяного знака к сгенерированным изображениям
Проверка цифровых водяных знаков при использовании API Vertex AI Gemini
Если вы хотите проверить, есть ли на изображении водяной знак, вы можете загрузить изображение в Vertex AI Studio, используя вкладку «Медиа» .Настройка параметров генерации изображений , таких как количество генерируемых изображений, соотношение сторон и водяные знаки
Настройка параметров безопасности
Firebase AI Logic не поддерживает следующие расширенные функции моделей 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