コンセプト
VLMに画面全体を見せても、詳細は認識できない。
人間の視覚と同じように「全体を把握→注目点にフォーカス」する2段階認識で精度を上げる。
問題: 全体画像では詳細が見えない
VLM(GPT-4V、Claude等)に1920×1080のフルスクリーンを1枚見せても:
- 小さいボタンの文字が読めない
- 細かいUI要素を認識できない
- 「どこに何があるか」は分かるが「詳細」は分からない
人間も同じ。画面全体をぼんやり見ても細部は見えない。注目したい部分に目を向けて初めて詳細が見える。
解決: 全体把握 + グリッドフォーカス
2段階認識アプローチ
- 全体把握: フルスクリーン1枚で「どこに何があるか」を把握
- グリッド選択: 詳細を見たい領域のタイル番号を選択
- 詳細フォーカス: 選択したタイル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