Vertex AI in Firebase SDK を使用すると、(Imagen API を介して)Imagen 3 モデルにアクセスして、テキスト プロンプトから画像を生成できます。この機能を使用すると、次のようなことができます。
- 自然言語で記述されたプロンプトから画像を生成する
- 幅広い形式とスタイルで画像を生成
- 画像内のテキストをレンダリングする
Vertex AI in Firebase は、Imagen モデルで利用可能なすべての機能をまだサポートしていません。詳細については、このページのサポートされている機能をご覧ください。
始める前に
まだ行っていない場合は、スタートガイドを完了してください。Firebase プロジェクトの設定、アプリの Firebase への接続、SDK の追加、Vertex AI サービスの初期化、ImagenModel
インスタンスの作成方法が記載されています。
少なくとも次のバージョンの Firebase ライブラリを使用していることを確認します。
iOS+: v11.9.0 以降 |
Android: v16.2.0 以降(BoM: v33.10.0 以降)|
ウェブ: v11.4.1 以降 |
Flutter: v1.4.0 以降(BoM: v3.8.0 以降)
この機能をサポートするモデル
画像生成は Imagen 3 モデルでサポートされています。Gemini 2.0 モデルによる画像生成のサポートは近日提供予定です。
テキストのみの入力から画像を生成する
テキストを指定してプロンプトすることで、Imagen モデルに画像の生成を依頼できます。1 つの画像または複数の画像を生成できます。
テキストのみの入力から 1 つの画像を生成する
このサンプルを試す前に、このガイドの始める前にのセクションを完了していることを確認してください。
テキストを指定してプロンプトを送信することで、Imagen モデルに 1 つの画像を生成するよう指示できます。
ImagenModel
インスタンスを作成して generateImages
を呼び出すようにしてください。
Swift
import FirebaseVertexAI
// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()
// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
let model = vertex.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 Imagen with Vertex AI in Firebase is in public preview
// It requires opt-in to use the API
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
val imagenModel = Firebase.vertexAI.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()
}
Java
// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
ImagenModel imagenModel = FirebaseVertexAI.getInstance().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 { getVertexAI, getImagenModel } from "firebase/vertexai";
// 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 Vertex AI service
const vertexAI = getVertexAI(firebaseApp);
// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(
vertexAI,
{
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];
Dart
import 'package:firebase_vertexai/firebase_vertexai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
final model =
FirebaseVertexAI.instance.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 3 モデルはリクエストごとに 1 つの画像のみを生成します。ただし、ImagenModel
インスタンスを作成するときに ImagenGenerationConfig
を指定して、リクエストごとに複数の画像を生成するように Imagen モデルに指示できます。
ImagenModel
インスタンスを作成して generateImages
を呼び出すようにしてください。
Swift
import FirebaseVertexAI
// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()
// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
let model = vertex.imagenModel(
modelName: "imagen-3.0-generate-002",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/vertex-ai/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 Imagen with Vertex AI in Firebase is in public preview
// It requires opt-in to use the API
@OptIn(PublicPreviewAPI::class)
suspend fun generateImage() {
// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
val imagenModel = Firebase.vertexAI.imagenModel(
modelName = "imagen-3.0-generate-002",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/vertex-ai/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
}
}
Java
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/vertex-ai/model-parameters
ImagenGenerationConfig imagenGenerationConfig = new ImagenGenerationConfig.Builder()
.setNumberOfImages(4)
.build();
// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
ImagenModel imagenModel = FirebaseVertexAI.getInstance().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 { getVertexAI, getImagenModel } from "firebase/vertexai";
// 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 Vertex AI service
const vertexAI = getVertexAI(firebaseApp);
// Create an `ImagenModel` instance with an Imagen 3 model that supports your use case
const imagenModel = getImagenModel(
vertexAI,
{
model: "imagen-3.0-generate-002",
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/vertex-ai/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];
Dart
import 'package:firebase_vertexai/firebase_vertexai.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase_options.dart';
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Initialize the Vertex AI service and create an `ImagenModel` instance
// Specify an Imagen 3 model that supports your use case
final model = FirebaseVertexAI.instance.imagenModel(
model: 'imagen-3.0-generate-002',
// Configure the model to generate multiple images for each request
// See: https://firebase.google.com/docs/vertex-ai/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 3 モデルには、画像生成に関連する多くの機能が用意されています。このセクションでは、Vertex AI in Firebase でモデルを使用する場合にサポートされている内容について説明します。
サポートされている機能
Vertex AI in Firebase は、Imagen 3 モデルのこれらの機能をサポートしています。
人物と顔の生成(Firebase プロジェクトが Google Cloud から承認されている場合)
生成された画像内のテキストの生成
生成された画像に透かしを追加する
画像生成パラメータの構成(生成される画像の数、アスペクト比、透かしなど)
安全性設定の構成
Vertex AI in Firebase は、Imagen 3 モデルのこれらの高度な機能をサポートしていません。
これらの機能のほとんどは、サーバーサイドで Imagen モデルを使用している場合でも、承認済みのユーザーリストに登録されている必要があります。
画像の編集や操作機能(画像のアップスケーリングなど)
モデルへのリクエストに画像を含める(少数ショット学習の場合など)
SDK を使用してデジタル透かしを確認する
画像に透かしが付いていることを確認するには、[メディア] タブを使用して画像を Vertex AI Studio にアップロードします。テキストから「ライブ画像」を生成する(MP4 生成)
事前定義されたスタイルを使用して画像を生成する
includeSafetyAttributes
を有効にすると、safetyAttributes.categories
とsafetyAttributes.scores
を返すことができなくなります。プロンプトの機能強化を無効にする(
enhancePrompt
パラメータ)。LLM ベースのプロンプト書き換えツールは、指定されたプロンプトをより正確に反映した高品質の画像を生成するために、指定されたプロンプトに詳細を自動的に追加します。生成された画像を、モデルからのレスポンス(
storageUri
パラメータ)の一部として Google Cloud Storage に直接書き込む。代わりに、画像は常に base64 エンコードされた画像バイトとしてレスポンスで返されます。
生成された画像を Cloud Storage にアップロードする場合は、Cloud Storage for Firebase を使用できます。
仕様と制限事項
上限(リクエストあたり) | Imagen 3 | Imagen 3 Fast |
---|---|---|
入力トークンの最大数 | 480 トークン | 480 トークン |
出力画像の最大数 | 4 枚 | 4 枚 |
サポートされている出力画像の解像度(ピクセル) |
|
|
他にできること
- アプリで使用する API を不正なクライアントによる不正使用から保護するために Firebase App Check を設定するなど、本番環境への準備を検討します。また、本番環境チェックリストも必ずご確認ください。
コンテンツ生成を制御する方法
- プロンプト設計を理解する。ベスト プラクティス、戦略、プロンプトの例などをご覧ください。
- アスペクト比、人物の生成、ウォーターマークなど、Imagen モデル パラメータを構成する。
- 安全性設定を使用すると、有害と見なされる可能性のある回答が生成される可能性を調整できます。
サポートされているモデルの詳細
さまざまなユースケースで利用可能なモデルと、その割り当てと料金について学びます。Vertex AI in Firebase の使用感に関するフィードバックを送信する