はじめに
画像をベクトル化するというテーマをもとに、Googleが提供する2つのAI APIの明確な用途の違いが見えてきました。
GoogleのAI機能を使うと言っても、現在、API Keyで手軽に使えるGemini APIと、Google Cloud上で堅牢に運用するVertex AIが存在します。
本記事では、両APIの違い、それぞれのメリット・デメリットを、「画像ベクトル化」という具体的なタスクを通して比較し、
プロトタイピングから本番環境へスケールする際の正しいAPI選択方法を詳しく解説します。
比較対象のAPI
Gemini API (gemini-embedding-001)
- 提供形態: Google AI Studio経由
- 認証方式: API Key
- 対象ユーザー: 個人開発者、プロトタイピング
- 特徴: 簡単にセットアップ可能
※画像専用のモデルが存在しないので上記モデルを使用
Vertex AI Multimodal Embedding API (multimodalembedding@001)
- 提供形態: Google Cloud Vertex AI
- 認証方式: サービスアカウント(IAM)
- 対象ユーザー: エンタープライズ、本番環境
- 特徴: 堅牢で高精度
主要な違い一覧
スペック比較表
| 項目 | Gemini API | Vertex AI |
|---|---|---|
| ベクトル次元 | 768次元 | 1408次元 |
| 認証方式 | API Key | サービスアカウント |
| セットアップ | 5分 | 15分 |
| 画像サイズ制限 | 36KB(Base64後) | 大きい画像対応 |
| 処理方式 | Base64エンコード | ファイルベース |
| エラーメッセージ | 曖昧 | 詳細 |
| 料金 | 従量課金 | 従量課金 |
| SLA | なし | あり |
| 本番環境適性 | △ | ◎ |
認証方式の違い
Gemini API: シンプルなAPI Key認証
メリット
- ✅ すぐに始められる
- ✅ 環境変数1つで完結
- ✅ プロトタイピングに最適
デメリット
- ❌ API Keyの管理が必要
- ❌ 権限制御が粗い
- ❌ 本番環境では不安
import google.generativeai as genai
# 環境変数から読み込むだけ
genai.configure(api_key=os.environ.get('GOOGLE_API_KEY'))
model = genai.GenerativeModel('models/embedding-001')
Vertex AI: エンタープライズ向けサービスアカウント認証
メリット
- ✅ IAMによる細かい権限制御
- ✅ サービスアカウントの監査ログ
- ✅ 本番環境で安心
デメリット
- ❌ 初期セットアップが複雑
- ❌ プロジェクトが必要
- ❌ JSONキーファイルの管理
import vertexai
from vertexai.vision_models import MultiModalEmbeddingModel, Image as VertexImage
# プロジェクトとリージョンを指定
vertexai.init(project="YOUR_PROJECT_ID", location="us-central1")
model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding@001")
Dockerでの認証設定比較:
# Gemini API - シンプル
services:
backend:
environment:
- GOOGLE_API_KEY=your_api_key
# Vertex AI - 堅牢
services:
backend:
environment:
- GCP_PROJECT_ID=your-project-id
- GCP_LOCATION=us-central1
- GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json
volumes:
- /path/to/service-account-key.json:/app/credentials.json:ro
ベクトル次元の違い
これは検索精度に直結する最も重要な違いです。
| API | 次元数 | 特徴 |
|---|---|---|
| Gemini API | 768次元 | 標準的な精度 |
| Vertex AI | 1408次元 | より細かい特徴を表現可能 |
影響範囲:
-- データベーススキーマも異なる
CREATE TABLE images_gemini (
embedding VECTOR(768) -- Gemini API
);
CREATE TABLE images_vertex_ai (
embedding VECTOR(1408) -- Vertex AI
);
重要: 異なる次元のベクトルは比較できません!
画像処理の違い
Gemini API: Base64エンコード方式
import base64
def encode_image(image_path):
with open(image_path, 'rb') as f:
image_bytes = f.read()
# Base64エンコードが必要
return base64.b64encode(image_bytes).decode('utf-8')
問題点
- ❌ Base64エンコードでサイズが約1.33倍に増加
- ❌ ペイロード制限: 36KB → 実質27KBの画像まで
- ❌ 大きな画像は処理できない
実際のエラー
ERROR: 400 Request payload size exceeds the limit: 36000 bytes
Vertex AI: ファイルベース方式
def _prepare_image_file(self, image_source):
"""画像を一時ファイルとして準備"""
temp_file = tempfile.NamedTemporaryFile(suffix='.jpg', delete=False)
img = Image.open(image_source)
# RGB形式に変換
if img.mode != 'RGB':
img = img.convert('RGB')
# 必要に応じてリサイズ
max_dimension = 1024
if max(img.width, img.height) > max_dimension:
ratio = max_dimension / max(img.width, img.height)
new_size = (int(img.width * ratio), int(img.height * ratio))
img = img.resize(new_size, Image.Resampling.LANCZOS)
# 一時ファイルに保存
img.save(temp_file.name, format='JPEG', quality=95, optimize=True)
return temp_file.name
メリット
- ✅ より大きな画像に対応
- ✅ Base64エンコード不要
- ✅ 柔軟なリサイズ処理
実装コードの違い
Gemini API実装例
class GeminiImageVectorizer:
def __init__(self):
api_key = os.environ.get('GOOGLE_API_KEY')
if not api_key:
raise ValueError("GOOGLE_API_KEY environment variable is not set")
genai.configure(api_key=api_key)
self.model = genai.GenerativeModel('models/embedding-001')
def vectorize_image(self, image_path):
# Base64エンコードが必要
with open(image_path, 'rb') as f:
image_data = base64.b64encode(f.read()).decode('utf-8')
result = self.model.embed_content(
content={"image": image_data}
)
return result.embedding # 768次元
Vertex AI実装例
class VertexAIImageVectorizer:
def __init__(self):
project_id = os.environ.get('GCP_PROJECT_ID')
location = os.environ.get('GCP_LOCATION', 'us-central1')
vertexai.init(project=project_id, location=location)
self.model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding@001")
def vectorize_image(self, image_path):
# ファイルパスを直接使用
temp_file = self._prepare_image_file(image_path)
try:
image = VertexImage.load_from_file(temp_file)
embeddings = self.model.get_embeddings(image=image)
return embeddings.image_embedding # 1408次元
finally:
# 一時ファイルを削除
if os.path.exists(temp_file):
os.unlink(temp_file)
セットアップ方法の比較
Gemini APIのセットアップ
ステップ1: API Keyを取得
1. https://ai.google.dev/ にアクセス 2. "Get API Key" をクリック 3. 新しいプロジェクトを作成またはキーを作成 4. API Keyをコピー
ステップ2: 環境変数を設定
# .envファイルまたはdocker-compose.yml GOOGLE_API_KEY=your_api_key_here
ステップ3: 依存関係をインストール
pip install google-generativeai
完了! すぐに使い始められます。
Vertex AIのセットアップ
ステップ1: プロジェクトを作成
1. https://console.cloud.google.com/ にアクセス 2. 新しいプロジェクトを作成 3. プロジェクトIDをメモ
ステップ2: Vertex AI APIを有効化
1. APIとサービス > ライブラリ 2. "Vertex AI API" を検索 3. 有効化をクリック
ステップ3: サービスアカウントを作成
1. IAMと管理 > サービスアカウント 2. サービスアカウントを作成 3. 権限を付与: "Vertex AI User" 4. JSONキーをダウンロード
ステップ4: 環境変数とボリュームを設定
# docker/compose.yml
services:
backend:
environment:
- GCP_PROJECT_ID=your-project-id
- GCP_LOCATION=us-central1
- GOOGLE_APPLICATION_CREDENTIALS=/app/credentials.json
volumes:
- /path/to/service-account-key.json:/app/credentials.json:ro
ステップ5: 依存関係をインストール
pip install google-cloud-aiplatform vertexai
ステップ6: コンテナを再ビルド
docker compose down docker compose build --no-cache backend docker compose up -d
セットアップの難易度
| 項目 | Gemini API | Vertex AI |
|---|---|---|
| プロジェクト | 不要 | 必須 |
| 課金設定 | 不要 | 必須 |
| IAM設定 | 不要 | 必須 |
| 難易度 | ⭐ 簡単 | ⭐⭐⭐ やや複雑 |
コスト比較
Gemini API(2025年10月時点)
画像エンベディング: 1,000リクエストあたり約$0.03
Vertex AI(2025年10月時点)
画像エンベディング: 1,000リクエストあたり約$0.025
コストはほぼ同じ(Vertex AIがわずかに安い)
実際の検索精度の違い
Gemini APIでは大きい画像が扱えずリサイズ及びBase64エンコードが必要なため、
Vertex AIの精度と比較するとかなり悪い結果に。
Gemini APIは画像エンコード専用のモデルではないので当然と言えば当然の結果となりました。
まとめ
Gemini API
メリット
- ✅ 簡単にセットアップできる
- ✅ すぐに試せる
- ✅ プロトタイピングに最適
デメリット
- ❌ ペイロードサイズ制限(36KB)
- ❌ 本番環境には不向き
- ❌ エラーハンドリングが弱い
Gemini APIを選ぶべきケース
✅ こんな場合におすすめ
- プロトタイピング・概念実証
- 個人プロジェクト
- すぐに始めたい
- 小さい画像のみを扱う
- 検索精度は標準レベルで十分
❌ 避けるべきケース:
- 本番環境での運用
- 大きな画像を扱う
- エンタープライズ要件
- 高精度が必要
Vertex AI Multimodal Embedding API
メリット
- ✅ 高精度(1408次元)
- ✅ 大きな画像に対応
- ✅ エンタープライズ対応
- ✅ 堅牢な認証
- ✅ 詳細なエラーメッセージ
デメリット
- ❌ セットアップがやや複雑
- ❌ プロジェクトが必要
Vertex AIを選ぶべきケース
✅ こんな場合におすすめ
- 本番環境での運用
- エンタープライズ要件
- 大きな画像を扱う
- 高精度な検索が必要
- 堅牢な認証が必要
- SLAが必要
❌ 避けるべきケース
- すぐに試したいだけ
- プロジェクトを作りたくない
- シンプルさ重視
Gemini APIは、API Key認証による手軽さに特化しており、PoCや小規模な検証といった用途に向いています。
一方、画像ベクトル化のような高精度(1408次元)かつスケーラブルな作り込みが必要な高度な処理は、IAM認証やSLAが提供されるVertex AIに集約されていることが明確にわかりました。
この特徴と、シンプルさ vs 堅牢性という軸を活かして、開発フェーズに合ったAPIを選択されるのが最善です。