Firebase AI Logic SDK を使用すると、(Imagen API を介して)Imagen モデルにアクセスして、テキスト プロンプトから画像を生成できます。この機能を使用すると、次のようなことができます。
- 自然言語で記述されたプロンプトから画像を生成する
- 幅広い形式とスタイルで画像を生成
- 画像内のテキストをレンダリングする
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 モデルはサポートしていません。これらの Imagen モデルの制限は、Gemini Developer API へのアクセス方法に関係なく適用されます。
imagen-3.0-generate-002
テキストのみの入力から画像を生成する
テキストを指定してプロンプトを送信することで、Imagen モデルに画像の生成を依頼できます。1 つの画像または複数の画像を生成できます。
テキストのみの入力から 1 つの画像を生成する
このサンプルを試す前に、このガイドの始める前にのセクションを完了して、プロジェクトとアプリを設定します。 このセクションでは、選択した Gemini API プロバイダのボタンをクリックして、このページにプロバイダ固有のコンテンツが表示されるようにします。 |
テキスト プロンプトを使用して、Imagen モデルに 1 つの画像を生成するよう指示できます。
ImagenModel
インスタンスを作成して generateImages
を呼び出すようにしてください。
Swift
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
// 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()
}
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 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];
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
// 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 の使用は Unity ではまだサポートされていませんが、今後対応する予定です。
ユースケースとアプリに適したモデルを選択する方法を学びます。
テキストのみの入力から複数の画像を生成する
このサンプルを試す前に、このガイドの始める前にのセクションを完了して、プロジェクトとアプリを設定します。 このセクションでは、選択した Gemini API プロバイダのボタンをクリックして、このページにプロバイダ固有のコンテンツが表示されるようにします。 |
デフォルトでは、Imagen モデルはリクエストごとに 1 つの画像のみを生成します。ただし、ImagenModel
インスタンスを作成するときに ImagenGenerationConfig
を指定して、リクエストごとに複数の画像を生成するように Imagen モデルに指示できます。
ImagenModel
インスタンスを作成して generateImages
を呼び出すようにしてください。
Swift
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
// 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
}
}
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 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];
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
// 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 の使用は 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 ベースのプロンプト書き換えツールは、指定されたプロンプトをより正確に反映した高品質の画像を生成するために、指定されたプロンプトに詳細を常に自動的に追加します。生成された画像を、モデルからのレスポンス(
storageUri
パラメータ)の一部として Google Cloud Storage に直接書き込む。代わりに、画像は常に base64 エンコードされた画像バイトとしてレスポンスで返されます。
生成された画像を Cloud Storage にアップロードする場合は、Cloud Storage for Firebase を使用できます。
仕様と制限事項
プロパティ(リクエストあたり) | 値 |
---|---|
入力トークンの最大数 | 480 トークン |
出力画像の最大数 | 4 枚 |
サポートされている出力画像の解像度(ピクセル) |
|
Google アシスタントの機能
-
以下を含む、本番環境の準備(本番環境チェックリストを参照)を検討します。
- Firebase App Check の設定。Gemini API を不正なクライアントによる不正使用から保護します。
- Firebase Remote Config を統合して、新しいアプリ バージョンをリリースしなくても、アプリ内の値(モデル名など)を更新します。
コンテンツ生成を制御する方法
- プロンプト設計を理解する。ベスト プラクティス、戦略、プロンプトの例などをご覧ください。
- アスペクト比、人物の生成、ウォーターマークなど、Imagen モデル パラメータを構成する。
- 安全性設定を使用すると、有害と見なされる可能性のある回答が生成される可能性を調整できます。
サポートされているモデルの詳細
さまざまなユースケースで利用可能なモデルと、その割り当てと料金について学びます。Firebase AI Logic の使用感に関するフィードバックを送信する