Blog

Splatoon2の動画でPythonとOpenCVを使ってやられた場面集を作る

OpenCVのUnityアセットを購入していろいろいじっていたのですが、なんかよくわからなくなり、じゃあPythonの勉強(触ったことない)もかねてなんか作ってみようと思いました。

なぜPythonかというと興味があったし、OpenCVと言えば!みたいなイメージがありました。

環境はあちこちでオススメされていたpyCharmを使います。普段PHPStormを使っているというのも理由です。

内容としては、普段スプラトゥーン2を録画しているので、自分がやられたときを認識し、「こうやってやられたぞ集」を作ります。

まず、やられたを認識するわけですが、

最初はこの画面中央のやられた!を認識(matchTemplate)させようと思っていましたが、ここは拡大縮小のアニメーションがあるので認識としてはどうかな?ということと、OpenCVfotUnityでまったく認識しなかったという苦い思い出があるので、右下の「復活まで」を使うことにします。

これです。

ではコードはこちら

実行してみます。

復活までのところに青い枠ができ、ちゃんと認識しています。

 

では動画の場合はというと、1フレームづつ取得して同じことをします。

動画を3秒ごとに画像として取得しています。すべてのフレームを取得すると1秒間に60枚。3秒とすると180枚なので、処理が1/180で済みます。ただし、正確な時間ではなくなります。

matchという関数が本体です。フレーム画像と比較画像(Template)をmatchTemplateというOpenCVの関数に渡しています。まったく同じなら1、結構同じなら0.8くらい。まったく違うのは0という値で返ってきます。

ではその値で時間を割り出します

値は0.8以上で直近10秒以内ではない(3秒ごとなので続けて認識する場合もある)場合にdeadのリストに秒数を追加します。

 

これで動画内で何秒にやられたかの秒数が取得できました。

やられた秒数の前4秒から後ろ2秒のフレームを動画に書き込んでいきます。

これでできたのがこちら

Pythonでフレームを繋げて動画にしていますので音がないです。それと、開始と終了もいれるようにしました。

へたくそ?えぇ自覚しています。でもこれでもエリアでS+までいったんですよ(いまはSだけど。。。)

OpenCVもPythonも面白いですね。

この仕組みの延長でいろいろできそうです。

1、ffmegを使って動画を作ることで音を入れる

2、倒した場面も取れる

3、いろんな統計をとったりする

4、リアルタイムで取得する

5、アプリ化

とかできると面白いかも。

 

あ、フレンド申請気軽にどうぞ。

フレンドコード SW-2476-8687-7293

Post a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*