コンセプト

VLMに画面全体を見せても、詳細は認識できない。
人間の視覚と同じように「全体を把握→注目点にフォーカス」する2段階認識で精度を上げる。

問題: 全体画像では詳細が見えない

VLM(GPT-4V、Claude等)に1920×1080のフルスクリーンを1枚見せても:

  • 小さいボタンの文字が読めない
  • 細かいUI要素を認識できない
  • 「どこに何があるか」は分かるが「詳細」は分からない

人間も同じ。画面全体をぼんやり見ても細部は見えない。注目したい部分に目を向けて初めて詳細が見える。

解決: 全体把握 + グリッドフォーカス

2段階認識アプローチ

  1. 全体把握: フルスクリーン1枚で「どこに何があるか」を把握
  2. グリッド選択: 詳細を見たい領域のタイル番号を選択
  3. 詳細フォーカス: 選択したタイル2-3枚で詳細を認識

24分割グリッド

画面を6×4の24タイルに分割。タイル番号で領域を指定。

┌──────┬──────┬──────┬──────┬──────┬──────┐
│  1   │  2   │  3   │  4   │  5   │  6   │
├──────┼──────┼──────┼──────┼──────┼──────┤
│  7   │  8   │  9   │ 10   │ 11   │ 12   │
├──────┼──────┼──────┼──────┼──────┼──────┤
│ 13   │ 14   │ 15   │ 16   │ 17   │ 18   │
├──────┼──────┼──────┼──────┼──────┼──────┤
│ 19   │ 20   │ 21   │ 22   │ 23   │ 24   │
└──────┴──────┴──────┴──────┴──────┴──────┘

構成ツール

1. Screen Capture 24Grid

画面を24分割し、指定タイルのみを取得。

  • タイル番号での指定(左上=1、右下=24)
  • 個別タイル or 複数タイル指定可能
  • 全体把握用の縮小画像も出力可能
# 全体把握 + タイル8,9(画面上部中央)を詳細取得
python screen_capture_24grid.py --overview --tiles 8,9

2. Screen Diff Detector

前回との差分を検知し、変化があったタイルを自動選択。

  • 前回スクリーンショットとの差分を24分割単位で検知
  • 変化があったタイルのみを抽出
  • 「どこが変わったか」を自動でフォーカス
# 前回との差分を検知し、変化部分のみフォーカス
python screen_diff_detector.py --threshold 0.05

3. OCR Text Locator

テキストの座標を取得し、該当タイルを特定。

  • OCRでテキスト検出
  • テキストの画面上座標を取得
  • 「送信ボタンはどのタイルか」を自動特定
# "送信"ボタンがあるタイルを特定
python ocr_text_locator.py --text "送信"

設計思想: 人間の視覚認知と同じ

なぜ24分割なのか?

  • 人間の視覚認知: 一度に認知できる範囲は限定的
  • 視線追跡研究: 注目領域は全体の10-20%程度
  • Fの法則: 左上→右→左下の視線移動パターン

VLMも同じ。全体を見せるより、「ここを見ろ」と領域を絞った方が精度が上がる。

CLI/自動化向け設計

  • 番号指定: 「タイル8,9を見せろ」がコマンド1行
  • 差分検知: 「変わった部分だけ見せろ」が自動
  • パイプライン統合: 他のCLIツールと組み合わせ可能

インストール

必須環境

  • Python 3.8+
  • macOS / Linux / Windows

依存パッケージ

pip install pillow numpy opencv-python pytesseract

Tesseract OCR(OCR使用時)

# macOS
brew install tesseract

# Ubuntu/Debian
sudo apt-get install tesseract-ocr