Imagen を使用して画像を生成する


Vertex AI in Firebase SDK を使用すると、(Imagen API を介して)Imagen 3 モデルにアクセスして、テキスト プロンプトから画像を生成できます。この機能を使用すると、次のようなことができます。

  • 自然言語で記述されたプロンプトから画像を生成する
  • 幅広い形式とスタイルの画像を生成
  • 画像内のテキストをレンダリングする

Vertex AI in Firebase は、Imagen モデルで利用可能なすべての機能をまだサポートしていません。詳細については、このページのサポートされている機能をご覧ください。

テキストのみの入力のコードに移動

始める前に

スタートガイドをまだ完了していない場合は、必ず完了してください。これには、Firebase プロジェクトの設定、アプリの Firebase への接続、SDK の追加、Vertex AI サービスの初期化が含まれます。これらはすべて、Vertex AI in Firebase SDK を使用して Imagen モデルにプロンプト リクエストを送信する前に必要なタスクです。

Imagen モデルを使用して画像を生成する場合:

  • 少なくとも次のバージョンの Firebase ライブラリを使用していることを確認します。
    iOS+: v11.9.1 以降 | Android: v16.2.0 以降(BoM: v33.10.0 以降)| ウェブ: v11.4.1 以降 | Flutter: v1.4.0 以降(BoM: v3.8.0 以降)

  • ImagenModel を初期化する(GenerativeModel ではない

  • generateImages() の呼び出しでプロンプトを送信します(generateContent() または generateContentStream() には送信しないでください)。

この ImagenModel の初期化と generateImages() の使用は、このページの例で示されています。

この機能をサポートするモデル

画像生成は Imagen 3 モデルでサポートされています。Gemini 2.0 モデルによる画像生成のサポートは近日提供予定です。

テキストのみの入力から画像を生成する

テキストを指定して画像の生成を Imagen モデルに依頼できます。1 つの画像または複数の画像を生成できます。

テキストのみの入力から 1 つの画像を生成する

このサンプルを試す前に、このガイドの始める前にのセクションを完了していることを確認してください。

テキスト プロンプトを使用して、Imagen モデルに 1 つの画像を生成するよう指示できます。

KotlinJava
// 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 Imagen model
  // 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()
}
// Initialize the Vertex AI service and Imagen model
// 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());

ユースケースとアプリに適したモデルと、必要に応じてロケーションを選択する方法を学びます。

テキストのみの入力から複数の画像を生成する

このサンプルを試す前に、このガイドの始める前にのセクションを完了していることを確認してください。

デフォルトでは、Imagen 3 モデルはリクエストごとに 1 つの画像のみを生成します。ただし、モデルの初期化時に generationConfig を指定して、リクエストごとに複数の画像を生成するように Imagen モデルに指示できます。

KotlinJava
// 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 Imagen model
  // 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
  }
}
// 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 Imagen model
// 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());

ユースケースとアプリに適したモデルと、必要に応じてロケーションを選択する方法を学びます。

サポートされている機能と要件

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.categoriessafetyAttributes.scores を返すことができなくなります。

  • プロンプトの拡張を無効にする(enhancePrompt パラメータ)。LLM ベースのプロンプト書き換えツールは、指定されたプロンプトに常に詳細を自動的に追加し、指定されたプロンプトをより正確に反映した高品質の画像を生成します。

  • 生成された画像を、モデルからのレスポンス(storageUri パラメータ)の一部として Google Cloud Storage に直接書き込む。代わりに、画像は常に base64 エンコードされた画像バイトとしてレスポンスで返されます。
    生成された画像を Cloud Storage にアップロードする場合は、Cloud Storage for Firebase を使用できます。

仕様と制限事項

上限(リクエストあたり) Imagen 3 Imagen 3 Fast
入力トークンの最大数 480 トークン 480 トークン
出力画像の最大数 4 枚 4 枚
サポートされている出力画像の解像度(ピクセル)
  • 1,024 x 1,024 ピクセル(1:1 のアスペクト比)
  • 896 x 1,280(3:4 のアスペクト比)
  • 1,280 x 896(4:3 のアスペクト比)
  • 768 x 1,408(9:16 のアスペクト比)
  • 1,408 x 768(16:9 のアスペクト比)
  • 1,024 x 1,024 ピクセル(1:1 のアスペクト比)
  • 896 x 1,280(3:4 のアスペクト比)
  • 1,280 x 896(4:3 のアスペクト比)
  • 768 x 1,408(9:16 のアスペクト比)
  • 1,408 x 768(16:9 のアスペクト比)

他にできること

コンテンツ生成を制御する方法

サポートされているモデルの詳細

さまざまなユースケースで利用可能なモデルと、その割り当て料金について学びます。


Vertex AI in Firebase の使用感に関するフィードバックを送信する