こんにちは、しましまです。
皆さんは数ヶ月前に発売されたモンスターハンターワイルズをプレイしていますか。
私はそこそこプレイしています。
今回はモンスターハンターのプレイ動画からOCRを用いてダメージ表記を分析できたらと思い、お試しとして抽出するコードを作成してみました。

はじめに
本作のダメージ計算はランダム性がないため、情報さえ揃っていればダメージ表記からどの部位に攻撃しているかがわかるようになっています。
そのため、動画からダメージ表記を抽出できれば、プレイヤーの動きの分析に役立ちそうというなかなか頭お花畑な発想から着手に至りました。
実際のプレイ画面は以下のような画面となっています。

環境
以下の環境で開発を行いました。
- Python
- Flask
- easyocr
実装
以下の機能の実装を行いました。
- 動画、画像をアップロードできる
- アップロードした動画、画像から数値を検出する
- アップロードしたファイルが動画の場合、進捗率を表示し、検出した数値、秒数を出力する
- アップロードしたファイルが動画の場合、指定したフレームでスクリーンショットを撮り、検出した文字を緑線で枠取りした画像を保存する
- アップロードしたファイルが画像の場合、検出した文字を緑線で枠取りした画像を保存する
結果
動画の場合
動画の場合は精度がかなり低かったです。
文字を数字として見てしまっていたり、数字を正しく検出できていないことがわかります。

画面に出力した一覧でも、0始まりの値を検出してしまっていることから、
精度がよろしくないことがわかりました。
一部はうまくいっていること、後述する画像の結果は悪くなかったので、改善の余地はありそうです。

画像の場合
画像はかなりいい感じに取得できました。
ただし、複数あるダメージ表記のうち、一件しか取得できませんでした。

やってみた感想
課題が多すぎて心折れました。
具体的な課題としては以下のものがあります。
- 画面内のダメージ表記以外の情報が多すぎること
- ダメージ表記がモンスター×モンスターでの縄張り争いでも発生すること
- 攻撃モーションによって攻撃の倍率が異なるため、違う部位に攻撃していたとしても同じ数字が出る可能性があること
- 前提の「情報さえ揃っていれば」がなかなか無茶苦茶言ってること
etc…
ただPython未経験でもある程度簡単に取り組めたことが発見として一番大きいです。(AIに感謝)
もう少し精度をあげられたら他のツール作成にも役立てそうなので、今後も精度をあげる手段を模索していきます。