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 模型。
如要執行下列操作,請選擇 Gemini:
- 運用世界知識和推理,產生與內容相關的圖片。
- 可將文字和圖片完美融合。
- 在長篇文字序列中嵌入準確的視覺效果。
- 在保留情境的情況下,以對話方式編輯圖片。
如要執行下列操作,請選擇 Imagen:
- 如要優先處理圖片品質、相片擬真度、藝術細節或特定風格 (例如印象派或動漫)。
- 如要明確指定產生圖片的顯示比例或格式。
事前準備
按一下 Gemini API 供應商,即可在這個頁面上查看供應商專屬內容和程式碼。 |
如果您尚未完成,請參閱入門指南,瞭解如何設定 Firebase 專案、將應用程式連結至 Firebase、新增 SDK、為所選 API 供應器初始化後端服務,以及建立 ImagenModel
例項。
支援這項功能的型號
Gemini Developer API 僅支援最新穩定版 Imagen 3 模型生成的圖片,其他 Imagen 模型則不支援。無論您如何存取 Gemini Developer API,這些 Imagen 模型限制都適用。
imagen-3.0-generate-002
根據純文字輸入內容生成圖片
您可以要求 Imagen 模型透過文字提示產生圖片。您可以產生一張圖片或多張圖片。
根據純文字輸入內容生成一張圖片
在嘗試這個範例之前,請先完成本指南「開始前」一節,設定專案和應用程式。 在該部分,您也需要點選所選Gemini API供應商的按鈕,才能在本頁面上看到供應商專屬內容。 |
您可以要求 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)
// 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()
}
// 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());
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];
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.');
}
Unity 目前尚不支援使用 Imagen,但請稍後再回來看看!
瞭解如何選擇適合用途和應用程式的模型。
根據純文字輸入內容生成多張圖片
在嘗試這個範例之前,請先完成本指南「開始前」一節,設定專案和應用程式。 在該部分,您也需要點選所選Gemini API供應商的按鈕,才能在本頁面上看到供應商專屬內容。 |
根據預設,Imagen 模型每個要求只會產生一張圖片。不過,您可以建立 ImagenModel
執行個體時提供 ImagenGenerationConfig
,要求 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",
// 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) }
// 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
}
}
// 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());
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];
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.');
}
Unity 目前不支援使用 Imagen,但請稍後再回來看看!
瞭解如何選擇適合用途和應用程式的模型。
支援的功能和需求
Imagen 模型提供許多與圖像產生相關的功能。本節說明搭配 Firebase AI Logic 使用模型時支援的功能。
支援的功能
Firebase AI Logic 支援 Imagen 型號的這些功能。
產生人物和臉孔 (前提是您的 Firebase 專案已獲得 Google Cloud 的核准)
在生成的圖片中產生文字
為產生的圖片加上浮水印
設定圖片產生參數,例如產生的圖片數量、顯示比例和浮水印
調整安全性設定
Firebase AI Logic不支援 Imagen 型號的這些進階功能。
請注意,即使在伺服器端使用 Imagen 模型,這些功能大多都需要在已核准的使用者名單中才能使用。
圖片編輯或處理功能,包括放大圖片
在傳送至模型的要求中加入圖片 (例如少量樣本學習)
使用 SDK 驗證數位浮水印
如要驗證圖片是否含有浮水印,您可以使用 Media 分頁將圖片上傳至 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,以免 Gemini API 遭到未經授權的用戶端濫用。
- 整合 Firebase Remote Config,無須發布新版應用程式,即可更新應用程式中的值 (例如模型名稱)。
瞭解如何控管內容產生作業
- 瞭解提示設計,包括最佳做法、策略和提示範例。
- 設定 Imagen 模型參數,例如顯示比例、人物生成和浮水印。
- 使用安全性設定,調整可能會收到有害回應的機率。
進一步瞭解支援的型號
瞭解可用於各種用途的模型,以及相關配額和價格。針對使用 Firebase AI Logic 的體驗提供意見回饋