アプリにカスタム画像を追加すると、ユーザー エクスペリエンスを大幅に改善してパーソナライズし、ユーザー エンゲージメントを高めることができます。この投稿では、Firebase AI Logic を使用した画像生成の 2 つの新機能について説明します。1 つは、現在プレビュー版として提供されている Imagen の特殊な編集機能です。もう 1 つは、コンテキストに応じた画像生成や会話型の画像生成向けに設計された Gemini 2.5 Flash Image(別名「Nano Banana」)の一般提供です。
Firebase AI Logic で生成された画像でユーザー エンゲージメントを向上させる
画像生成モデルを使用すると、カスタムのユーザー プロフィール アバターを作成したり、パーソナライズされたビジュアル アセットを主要な画面フローに直接統合したりできます。
たとえば、Imagen には新しい編集機能(デベロッパー プレビュー)が用意されています。マスクを描画し、インペインティングを使用してマスクされた領域内にピクセルを生成できるようになりました。また、アウトペインティングを使用して、マスクの外側にピクセルを生成することもできます。
Imagen はインペイントをサポートしており、画像の一部のみを生成できます。
また、Gemini 2.5 Flash Image(別名 Nano Banana)は、Gemini モデルの拡張された世界知識と推論機能を使用して、コンテキストに関連する画像を生成できます。これは、ユーザーの現在のアプリ エクスペリエンスに沿った動的なイラストを作成するのに最適です。
Gemini 2.5 Flash Image を使用して、アプリのコンテキストに関連する動的なイラストを作成します。
最後に、画像を会話形式で繰り返し編集できる機能により、ユーザーは自然言語を使用して写真を編集できます。
Gemini 2.5 Flash Image を使用して、自然言語で画像を編集します。
AI をアプリケーションに統合する際には、AI の安全性について学ぶことが重要です。特に重要なのは、アプリケーションのセキュリティ リスクを評価し、安全性のリスクを軽減するための調整を検討し、ユースケースに適した安全性テストを実施し、ユーザー フィードバックを募り、コンテンツをモニタリングすることです。
Imagen と Gemini: どちらでも選択可能
Gemini 2.5 Flash Image(「Nano Banana」)と Imagen の違いは、主な用途と高度な機能にあります。Gemini 2.5 Flash Image は、より大きな Gemini ファミリー内の画像モデルとして、会話型の画像編集に優れており、複数のイテレーションにわたってコンテキストと被写体の一貫性を維持し、「世界に関する知識と推論」を活用して、コンテキストに関連するビジュアルを作成したり、長いテキスト シーケンス内に正確なビジュアルを埋め込んだりできます。
Imagen は、クリエイティブな制御を強化するために設計された Google の特殊な画像生成モデルです。非常にフォトリアリスティックな出力、芸術的なディテール、特定のスタイルに特化しており、生成された画像のアスペクト比や形式を指定するための明示的な制御を提供します。
| Gemini 2.5 Flash 画像 (Nano Banana 🍌) | Imagen |
🌎 世界に関する知識と推論により、コンテキストに沿った関連性の高い画像を生成 💬 コンテキストを維持しながら会話形式で画像を編集する 📖 長いテキスト シーケンス内に正確なビジュアルを埋め込む | 📐 生成される画像のアスペクト比や形式を指定する
🖌️ インペインティングとアウトペインティングのマスクベースの編集をサポート。
🎚️ 生成画像の詳細(品質、芸術的なディテール、特定のスタイル)をより細かく制御 |
アプリでこれらを使用する方法を見てみましょう。
Imagen を使用したインペインティング
数か月前、Imagen の新しい編集機能をリリースしました。Imagen は画像生成のプロダクション レディになりましたが、編集機能はまだデベロッパー プレビューです。
Imagen の編集機能には、マスクベースの画像編集機能であるインペイントとアウトペイントがあります。この新機能により、ユーザーは画像全体を再生成することなく、画像の特定の領域を変更できます。つまり、画像の最適な部分を維持しながら、変更したい部分のみを変更できます。
Imagen の編集機能を使用して、画像の残りの部分の整合性を保証しながら、画像に正確なターゲット変更を加える
これらの変更は、元の画像の核となる要素と全体的な整合性を維持しながら、マスク内の領域のみを変更することで行われます。
Imagen でインペインティングを実装するには、まず、編集機能をサポートする特定の Imagen モデルを imagen-3.0-capability-001 で初期化します。
// Copyright 2025 Google LLC.
// SPDX-License-Identifier: Apache-2.0
val editingModel =
Firebase.ai(backend = GenerativeBackend.vertexAI()).imagenModel(
"imagen-3.0-capability-001",
generationConfig = ImagenGenerationConfig(
numberOfImages = 1,
aspectRatio = ImagenAspectRatio.SQUARE_1x1,
imageFormat = ImagenImageFormat.jpeg(compressionQuality = 75),
),
)そこから、インペインティング関数を定義します。
// Copyright 2025 Google LLC.
// SPDX-License-Identifier: Apache-2.0
val prompt = "remove the pancakes and make it an omelet instead"
suspend fun inpaintImageWithMask(sourceImage: Bitmap, maskImage: Bitmap, prompt: String, editSteps: Int = 50): Bitmap {
val imageResponse = editingModel.editImage(
referenceImages = listOf(
ImagenRawImage(sourceImage.toImagenInlineImage()),
ImagenRawMask(maskImage.toImagenInlineImage()),
),
prompt = prompt,
config = ImagenEditingConfig(
editMode = ImagenEditMode.INPAINT_INSERTION,
editSteps = editSteps,
),
)
return imageResponse.images.first().asBitmap()
}sourceImage、maskImage、編集用のプロンプト、実行する編集ステップ数を指定します。
実際の動作は、Android AI サンプル カタログの Imagen 編集サンプルで確認できます。
また、Imagen はアウトペインティングもサポートしており、モデルがマスクの外側のピクセルを生成できるようにします。Imagen の画像カスタマイズ機能を使用して、画像のスタイルを変更したり、画像内の被写体を更新したりすることもできます。詳しくは、Android デベロッパー向けドキュメントをご覧ください。
Gemini 2.5 Flash Image による会話型画像生成
Gemini 2.5 Flash Image で画像を編集する方法の一つは、モデルのマルチターン チャット機能を使用することです。
まず、モデルを初期化します。
// Copyright 2025 Google LLC.
// SPDX-License-Identifier: Apache-2.0
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
modelName = "gemini-2.5-flash-image",
// Configure the model to respond with text and images (required)
generationConfig = generationConfig {
responseModalities = listOf(ResponseModality.TEXT,
ResponseModality.IMAGE)
}
)
上記のマスクベースの Imagen メソッドと同様の結果を得るには、chat API を使用して Gemini 2.5 Flash Image との会話を開始します。
// Copyright 2025 Google LLC.
// SPDX-License-Identifier: Apache-2.0
// Initialize the chat
val chat = model.startChat()
// Load a bitmap
val source = ImageDecoder.createSource(context.contentResolver, uri)
val bitmap = ImageDecoder.decodeBitmap(source)
// Create the initial prompt instructing the model to edit the image
val prompt = content {
image(bitmap)
text("remove the pancakes and add an omelet")
}
// To generate an initial response, send a user message with the image and text prompt
var response = chat.sendMessage(prompt)
// Inspect the returned image
var generatedImageAsBitmap = response
.candidates.first().content.parts.filterIsInstance<ImagePart>().firstOrNull()?.image
// Follow up requests do not need to specify the image again
response = chat.sendMessage("Now, center the omelet in the pan")
generatedImageAsBitmap = response
.candidates.first().content.parts.filterIsInstance<ImagePart>().firstOrNull()?.image
実際の動作については、Android AI サンプル カタログの Gemini Image Chat サンプルをご覧ください。詳細については、Android ドキュメントをご覧ください。
まとめ
Imagen と Gemini 2.5 Flash Image はどちらも強力な機能を備えており、特定のユースケースに応じて最適な画像生成モデルを選択して、アプリをパーソナライズし、ユーザー エンゲージメントを高めることができます。
-
サービスに関する最新情報革新的な AI 機能をアプリに実装したいと考えている Android デベロッパー向けに、最近、強力な新しいアップデートがリリースされました。
Thomas Ezan • 所要時間: 2 分 -
サービスに関する最新情報このたび、Gemini 3 モデル ファミリーに Gemini 3 Flash が加わりました。Gemini 3 Flash は、スピードを重視して構築された最先端のインテリジェンスを低コストで提供します。
Thomas Ezan • 所要時間: 2 分 -
サービスに関する最新情報Unity は世界中のモバイルタイトルの半数以上を支えており、第一印象が重要です。ゲーム デベロッパーにとって、スムーズで信頼性の高いプレーヤー オンボーディング エクスペリエンスは、1 日目の維持率と長期的なエンゲージメントを促進するために不可欠です。
Michelle Martin • 所要時間: 1 分
Android 開発に関する最新の分析情報を毎週メールでお届けします。