0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

続編:プレイ動画から自動でタップ位置を推定する AI を作る(tap‑teacher 〜 推論CLIまで)

Last updated at Posted at 2026-01-12

続編:プレイ動画から自動でタップ位置を推定する AI を作る(tap‑teacher 〜 推論CLIまで)

この記事はhttps://qiita.com/y4o4/items/a68163ca6c7f5cfe2596 の続きです。

前編では、scrcpy + mouse capture による tap teacher パイプライン(画面録画+タップログ取得)までを構築しました。
本稿ではその後の

  • タップ位置ラベルの自動生成(diff + tap prior)
  • 学習用 manifest の構築
  • 位置分類モデルの学習
  • 推論 CLI の実装と評価

までを一気通貫で解説します。


1. tap‑teacher を安定稼働させる

1.1 画面録画とタップログ取得

PowerShell から以下を実行します。

.\tools\run_tap_teacher_mouse.ps1 `
  -Seconds 120 `
  -OutDir runs `
  -Scrcpy "C:\path\to\scrcpy.exe"
  • scrcpy で画面を表示・録画
  • マウス左クリックを frame 座標で記録
  • 録画後に ROI(盤面領域)を手動選択

出力例:

runs\run_YYYYmmdd_HHMMSS\
  video.mp4
  actions_tap.jsonl
  taps.csv
  meta.json
  debug_pos/

2. タップ位置ラベル付け(diff + prior)

動画と tap ログから、spawn 位置(cell_id) を推定します。

python tools\label_position_from_diff.py `
  --video runs\run_xxx\video.mp4 `
  --actions runs\run_xxx\actions_tap.jsonl `
  --out runs\run_xxx\actions_tap_pos.jsonl `
  --grid-w 18 --grid-h 11 --dt-ms 900 `
  --tap-prior --tap-sigma-frac 0.20 `
  --debug-dir runs\run_xxx\debug_pos

ポイント

  • diff 強度ベースで候補セルを列挙
  • tap 座標がある場合のみ距離 prior を適用
  • 動画末尾など frame が取れない tap は 安全に skip(落ちない)

3. 学習用 manifest.jsonl の生成

学習では diff 画像パスと cell_id をまとめた manifest 形式を使います。

python tools\build_pos_dataset.py `
  --input runs\run_xxx\actions_tap_pos.jsonl `
  --debug-dir runs\run_xxx\debug_pos `
  --out runs\run_xxx\manifest.jsonl `
  --min-conf 0.7

複数 run を結合して大規模データセットにできます。


4. 位置分類モデルの学習

4.1 train / val split

python tools\build_pos_dataset.py `
  --input all_manifest.jsonl `
  --out-train train.jsonl `
  --out-val val.jsonl `
  --val-ratio 0.2 --seed 42

少量データで val=0 になる場合も、runner 側で安全に fallback します。

4.2 学習

python train_pos_model.py `
  --train-manifest train.jsonl `
  --val-manifest val.jsonl `
  --grid-w 18 --grid-h 11 `
  --img-size 224 `
  --batch-size 32 `
  --epochs 15 `
  --lr 1e-3 `
  --seed 42 `
  --out runs\pos_train\exp_001

出力メトリクス

  • top1 / top3
  • mean_manhattan
  • within1 / within2 / within3(実用指標)

5. 推論 CLI(infer_pos_model.py)

学習済みモデルで manifest → pred 付き JSONL を生成します。

python infer_pos_model.py `
  --model runs\pos_train\exp_001\model.pt `
  --manifest val.jsonl `
  --grid-w 18 --grid-h 11 `
  --img-size 224 `
  --out pred_val.jsonl `
  --topk 5

標準出力に集計結果が表示されます:

within1=0.23
within2=0.31
within3=0.35

「正解セル±1〜2セル以内」にかなり寄っていることが分かります。


6. 評価の考え方

  • top1 正解率だけを見ると低く見える
  • 実運用では 近傍に当てることが重要
  • withinK 指標が実用性を示す

7. 次のステップ(YouTube 転移)

この位置モデルは diff 画像入力なので、YouTube 動画にも適用可能です。

  • YouTube 動画から frame 差分を切り出す
  • infer_pos_model で cell_id を推定
  • 自動ラベル → 再学習

これで 教師なしに近い大量データ生成ループが完成します。


おわりに

本記事では tap teacher から始まり、
ラベル生成 → 学習 → 推論までを一気通貫で構築しました。

ここまで来れば、精度改善(3ch入力、モデル拡張)はすべて“上積み”です。


次回は:
YouTube 動画から自動で位置ラベルを生成する推論パイプライン を解説予定です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?