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?

動画からアクション候補UIを構造化する前処理パイプライン

Last updated at Posted at 2026-01-11

YouTube動画からアクション候補認識まで:行動提案AIの前処理パイプライン構築

※ 本記事では特定のゲーム名は伏せ、技術的な構成と設計判断に焦点を当てています。


目的

リアルタイム対戦型モバイルゲームのプレイ動画から、

  • 画面に映るアクション候補UI(固定スロット数)を安定して認識

  • その結果を使って、将来的に

    • 「次に何を出すべきか」を提案するAI

を作るための 前処理・学習パイプライン を構築する。

本記事は、そのうち YouTube動画 → アクション候補認識モデル(CNN) までをまとめたものです。


全体構成(今回到達した地点)

※ 本記事では、画面下部に表示される「同時に選択可能なUI群」を
アクション候補UI と呼ぶ。
本実験環境では 4スロット構成 だが、設計自体は固定スロット数のUI一般に適用できる。

YouTube動画(mp4)
  ↓
ROI抽出(手札領域)
  ↓
4スロット分割・クロップ
  ↓
ラベリング(人手)
  ↓
CNN学習(8クラス)
  ↓
in_hand(8次元)を動画から推論

動画取得方法(著作権配慮)

  • YouTubeを スマホで再生
  • scrcpy でPCにミラーリング
  • Snipping Tool で ローカルに mp4 録画

この方法により:

  • 動画はローカル処理のみ
  • 画像データを公開せずに研究可能

学習用アクション集合(固定構成)の選択

なぜ「学習用アクション集合(固定構成)」が必要か

行動模倣(Behavior Cloning)では、
上手いプレイ動画が大量に存在することが極めて重要。

→ 学習用として、YouTubeに動画が豊富な
**固定構成系の定番アクション集合(固定構成)**を採用。


アクションID定義(固定クラス数・一般化)

※ 本記事では、画面上で選択可能な各操作単位を アクション と呼び、
それらを抽象的な アクションID として管理する。(8クラス分類・一般化)

ACTION_1
ACTION_2
ACTION_3
ACTION_4
ACTION_5
ACTION_6
ACTION_7
ACTION_8
  • 実際のアクション名・役割は内部定義のみで扱う
  • 記事・ログ・学習データ上は抽象IDのみを使用
  • これにより、ゲーム固有情報から切り離した設計が可能

ROI設計(最大の山場・一般化)

image.png

※ 上図は 特定のゲームに依存しない模式図 であり、
フルフレームから画面下部の「アクション候補UI(固定スロット数)」のみを
ROI(Region of Interest)として切り出す考え方を示している。

ROI(Region of Interest) とは、画面全体の中から「解析対象として切り出す領域」のことを指す。
本記事では、動画フレーム全体を直接解析するのではなく、
操作に関係するUIが存在する画面下部のみをROIとして切り出すことで、
計算量削減と精度向上の両立を図っている。

課題

  • 画面下部に「使用可能リソースUI」が存在
  • 手札は横並び(固定枚数)
  • 選択操作によりUIが一時的に移動する

方針

  • リソースUIは除外(学習ノイズ)
  • ただし操作時のUI移動は吸収する

確定したROIパラメータ(相対指定・一般化)

y_ratio      = 0.80
height_ratio = 0.14
x_margin     = 0.13
x_offset     = 0.09
  • すべて画面サイズに対する比率指定
  • 固有UI解像度に依存しない
  • 他ゲーム・他動画でも再調整しやすい

クロップ収集

python -m scripts.collect_hand_crops \
  --video XXXX.mp4 \
  --video-fps 4 \
  --max-frames 400 \
  --y-ratio 0.80 \
  --height-ratio 0.14 \
  --x-margin-ratio 0.13 \
  --x-offset-ratio 0.09
  • 4fps × 400フレーム
  • 各フレームから 4 枚 = 約1600画像

ラベリング設計

操作

1–8 : アクション割当
n   : スキップ(空・補充中・見切れ)
b   : 戻る
q   : 終了

