借助 Firebase AI Logic SDK,您可以访问 Imagen 模型(通过 Imagen API), 以便根据文本提示生成图片。 借助此功能,您可以执行以下操作:
- 根据自然语言编写的提示生成图片
- 生成各种格式和样式的图片
- 在图片中呈现文本
本指南介绍了如何仅通过 提供文本提示来使用 Imagen 生成图片。
不过请注意,Imagen 还可以使用其 自定义功能 (目前仅适用于 Android 和 Flutter)根据参考 图片生成图片。在请求中,您需要提供文本提示和参考图片,以引导模型根据指定的样式、主题(例如商品、人物或动物)或控件生成新图片。例如,您可以根据猫的照片或火箭和月亮的图画生成新图片。
准备工作
|
点击您的 Gemini API 提供商,以查看此页面上特定于提供商的内容 和代码。 |
如果尚未完成,请完成
入门指南,其中介绍了如何
设置 Firebase 项目、将应用连接到 Firebase、添加 SDK、
为所选的 API 提供商初始化后端服务,以及
创建 ImagenModel 实例。
支持此功能的模型
Gemini Developer API 支持通过最新的 稳定 Imagen 模型生成图片。此支持的 Imagen 模型限制无论您如何访问 Gemini Developer API 都适用。
imagen-4.0-generate-001imagen-4.0-fast-generate-001imagen-4.0-ultra-generate-001imagen-3.0-generate-002
根据仅限文本输入生成图片
您可以仅通过文本提示来要求 Imagen 模型生成图片。您可以生成一张图片或 多张图片。
您还可以为图片生成设置许多不同的 配置选项, 例如宽高比和图片格式。
根据仅限文本输入生成一张图片
|
在尝试此示例之前,请完成本指南的
准备工作部分,
以设置您的项目和应用。 在该部分中,您还需要点击所选 Gemini API提供商的按钮,以便在此页面上看到特定于提供商的内容 。 |
您可以仅通过文本提示来要求 Imagen 模型生成一张图片 。
请务必创建 ImagenModel 实例并调用 generateImages。
Swift
import FirebaseAILogic
// 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
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.');
}
Unity
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();
了解如何选择适合您的应用场景和应用的模型,以及(可选)模型位置。
根据仅限文本输入生成多张图片
|
在尝试此示例之前,请完成本指南的
准备工作部分,
以设置您的项目和应用。 在该部分中,您还需要点击所选 Gemini API提供商的按钮,以便在此页面上看到特定于提供商的内容 。 |
默认情况下,Imagen 模型每个请求仅生成一张图片。
不过,您可以在创建 ImagenModel 实例时提供 ImagenGenerationConfig
,以要求 Imagen 模型每个请求生成多张图片
。
请务必创建 ImagenModel 实例并调用 generateImages。
Swift
import FirebaseAILogic
// 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
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.');
}
Unity
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搭配使用时。
支持的 capability 和功能
Firebase AI Logic 支持 Imagen 模型的以下功能 :
在生成的图片中生成人物、面部和文本
使用 时,编辑图片或在请求中添加图片Vertex AI Gemini API (目前仅适用于 Android 和 Flutter)
为生成的图片添加水印
验证数字水印 使用 Vertex AI Gemini API
如果您想验证图片是否带有水印,可以将图片上传到 Vertex AI Studio,方法是使用其 媒体 标签页。配置图片生成参数, 例如生成的图片数量、宽高比和水印
配置安全设置
Firebase AI Logic 不支持 以下 高级功能 Imagen 模型:
停用 提示重写器 (
enhancePrompt参数)。这意味着,基于 LLM 的提示重写工具始终会自动在提供的提示中添加更多详细信息,以提供更高质量的图片,从而更好地反映所提供的提示。将生成的图片直接写入 Google Cloud Storage,作为 模型响应的一部分(
storageUri参数)。相反,图片始终作为 base64 编码的图片字节在响应中返回。
如果您想将生成的图片上传到Cloud Storage,可以使用 Cloud Storage for Firebase。
规范和限制
| 属性(每个请求) | 值 |
|---|---|
| 输入 token 数上限 | 480 个 token |
| 输出图片数量上限 | 4 张图片 |
| 支持的输出图片分辨率(像素) |
|
你还可以做些什么?
-
开始考虑为正式版做准备(请参阅
正式版核对清单):
- 尽早设置 Firebase App Check Gemini API,以保护其免受 未经授权的客户端滥用。
- 集成 Firebase Remote Config 以更新应用中的值(例如模型名称),而无需发布新的应用 版本。
了解如何控制内容生成
- 了解提示设计,包括 最佳实践、策略和示例提示。
- 配置 Imagen 模型参数 例如宽高比、人物生成和水印。
- 使用安全设置来调整 收到可能被视为有害的响应的可能性。
详细了解支持的模型
了解适用于各种应用场景的 模型 及其 配额和 价格。提供反馈 有关您的使用体验Firebase AI Logic