SSBUFrameAnalyzer
About
いまのところ、スマブラSPのスクリーンショットから「ダメージ値」・「おなまえ」を取得できる(ただし2人対戦のみ)。フルで毎フレーム処理できるほどのFPS出ないと思う。
適当なSSで動かした目安FPS(ノートPC): 2.766284 (0.361496 s)
基本的にターゲットの場所を(座標決め打ちで)切り抜いて処理にかけてる。
ダメージ値の取得
HOG特徴量使ったk-nnにしたけど、適当に確認して(写真と違ってノイズ入らないし、バリエーションも少ない)問題なさそうだったのでとりあえずTop1しか使ってない。すごい。
(被ダメージ・ふっとびで)エフェクトかかると取れなくなるだろうけど、自動化するなら前フレーム維持/スキップでいいと思って考慮してない。
参照データ数減らせばちょっと速くなるだろうけど、OCRの方が負荷大では(試合中にほぼおなまえ変わらないし、別にいいのか? 団体戦?)。
おなまえの取得
Tesseract使ってOCR。たまに精度あやしいけどだいたいOK。すごい。
か→が、ぷ→ふ、みたいに濁点/半濁点に弱そう。
おなまえの長さ上限10文字までいけると思う(ひらがな10文字はためしてOK)。
TODO
- ファイター数の推定
- どうすればいいんだ。(自動化して連続的にとるなら)一回推定すればいい気がするから、遅延気にせずHOG系の枠を一通り試行してうまくいった組み合わせを採用?
- 各種bboxの自動算出
- ファイター種類(キャラクタ ー)の推定
- HOGでいけるだろうけど、データ集めが面倒
- ファイター種類(キャラクタ ー)の推定
- ストック数の推定
- ホカホカ(高被ダメージ)のときエフェクトが重なるのがあぶない
- 残タイムの推定
- タイム∞のとき表示されない例外
- 背景ころころ変わるので精度出そうと思ったらknnな気がする......
Example
{'fighters': {0: {'name': 'ふれいやー', 'damage': 141.3}, 1: {'name': 'KOOPA', 'damage': 101.5}}}FPS: 2.499149 (0.400136 s)
濁点/半濁点は苦手...。プレイヤー→フレイヤーさん。