MacでIkaLogを使ってみる
IkaLogという画像認識を用いてSplatoonの対戦結果を記録できるサービスがあるとのこと。
任天堂の WiiU 用ソフト「スプラトゥーン」の画面をリアルタイム解析して、 いろいろなことができるソフトです。
引用元 : IkaLog/IkaUI.md at master · hasegaw/IkaLog · GitHub
Windows版はexeファイルが公開されているなどサポートが手厚いようです。でもちゃんとMacやLinuxのことも考えられているらしく、動画ファイルから解析する手順であればPython経由で使えそうなので、試してみました。
必要なライブラリのインストールとか
まずPythonやOpenCV、その他ライブラリを揃えます。homebrew
がインストールされている前提で書いています。
brew install python3 brew install numpy --with-python3 brew link numpy brew install opencv3 --with-python3 brew link opencv3 --force pip3 install slackweb pip3 install fluent-logger pip3 install requests-oauthlib pip3 install urllib3 pip3 install u-msgpack-python pip3 install Pillow # for IkaUI pip3 install --upgrade --trusted-host wxpython.org --pre -f http://wxpython.org/Phoenix/snapshot-builds/ wxPython_Phoenix pip3 install PyYAML
IkaLogをダウンロード
IkaLogのGitHubページの右にあるDownload ZIP
で一式ダウンロードすればOKです。
IkaLogの実行
実行するには設定ファイルが必要です。サンプルの設定ファイルIkaConfig.py.sample
をIkaConfig.py
に名前を変更にします。
続いてIkaConfig.py
内の設定をイカのように変更します。
# if IkaUtils.isOSX(): # source = inputs.AVFoundationCapture() # else: # source = inputs.CVCapture() source = inputs.CVCapture()
↑sourceを強制変更
# source.start_camera(0) # キャプチャデバイスから source.start_recorded_file('/path/to/movie.mp4') # ファイルからの読み込み
↑動画読み込み用に変更
実行
pythonでIkaLog.py
を実行します。
python3 IkaLog.py
大体動画の時間と同程度の時間で解析が終了しました。ちなみに実行結果はイカのようになりました。
<ikalog.inputs.cvcapture.CVCapture object at 0x107ff0f98>: initalizing pre-recorded video file Segment_0001.mp4 start model.train 972 done model.train Loaded weapons recoginization model. ゲームスタート。マップ ハコフグ倉庫 ルール ガチヤグラ [event] 00:14 on_game_start [event] 00:21 on_game_team_color [event] 00:22 on_game_go_sign プレイヤーをたおした! [event] 01:43 on_game_killed プレイヤーをたおした! [event] 01:55 on_game_killed [event] 02:00 on_game_finish <ikalog.scenes.result_judge.ResultJudge object at 0x10dd8cc18>: duration = 6039 ms [event] 02:12 on_result_judge judge: win, knockout: True ゲーム終了。 ステージ:ハコフグ倉庫 ルール:ガチヤグラ 勝ち 2K/3D 使用ブキ:N-ZAP85 チーム内順位: 4 プレイ前ウデマエ S+ スクリーンショット ./screenshots/ikabattle_20151018_160531.png を保存しました [event] 02:14 on_game_individual_result Entering result_udemae loop [event] 02:22 on_result_udemae {'udemae_exp_after': 35, 'last_update': 142542.3757090424, 'udemae_str_pre': 's+', 'udemae_str_after': 's+', 'udemae_exp_pre': 32} Escaped result_udemae loop Entering result_gears loop <ikalog.scenes.result_gears.ResultGears object at 0x10dd92128>: duration = 6439 ms [event] 02:29 on_result_gears Escaped result_gears loop Watchdog fired. Closing current session ゲームセッション終了 <ikalog.outputs.csv.CSV object at 0x10aa42da0> (enabled = True) <ikalog.outputs.json.JSON object at 0x10aa671d0> (enabled = True) [event] 02:29 on_game_session_end death_reasons = {}
使用武器はN-ZAP85ではなくわかばシューターなので、そこだけ画像認識が間違っていました。解析した動画ファイルは852×480pxで、引き伸ばした動画を解析に使ったのが原因かもしれません。しかしそこ以外は完璧だと思います。ika.json
に実行結果が記録されるようです。
その他
結果発表の20秒後に記録が保存されるようになっているようです。試合ごとに録画ファイルを変えていると待ち時間が短くうまく保存されないので、10秒後に保存するように変更したのをメモしておきます。
engine.py
self.session_close_wdt = context[ 'engine']['msec'] + (10 * 1000) # ここ