Imagen で画像を生成

Imagen は画像生成モデルです。ユーザー プロフィール用のカスタム アバターを生成する、またはパーソナライズされたビジュアル アセットを既存の画面フローに取り込んでユーザー エンゲージメントを高めるために使用できます。

Firebase AI Logic SDK を使用すると、Android アプリから Imagen モデルにアクセスできます。Imagen モデルは、Firebase AI Logic の API プロバイダである Gemini Developer API(ほとんどのデベロッパーにおすすめ)と Vertex AI の両方を使用して利用できます。

Gemini Developer API にアクセスするための Firebase AI Logic 統合アーキテクチャを示す図。Android アプリは Firebase Android SDK を使用して Firebase に接続します。Firebase は Gemini Developer API とやり取りし、クラウド内の Gemini Pro と Gemini Flash にアクセスします。
図 1. Firebase AI Logic を使用して Imagen モデルにアクセスします。

プロンプトを試す

理想的なプロンプトを作成するには、多くの場合、何度か試してみる必要があります。画像プロンプトは、プロンプトの設計とプロトタイピング用の IDE である Vertex AI Studio で試すことができます。プロンプトを改善するためのヒントについては、プロンプトと画像属性のガイドをご覧ください。

Google Cloud Vertex AI Studio インターフェースのスクリーンショット。先史時代の森の中で青いバックパックを背負ったティラノサウルスが生成された 4 枚の画像が表示されています。左側のサイドバーには、ダッシュボード、モデル ガーデン、Vision などのナビゲーション オプションが表示され、右側のパネルには画像生成設定のパラメータが表示されます。
図 2. Vertex AI Studio を使用すると、画像生成プロンプトを調整できます。

Firebase プロジェクトを設定してアプリを接続する

Firebase ドキュメントの手順に沿って、Android プロジェクトに Firebase を追加します。

Gradle 依存関係を追加する

build.gradle ファイルに次の依存関係を追加します。

dependencies {
  // Import the BoM for the Firebase platform
  implementation(platform("com.google.firebase:firebase-bom:34.2.0"))

  // Add the dependency for the Firebase AI Logic library. When using the BoM,
  // you don't specify versions in Firebase library dependencies
  implementation("com.google.firebase:firebase-ai")
}

画像を生成する

Android アプリで画像を生成するには、まず、オプションの構成を使用して ImagenModel をインスタンス化します。

generationConfig パラメータを使用すると、ネガティブ プロンプト、画像の数、出力画像の縦横比、画像形式を定義し、透かしを追加できます。safetySettings パラメータを使用すると、安全性フィルタと人物フィルタを構成できます。

Kotlin

val config = ImagenGenerationConfig {
    numberOfImages = 2,
    aspectRatio = ImagenAspectRatio.LANDSCAPE_16x9,
    imageFormat = ImagenImageFormat.jpeg(compressionQuality = 100),
    addWatermark = false
}

// Initialize the Gemini Developer API backend service
// For Vertex AI use Firebase.ai(backend = GenerativeBackend.vertexAI())
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).imagenModel(
    modelName = "imagen-3.0-generate-002",
    generationConfig = config,
    safetySettings = ImagenSafetySettings(
       safetyFilterLevel = ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE,
       personFilterLevel = ImagenPersonFilterLevel.BLOCK_ALL
    )
)

Java

ImagenGenerationConfig config = new ImagenGenerationConfig.Builder()
    .setNumberOfImages(2)
    .setAspectRatio(ImagenAspectRatio.LANDSCAPE_16x9)
    .setImageFormat(ImagenImageFormat.jpeg(100))
    .setAddWatermark(false)
    .build();

// For Vertex AI use Firebase.ai(backend = GenerativeBackend.vertexAI())
ImagenModelFutures model = ImagenModelFutures.from(
    FirebaseAI.ai(backend = GenerativeBackend.googleAI()).imagenModel(
       "imagen-3.0-generate-002",
       config,
       ImagenSafetySettings.builder()
          .setSafetyFilterLevel(ImagenSafetyFilterLevel.BLOCK_LOW_AND_ABOVE)
          .setPersonFilterLevel(ImagenPersonFilterLevel.BLOCK_ALL)
          .build())
);

ImagenModel がインスタンス化されたら、generateImages を呼び出して画像を生成できます。

Kotlin

val imageResponse = model.generateImages(
  prompt = "An astronaut riding a horse",
)
val image = imageResponse.images.first
val bitmapImage = image.asBitmap()

Java

CompletableFuture<GenerateContentResponse> futureResponse =
    model.generateContent(
        Content.newBuilder()
            .addParts(
                Part.newBuilder()
                    .setText("An astronaut riding a horse")
                    .build())
            .build());

try {
  GenerateContentResponse imageResponse = futureResponse.get();
  List<GeneratedImage> images =
      imageResponse
          .getCandidates(0)
          .getContent()
          .getParts(0)
          .getInlineData()
          .getImagesList();

  if (!images.isEmpty()) {
    GeneratedImage image = images.get(0);
    Bitmap bitmapImage = image.asBitmap();
    // Use bitmapImage
  }
} catch (ExecutionException | InterruptedException e) {
  e.printStackTrace();
}