Imagen 3 で画像を生成する

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

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 とやり取りします。この API は、クラウド内の Gemini Pro と Flash にアクセスします。
図 1. Firebase AI Logic を使用して Imagen 3 モデルにアクセスする。

プロンプトで試す

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

古代の森に青いバックパックを背負ったティラノサウルスの生成画像が 4 つ表示されている Google Cloud Vertex AI Studio インターフェースのスクリーンショット。左側のサイドバーには、ダッシュボード、Model Garden、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:33.14.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();
}