API経由でGemini Image(Nano Banana)で画像生成する(テキストからの生成編)

Googleが出した新しい画像生成モデルが話題になっている。もともとNano Bananaという名前でリークしていたモデルだが、正式には「Geminiネイティブ画像」という機能としてリリースされた。

Googleの画像生成モデルとしてはすでにImagenがあるが、Geminiネイティブ画像とImagenは目的に応じて使い分ける形で共存していくようだ。デフォルトの推奨は「Geminiネイティブ画像」の方だが、写実的な画像生成、タイポグラフィなどはImagenの方が優れているようだ。料金はほとんど変わらない。

https://ai.google.dev/gemini-api/docs/image-generation?hl=ja#choose-a-model

Geminiネイティブ画像の方は、Imagenに比べると柔軟なアプローチでの画像生成ができるようになっており、Inputに複数の画像を渡して合成させたり、といったImagenにはできない機能が色々ある。

Geminiネイティブ画像はGoogle GenAI SDKでも利用できるようになっているので、今回もGenAI SDK経由での画像生成を試してみる。まずはGenAIのクライアントを生成する。必要に応じて環境変数で GEMINI_API_KEY か GOOGLE_API_KEY を設定しておく。

from google import genai
client = genai.Client()

Imagenでの画像生成はgenerate_imageメソッドを使ったが、Geminiで画像生成をする際にはgenerate_contentの方を使用するらしい。

response = client.models.generate_content(
    model="gemini-2.5-flash-image-preview",
    contents=["Stuffed crocodile holding a yellow flag"],
)

generate_imageでImagenを使って画像生成をする際にはアスペクト比などを指定できたが、generate_contentの方にはそういったオプションは見当たらず、2025年8月現在ドキュメント内でもそのあたりの仕様についての言及はほとんどない。

from IPython.display import display
from PIL import Image

for part in response.candidates[0].content.parts:
    if part.text is not None:
        print(part.text)
    elif part.inline_data is not None:
        image = Image.open(BytesIO(part.inline_data.data))
        display(image)

generate_contentのレスポンスにはtextとinline_dataの両方が含まれており、inline_dataの方に生成された画像のバイト列が含まれている。PILのImageに変換してから利用する。Google Colab環境の場合はdisplay関数を使って画面に画像を表示することができる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です