ついに『ポケモンチャンピオンズ』が発売されましたね!
ランクマッチに潜り、あの1分間しかない「選出画面」を見ているとき、ふと思うことがありました。
「この選出画面を、AIがリアルタイムで解析してくれたら最強の軍師になるのでは?」
画面のスクリーンショットを撮った瞬間に、相手の6匹を認識し、先発・後発の予測やこちらの有利な選出を数秒で弾き出す――。そんな夢のリアルタイム選出支援ツールを、**PythonとGemini API(Google AI Studio)**を使って実際に作ってみました。
今回はその実装方法と、実際に動かしてみた結果を詳しく解説していきます。
興味があればぜひ試してみてください!
<フロー図>
[ 1. OBS Studio ] ── (ゲーム中に『alt + Z』を押す)
│
▼
[ 2. 特定フォルダに画像が保存される ]
│
▼ (ここを Python の watchdog が秒速で検知)
│
[ 3. Python(PyCharm上で起動中) ]
│
├──> ① 画像を読み込む (Pillowを使用)
│
├──> ② Gemini API(Google AI Studio)へ直接、画像とプロンプトを送信 (google-genaiを使用)
│
▼ (数秒後、AIからの回答を受信)
│
[ 4. PyCharmのコンソール(プロンプト画面)] ── (要点にまとまった解析結果がリアルタイムに表示される!)
注意
本件で作成するAI軍師は高いレベルでポンコツです!
画像解析の一例としてご認識ください。
Switch2とPCの接続
最初にSwitch2とPCを接続する必要があります。
ゲーム画面をPCに表示するためにはキャプチャカードが必要になります。
Amazonでも楽天でも近所の家電量販店でも好きなところで安いのを仕入れておきましょう。
※switch2をドックに接続しTV、ディスプレイに表示する場合、正規品の充電器が必要となります。
「画面映らねー!」とならないよう注意しましょう。
<フロー図>
[ Switch 2 ]
│
▼ (HDMIケーブル)
[ キャプチャボード ]
│
▼ (USBケーブル)
[ 配信・録画用PC ]
├── ① OBS Studio(ゲーム画面を映し、Ctrl+Sでスクショを保存する)
└── ② Python / PyCharm(フォルダを常時監視し、Gemini APIと連携する)
OBS Studioの設定
OBS Studioがインストールされている前提で話を進めます。
検索すればいくらでも設定方法は出てくるのでとばします。
ゲーム画面の撮影
以下の方法を使用して画像を撮影します。
ファイル → 設定 → ホットキー
絞り込みでスクリーンショットを検索 → テキトーなショートカットキーを登録(下の画像では Alt + Z)

保存先変更
好きなフォルダを選択(ここに撮影した画像が保存されます)
設定 → 出力 → 録画ファイルのパス

画像サイズの変更
調整する必要があるかは微妙ですが、AIに画像を渡す処理を行うため、サイズは小さくした方が処理速度が向上するかも?
設定 → 映像 → 出力解像度

Google AI StudioからAPIキーを取得する
Google AI StudioからAPIキーを取得します。
Googleアカウントがあれば簡単に取得できます。
トップページからDashboardを選択します。

右上から「APIキーを作成」をクリックします。

APIキーが作成されるため、赤枠の部分をクリックしてコピーできるようになります。

