[備忘録] Google Colab で Gemini 2.0 Flash (プレビュー版) で画像生成を試してみた 🍛


Google の Gemini 2.0 Flsh では、テキストプロンプトから画像を生成できる機能が追加されました。
この記事では、Google Colab を使って実際に画像生成を行う方法を試した備忘録です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/efd0b86b-8476-4875-8a5c-02efc9c3f1e2.png)

## 前提条件

- Google Colab のアカウント
- Gemini API キー（Google AI Studio で取得可能）


## API キーの設定

Google Colab のシークレット機能を使ってAPI キーを安全に管理します。

1. Colab の左サイドバーから「シークレット」（🔑）をクリック
2. 「新しいシークレット」で `GEMINI_API_KEY` という名前でAPI キーを追加
3. 「ノートブックアクセス」を有効にする

## 実装コード

以下のコードで画像生成を実行できます。

```python
from google import genai
from google.genai import types
from PIL import Image
from io import BytesIO
import os
from google.colab import userdata

# クライアント初期化
client = genai.Client(api_key=userdata.get('GEMINI_API_KEY'))

# カレー画像生成
prompt = "湯気が立ち上る、白いご飯に濃厚でとろみのあるカレールーがたっぷりとかかっている、日本の家庭風カレーライス。柔らかく煮込まれた牛肉、大ぶりのじゃがいも、にんじんが具だくさんに盛られている。木のテーブルの上に置かれ、暖かみのあるオレンジ色の照明で美味しそうに照らされた、料理雑誌の1ページのような高品質な写真風イメージ。"

response = client.models.generate_content(
    model="gemini-2.0-flash-preview-image-generation",
    contents=prompt,
    config=types.GenerateContentConfig(
        response_modalities=['TEXT', 'IMAGE']
    )
)

# 画像保存
for part in response.candidates[0].content.parts:
    if part.text is not None:
        print(f"説明: {part.text}")
    elif part.inline_data is not None:
        image = Image.open(BytesIO(part.inline_data.data))
        image.save('curry.png')
        print("カレー画像を保存しました！")
        image.show()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/89bc212e-aef7-4b3b-b49f-57303f479498.png)


## コードの解説

### 1. ライブラリのインポート
- `google.genai`: Gemini API のクライアント
- `PIL.Image`: 画像処理
- `BytesIO`: メモリ上でのバイナリデータ処理
- `google.colab.userdata`: Colab のシークレット機能

### 2. クライアント初期化
```python
client = genai.Client(api_key=userdata.get('GEMINI_API_KEY'))
```
Colab のシークレット機能からAPI キーを取得してクライアントを初期化します。

### 3. プロンプトの作成
```python
prompt = ""
```
具体的で詳細なプロンプトを作成することで、より期待に近い画像が生成されます。

### 4. 画像生成の実行
```python
response = client.models.generate_content(
    model="gemini-2.0-flash-preview-image-generation",
    contents=prompt,
    config=types.GenerateContentConfig(
        response_modalities=['TEXT', 'IMAGE']
    )
)
```
- `model`: 画像生成専用のモデルを指定
- `response_modalities`: テキストと画像の両方を生成するように設定

### 5. 結果の処理
```python
for part in response.candidates[0].content.parts:
    if part.text is not None:
        print(f"説明: {part.text}")
    elif part.inline_data is not None:
        image = Image.open(BytesIO(part.inline_data.data))
        image.save('curry.png')
        print("カレー画像を保存しました！")
        image.show()
```

おいしそうなカレーの画像を生成することができました。結果は利用規約の都合もあり省略しています。

## 実行結果

このコードを実行すると、以下のような結果が得られます：

1. 画像の説明テキストがコンソールに表示される
2. 生成された画像が `curry.png` として保存される
3. Colab 上で画像が表示される

## プロンプトのコツ

より良い画像を生成するためのプロンプトのポイント：

- 具体性: 「美味しそうな」「とろっとした」など感覚的な表現を含める
- 詳細: 材料、色、照明などの具体的な要素を指定
- スタイル: 「料理写真」「暖かい照明」など撮影スタイルを明示

## 注意点

- この記事で試したGemini 2.0 Flash の画像生成機能はプレビュー版のため、将来的に仕様が変更される可能性があります
- API の利用制限や料金体系を事前に確認してください
- 生成される画像の品質は、プロンプトの書き方に大きく依存します

## まとめ

Gemini 2.0 Flash を使った画像生成は、Google Colab で簡単に試すことができます。具体的で詳細なプロンプトを作成することで、期待に近い画像を生成できるでしょう。ぜひ様々なプロンプトを試して、画像生成の可能性を探ってみてください。

Google AI Studioでも画像生成は試せますが、APIから呼び出す処理を実際に作ってみたくてやってみました。

## 参考資料

- [Gemini API ドキュメント](https://ai.google.dev/gemini-api/docs)
- [Google AI Studio](https://aistudio.google.com/)
- [Google Colab](https://colab.research.google.com/)

## 免責事項

※Gemini API の技術検証を目的として生成・掲載しており、商用利用は行っておりません。  
この備忘録みて試すときにはGooglenの利用規約を確認することを推奨します。

https://ai.google.dev/gemini-api/terms?hl=ja