重要ルール

  • 迷ったら必ず n
  • 空スロット/補充中フレームは教師にしない

CNN学習

python -m scripts.train_hand_cnn --labels data/hand_labels.jsonl
  • image_size: 96
  • augment: ON
  • session単位で train/valid split

学習結果は runs/yyyymmdd_xxxxxx/ に保存。


動画に対する推論

python -m scripts.infer_hand \
  --video XXXX.mp4 \
  --video-fps 4 \
  --max-frames 200 \
  --model runs/XXXX/model.pt \
  --y-ratio 0.80 \
  --height-ratio 0.14 \
  --x-margin-ratio 0.13 \
  --x-offset-ratio 0.09 \
  --smoothing majority \
  --history 5
  • 各時刻で in_hand(8次元)が出力
  • YouTube動画でも概ね安定

得られた知見(一般化)

  • ROI設計が全体難易度の大半を占める

  • 不要UI(リソースバー等)は積極的に除外する

  • 行動提案AIでは

    • 画像そのものより
    • 構造化された state(JSON)が強力

これらは特定のゲームに限らず、
リアルタイムUIを持つ多くのゲーム解析に共通する


次のステップ(次回記事)

  • in_hand の変化から

    • 「アクションを出した瞬間」を自動検出
  • card_id → ROLE 変換

  • state → ROLE の Proposal Model 学習


まとめ

YouTube動画という制約のある入力でも、

  • ROI設計
  • 安定化
  • 構造化

を丁寧に行えば、
実用的な教師データ生成パイプラインを構築できる。

次はこの土台の上で、
「考えるAI」側に進む。


続編予告(次回記事)

次回は、本記事で得られた アクション候補UIの時系列データ を用いて、

  • UIの変化から「操作イベント」を自動抽出する方法
  • ノイズ(誤認識・一時的な欠損)に強い判定ルール
  • 抽出したイベントを学習用データに変換する設計

についてまとめる予定です。

動画から直接「いつ・何を操作したか」を復元することで、
行動提案AI(Proposal Model) の学習データを自動生成するところまでを扱います。


この記事が、

  • ゲーム解析
  • 操作ログ復元
  • UI解析

といった分野に取り組む方の参考になれば幸いです。


アクション抽出ロジック図解(続編用)

以下は、動画から推論した アクション候補UIの時系列状態 から、
実際の「操作イベント(action)」を抽出するロジックの全体像です。

動画フレーム
   │
   ▼
[UI領域クロップ]
   │
   ▼
[各スロット分類CNN]
   │
   ▼
時系列 state
(in_hand: 固定次元ベクトル)
   │
   │  例: t_ms ごとに
   │  [1,0,1,1,0,1,0,1]
   │
   ▼
[前フレームとの差分]
   │
   │  1 → 0 の変化を検出
   │
   ▼
操作候補イベント
(card_id, t_ms)
   │
   │  ・単発ノイズ除去
   │  ・連続フレーム確認
   │
   ▼
確定 action
(used_action_id, t_ms)

差分検出の考え方

t = 1000ms : [1,1,0,1,0,1,0,1]
t = 1266ms : [1,0,0,1,0,1,0,1]
                ↑
        このスロットが 1→0
  • 1 → 0 : 操作によって消費された可能性
  • 0 → 1 : 新しい候補が補充された(actionではない)

ノイズ耐性のためのルール

  • 同じ 1→0 変化が Nフレーム連続(例: N=3)した場合のみ確定
  • 一時的な欠損(3枚になる等)は無視
  • 直後の 0→1 変化は「補充」として区別

出力される action データ(例)

{
  "t_ms": 4800,
  "used_action_id": "ACTION_3"
}

この action データと、同時刻の state を組み合わせることで、

(state_t) → (action_t)

という 行動模倣(Behavior Cloning)用データセット を自動生成できる。


※ 本図解は、特定のゲームに依存しない
リアルタイムUI操作ログ復元 の一般的な手法を示している。

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?