ソフトウェアでウイイレの選手の動きを自動抽出させてみた 

# ウイイレのデータ解析自動化してくよ！ Part5

## ■はじめに
* どうも[ヤジュン](https://qiita.com/junya0001000/items/ccb673ba7c07a57e6d8a#%E5%8F%82%E8%80%83url)です。
    本記事は、**「eスポーツ」x「エンジニアリング」を合言葉に、「ウイイレ用の解析ソフト」を作っていく記事** になります。
    ご興味ありましたら [バックナンバー](https://qiita.com/junya0001000) もどうぞ～
    
    本記事のソフトはPythonで書いています。
    参照したサイトは[■参考URL](https://qiita.com/junya0001000/items/8c5479b9fa084bcec307#%E5%8F%82%E8%80%83url)にまとめてあります。

## ■2020年のeスポーツ国体
* 最近のウイイレでは、**[2020年の鹿児島国体](https://e-football.konami.net/kokutai2020/)** に向けた練習を行うチームがチラホラ出てきました。   
    
    国体で採用されたのは **[2on2](https://www.youtube.com/watch?v=tcmc8fAgmF8)** 形式！
    2人のプレイヤーで、11人の選手を操作します。
    ウイイレでは、11人のプレイヤーで11人の選手を1人ずつ操作することも可能です♪
    
    複数人プレイで重要なスキルは、**「ボールを持っていないときの動き」** です
    サッカーでは **[オフザボール](https://jr-soccer.jp/2017/10/18/post77658/)** と呼ばれ、現実のサッカーでも重要な要素として研究されています。
    ゲームでも、オフザボールの重要性が上がったということは、それだけゲームが現実サッカーに近づいてきたのかもしれない！！
    
### ▼ゲームでもオフザボールの研究したい
* 私も国体に向けて練習を行うプレイヤーの一人です。
    練習動画を見返して、選手のオフザボールを見ているときに、ふと思いました。
    
    *「あれ、面倒くさくね！？」* 
  
* 流動的に動く22人の選手を見るのは難しいです。。。
  そのため、ソフトウェアでオフザボールの研究を楽にしたいと考えました。
  
## ■目的
* オフザボールの振り返りを行いやくなるソフトウェアを開発すること。

## ■設計
* 目的がざっくりとしすぎていますが、知りたいのは「各選手の位置情報」です。
    位置情報のみさえ抽出出来れば、目的を達成できるでしょう！

### ▼データ
* 入力データは、**「試合動画」** としました。
    出力データは、**「選手とボールの軌跡」** としました。
    
    上のデータから、どうやって選手の軌跡を追跡するのか！？
    試合画面の **「レーダーマップ」** を使用します。
    下の章の **[■結果 > ▼入力データ](https://qiita.com/junya0001000/items/8c5479b9fa084bcec307#%E5%85%A5%E5%8A%9B%E3%83%87%E3%83%BC%E3%82%BF)** より、真ん中下に小さく映っているのがレーダーマップです。
    
### ▼処理の流れ
* *①「データのノイズ取り」*
* *②「対象オブジェクトの認識」*
* *③「時間方向に位置情報を積分」*
* *④「データの出力」*

## ■結果
* はい！出来上がったソフトで、実際に解析してみましょう！

### ▼入力データ
* 開幕から簡単に左サイドを崩されて失点している動画です。
    ![](https://i.imgur.com/vBSddGO.gif)

### ▼出力データ
* ◆マーカーとボールだけを抽出した動画
    ![](https://i.imgur.com/qFHWHSI.gif)    
   これだけでも、元動画から選手の位置情報だけ抽出されているので解析しやすいですね！
    
* ◆マーカーの軌跡をトラッキングした画像
    ![](https://i.imgur.com/N9OcvwM.png)
    ![](https://i.imgur.com/9AXpxxa.png)
    おー綺麗！花火みたい！
    
    ボールだけは、ボールホルダーになった選手のマーカが変化することに引っ張られてぼやけてますね。
    [鬼滅の刃のタイトル](https://www.netflix.com/jp/title/81091393)みたいで、個人的には好き！笑
    
* ◆重ね合わせた動画
    ![](https://i.imgur.com/tnawaul.gif)
    うん！ちゃんとトラッキングできていますね！

### ▼解析結果からの考察  
* では、なぜこのシーンで失点しまったのか考察しましょう。
    
    *「いや、右SBがライン乱したからじゃん！笑」
    「簡単すぎて草生えるんご！笑」*

    という人が出そうですが、失点の直前に起きているだけの現象で、「失点の要因」ではありません。
    大小様々な要因はありそうですが、目についた要因は２つです。
    
    **①「相手の左OMFのマーカーがいない」
    ②「左CBがラインの上げ下げのタイミングを声がけしていない」**
    
    **前者**は、こちらの右WGまたは右DMFのタスクですが、どちらもボールウォッチャーになってマークを外しています。
    結果、右SBはポジション取りづらくなってますね。
    
    **後者**は、ボールホルダー側に近いCBにラインの統率権がありますが、
    ラインを上げる意図が右CBと右SBに伝わっていませんね。
    ラインを上げるという行為は、守備強度を上げますが、裏のスペースを広げるので注意が必要です。

### ▼必要な情報を絞る
* 「選手の軌跡」という知りたい情報のみを抽出することで、解析が楽になりましたね。
    また、チームメイトと反省会をする際も、議論したい対象だけに情報量を落とせば、話合いをスムーズに行えそうです。
    
    **こうした方がもっと良くなるかも！？みたいなコメント大歓迎です！**
    個人の趣味で開発しているので、設計からテストまでレビューが一回も入ってないので、需要とのズレができちゃってるかも。。。
    
## ■おわり
* いかがでしたか？
    今回は、動画解析に手を出しました。
    ウイイレの多人数プレイが競技シーンで増えていけば、需要はあるのかなと思います。
    他のゲームでも、配置とか動きに重きを置くゲームであれば、こういった解析は必須かなと思います。
    
    次の作業は、テスターのデータが貯まってきたので、データ解析レポート作成に戻ろうと思います。
    
##  ~~■お小言~~
* 私の勘違いでした。申し訳ございません。
勘違いしていた方からDM頂いて、私の誤解だと気づきました。汗
* ~~先日明らかに私の記事を読んでアイディアを真似たであろうサービスを見ました笑
    原理とかならいくらでも転がってますが、それは「ウイイレを対象としたサービス」でした笑
    権利とか別にないけど、一言欲しかったな～。。。~~
    
    ![](https://i.imgur.com/mAan1tN.jpg)
    
    ~~労力を吸われるのは気に食わんので、技術的な話は控えめに記事を書いていきます。
    ただ、参考にした技術やサイトのURLは[参考URL](https://qiita.com/junya0001000/items/8c5479b9fa084bcec307#%E5%8F%82%E8%80%83url)にまとめていきます♪~~
    
    次の記事もお楽しみに！
    
## ■参考URL
**ハフ変換は面白いからオススメ！考えた奴絶対に変態！**
1. [オプティカルフロー(Optical Flow)](http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_video/py_lucas_kanade/py_lucas_kanade.html)
2. [Python, OpenCVで動画再生時のFPS（フレームレート）を測定・表示](https://note.nkmk.me/python-opencv-fps-measure/)
3. [Template Matching](https://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html)
4. [Three-Dimensional Mapping of Cardiac Arrhythmias](https://www.ahajournals.org/doi/pdf/10.1161/circep.110.960161)
5. [動画を扱う](http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_gui/py_video_display/py_video_display.html)
6. [ハフ変換による円検出](http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_houghcircles/py_houghcircles.html?highlight=hough)