Closed3

Gemini 2.0 Flashで複数画像をもとに新規画像を生成する(=合成)機能の実装

enumura1enumura1

バックエンド側のGemini API呼び出し

index.py
def compose_images_sync(base64_images: list[str], prompt: str):
  # Base64画像をPIL Imageに変換
  pil_images = convert_images_to_pil(base64_images)

  # Gemini APIに送信するコンテンツを構成
  # [画像1, 画像2, 画像3, "プロンプト文字列"]の形式
  contents = pil_images + [prompt]

  # Gemini 2.0 Flash APIを呼び出し
  response = client.models.generate_content(
      model="gemini-2.0-flash-preview-image-generation",
      contents=contents,
      config=GenerateContentConfig(
          response_modalities=[Modality.TEXT, Modality.IMAGE]
      )
  )

  # 生成された画像を取得
  for part in response.candidates[0].content.parts:
      if part.inline_data:
          return part.inline_data.data

結果

選択した複数の画像+テキストベースのプロンプトを組み合わせて新しい画像が生成。
プロンプトの指示に従って合成画像を生成した。

バックエンドログAPIログ例
INFO: 画像合成リクエストを受信: 画像数=3, プロンプト=これらの画像の特徴を組み合わせ...
INFO: 123~~~~:xxxxx - "POST /api/images/mix HTTP/1.1" 201 Created
INFO: 画像合成が成功しました: 生成画像数=1
enumura1enumura1

エラーの対処

502エラーが出た場合

リージョンの問題だった。
下記のリージョンだと失敗した。

region = "us-west1"

下記のリージョンだと成功すると確認。

region = "us-central1"
このスクラップは1ヶ月前にクローズされました