Pythonの実装
以下のコードを「~.py」ファイルとして保存します。
import time
import os
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from google import genai
# =====================================================================
# ⚙️ 設定項目
# =====================================================================
# OBSの「設定 > 出力 > 録画 > 録画ファイルのパス」と同じフォルダを指定してください
WATCH_FOLDER = r"画像の保存先"
GEMINI_API_KEY = "APIキー" # Google AI Studioで取得したAPIキー
# Geminiクライアントの初期化
client = genai.Client(api_key=GEMINI_API_KEY)
# =====================================================================
# 🧠 AIへの指示文(プロンプト)の定義
# =====================================================================
ANALYSIS_PROMPT = """
あなたはポケモンのシングルバトルにおける、超一流の軍師(データアナリスト)です。
提示された「選出画面のスクリーンショット」から【右側の敵陣】と【左側の自陣】のデータを正確に読み取り、要点のみを出力してください。
【⚠️ 画像認識・OCRの最重要指示】
1. 左右の混同厳禁:
- 画面の【右側(ピンク背景の枠)】が「相手(敵陣)の6匹」です。
- 画面の【左側(青背景の枠)】が「自分(自陣)の6匹」です。
2. テキスト(日本語)を最優先で読むこと:
- アイコンのドット絵の色合いだけで判断せず、各枠内に表示されている「ポケモンの名前(日本語のテキスト)」を確実にOCR(文字認識)して特定してください。実在しないポケモンを捏造(幻覚)することは絶対に許されません。
3. 思考のローカライズ(選出画面外のポケモン排除):
- 相手の戦術、初手、裏を予想する際は、直前の「■ 敵陣」であなたが実際にテキスト認識した6匹のデータのみを思考のソースにしてください。
- 「この構築なら普通〇〇がいるはず」という一般論での補完や、リスト外のポケモンの名前、およびそれらに依存する戦術を記述することは完全に禁止します。
以上のルールを徹底し、1秒で状況を把握できるよう【要点のみ】を箇条書きで出力してください。長文解説、挨拶、前置き、コードブロック(```)はすべて厳禁です。
■ 敵陣(正確に読み取った6匹の名前とタイプ)
・
■ 自陣(正確に読み取った6匹の名前と持ち物)
・
■ 敵の戦術(一言で)
【⚠️ 超重要:必ず直前の「■ 敵陣」に記載した6匹のリストに存在するポケモン“だけ”を対象に思考・出力してください。リストにないポケモンを登場させたり、それらを前提とした戦術(天候パなど)を推測することは厳禁です】
・軸:[対面 / サイクル / 起点展開 / 天候パ / その他]
・初手予想:[★必ず上記「敵陣」から選ぶこと:ポケモン名](理由:)
・裏の予想:[★必ず上記「敵陣」から選ぶこと:ポケモン名], [ポケモン名]
■ 推奨選出(結論)
・初手:【 ポケモン名 】
・裏:【 ポケモン名 】+【 ポケモン名 】
■ 初手の立ち回り(3行以内)
・
・
・
"""
# =====================================================================
# 🔍 フォルダ監視と解析の処理
# =====================================================================
class PokemonScreenShotHandler(FileSystemEventHandler):
def on_created(self, event):
# 新しいファイルが作成され、それが画像ファイル(PNG/JPG)の場合に実行
if not event.is_directory and event.src_path.endswith(('.png', '.jpg', '.jpeg')):
print(f"\n⚡ [検知] スクリーンショットを検出しました: {os.path.basename(event.src_path)}")
print("🤖 Geminiが選出画面を分析中...(数秒お待ちください)\n")
# 画像の読み込み(少しファイル生成の完了を待つためにウェイトを入れる)
time.sleep(0.5)
try:
# 【修正ポイント】Pillowを使って画像を開く形式に変更します
from PIL import Image
img = Image.open(event.src_path)
# Gemini 2.5 Flash で高速解析
response = client.models.generate_content(
model='gemini-2.5-flash',
contents=[
img, # 開いた画像をそのまま渡します
ANALYSIS_PROMPT
]
)
# PyCharmのコンソールに出力
print("=" * 60)
print("📊 【バトル分析・選出提案結果】 📊")
print("=" * 60)
print(response.text)
print("=" * 60)
print("\n次のスクリーンショットを待機中...")
except Exception as e:
print(f"❌ エラーが発生しました: {e}")
# =====================================================================
# 🚀 ツール起動
# =====================================================================
if __name__ == "__main__":
# 監視フォルダがない場合は自動作成
if not os.path.exists(WATCH_FOLDER):
os.makedirs(WATCH_FOLDER)
event_handler = PokemonScreenShotHandler()
observer = Observer()
observer.schedule(event_handler, WATCH_FOLDER, recursive=False)
observer.start()
print("=========================================================")
print("🎮 ポケモン選出画面 リアルタイム分析ツール 起動完了 🎮")
print(f"監視フォルダ: {WATCH_FOLDER}")
print("対戦画面で OBSのキャプチャ撮影行うと"
"、ここに解析が走ります。")
print("=========================================================")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
2カ所は自分のパソコン環境に合わせて変更します。
WATCH_FOLDER = r"画像の保存先"
GEMINI_API_KEY = "APIキー" # Google AI Studioで取得したAPIキー
モジュールも必要になるのでインストールしておきます。
| モジュール名 | インストール用コマンド | ツール内での役割 |
| watchdog。 | pip install watchdog | 指定したローカルフォルダを常時監視し、OBSでスクリーンショットが保存された瞬間をミリ秒単位で検知する |
| google-genai | pip install google-genai | Google AI Studio(Gemini API)にアクセスし、画像データとプロンプトを送信して解析結果を受け取るための最新の公式SDK |
| Pillow | pip install Pillow | バリデーションエラーを防ぐために、読み込んだ画像ファイルをGeminiがそのまま受け取れる正しい形式(PIL.Image)で開く |
一括インストールは以下のコマンドを実行
pip install watchdog google-genai Pillow
ツールの実行
ターミナルからコマンドを実行してツールを起動します。
※以下はpycharmを使用して実行しています。
start .\<ファイル名>.py

プロンプトが起動し待機状態に遷移します。

このウィンドウが開いた状態でOBSのスクリーンショットのショートカットを押します。
以下のように、選出画面のウィンドウだけ撮影できます。

撮影と同時にツールが動き出します。
20~30秒程度で解析結果が返答されます。

なかなか突っ込みどころ満載です。
所感
対戦結果は無事”じしんかじょう”、”ワルビアル”に3たてされました。。
AIが画像をスムーズに読み込めるようにサイズを小さくしていましたが、大きいサイズに変更した方が解析結果が安定するかもしれません。検証が必要です。
併せてレギュレーションを指定するなど、使用できるポケモンを指定できるようにプロンプトも調整が必要になりそうです。
気が向いたら改造するかもしれません。
最後に”Google AI Sutdio”に対して一日、約1500枚(1500試合分)画像をアップできるようです。
※Gemini談
以上

