新人SEの学習記録

14年度入社SEの学習記録用に始めたブログです。もう新人じゃないかも…

雑記:Mac + IkaLog + stat.inkで戦績管理

今更ながら,Wii U & Splatoonを買ってしまいました。。

すっかりハマってしまったのですが,このゲームには戦績を閲覧するような機能が無く(意図的に作っていない?),どのくらい自分の腕が上がっているのか(あるいは上がっていないのか)が分からないのが少し残念です。
と思っていたら,IkaLogという素晴らしいツールがありました。github.com

これはSplatoonの戦績をファイルに落としてくれるツールなのですが,stat.inkと連携するといい感じに戦績を可視化してくれます。
stat.ink

IkaLogはWii Uの画面をキャプチャして画像認識する仕組みなので,色々と機器が必要でちょっと躊躇していたのですが,勢いあまって導入してしまいました。
やり方は以下の記事を参考にしたのですが,HDMIキャプチャボードの使い方が全然わからなかったりと一部詰まったところがあったので,自分の導入手順を書いておきます。hiho-developer.hatenablog.com
yukihir0.hatenablog.jp

なお,記事内の商品はIkaLog Storeから購入するとIkaLog作者に還元されるので,こちらから購入すると良いです。
hasegaw blog: IkaLog Store (IkaLog 作者に還元できるアフィリエイトリンク集)

環境+使用したもの

マシンとOS

  • マシン:iMac(21.5-inch, Late 2013)
  • OS:Yosemite 10.10.5

必要なもの

MacWii Uから画面をキャプチャしてIkaLogを動かすには,以下のものが必要です。

  • HDMIスプリッタ(Wii UからのHDMI信号をテレビとMacに分配する)
  • HDMIキャプチャボード(Wii UHDMI信号をMacでキャプチャする)
  • HDMIケーブル * 3本(Wii U <-> HDMIスプリッタ,HDMIスプリッタ <-> テレビ,HDMIスプリッタ <-> HDMIキャプチャボード)
  • Thunderボルトケーブル(HDMIキャプチャボート <-> Mac

Wii Uからstat.inkまでの接続イメージは,stat.inkのページにわかりやすい説明があります。
stat.ink | このサイトについて

自分が購入したもの

  • HDMIスプリッタ:LEICKE KanaaN(2,599円)

  • HDMIキャプチャボード:Blackmagic Design UltraStudio Mini Recorder(18,879円)

Blackmagic Design 小型レコーダー UltraStudio Mini Recorder 001846

Blackmagic Design 小型レコーダー UltraStudio Mini Recorder 001846

  • HDMIケーブル:HORIC 1.5m(680円)

HORIC ハイスピードHDMIケーブル 1.5m ゴールド 4K/60p 3D HEC ARC リンク機能 HDM15-891GD

HORIC ハイスピードHDMIケーブル 1.5m ゴールド 4K/60p 3D HEC ARC リンク機能 HDM15-891GD

(1本を上で購入し,1本はWii Uの付属品,1本はPS3の付属品を使いました)

  • Thunderboltケーブル:アップル 2.0m(5,757円)

アップル Thunderboltケーブル (2.0 m) MD861ZM/A

アップル Thunderboltケーブル (2.0 m) MD861ZM/A

しめて27,918円でした。(あれ,こんなにしたっけ・・・)

導入

HDMIキャプチャの設定

まずは,MacWii Uの画面をキャプチャできるようにします。
MacからHDMIキャプチャボードのUltraStudio Mini Recorderに付属しているSDカードを読み込み,中のpkgをインストールします。
続いて,「システム設定」から「Blackmagic Desktop Video」を開いてください。
現時点では「No Desktop Video Device Detected」になっているはずです。

続いて機器類を接続します。
HDMIスプリッタと電源を接続し,1口の側とWii UHDMIケーブルで接続します。
続いてHDMIの2口ある側にHDMIケーブルを2つ接続し,それぞれテレビとHDMIキャプチャボードに接続します。
最後に,HDMIキャプチャボードとMacをThunderboltケーブルで接続して機器の配線は完了です。

これでBlackmagic Desktop VideoにHDMIキャプチャボードが認識されます。
f:id:uriku:20151205130501p:plain
真ん中のファイルマークっぽいボタンを押して設定を開き,Video InputをHDMIにします。
f:id:uriku:20151205130611p:plain

続いて,「Blackmagic Media Express」を開きます。
Wii Uの電源を入れ,「Log and Capture」でWii Uの画面が表示されていればOKです。
f:id:uriku:20151205131116p:plain
IkaLogでは入力映像が720p想定とのことなので,「Preference」から「Project Video Format」を「720p59.94」にしておきましたが,これが必要な設定なのかはちょっと不明です・・・
f:id:uriku:20151205131349p:plain

最後にWii U側の出力解像度も720pにしておきます。
「本体設定」から「テレビ」>「テレビの解像度を設定する」で720pにします。

これにてHDMIキャプチャの設定は完了です。Blackmagic Media Expressは閉じておきます。

必要なライブラリのインストール

Homebrew

IkaLogの実行に必要なライブラリのインストールにはHomebrewを使用します。
自分の環境には元々導入済でしたが,インストールする場合は以下をご参照ください。
Homebrew — OS X 用パッケージマネージャー

とりあえずHomebrewをアップデート。

% sudo brew update

自分の環境のHomebrewが古すぎたのか,以下のエラーが出た。

error: Your local changes to the following files would be overwritten by merge:
    Library/Formula/mysql.rb
Please, commit your changes or stash them before you can merge.

以下のコマンドで直す。

% cd $(brew --prefix)
% git fetch origin
% git reset --hard origin/master
% sudo brew update

これでようやく依存ライブラリのインストールに入れます。

依存ライブラリ

numpyとopencvをインストールするので,brew tapでリポジトリを追加します。
※以下,brewコマンドはroot権限で実行してます

% brew tap homebrew/python
% brew tap homebrew/science

numpyとopencv,その他ライブラリをインストール。
ここはMacでIkaLogを使ってみる - 開発のヒホとほぼ一緒ですが,
自分の環境では何故かnumpyが既に入っていてエラーになったので--overwriteしていることと,
tornadoをインストールしているところが異なります。(IkaLogの実行時にエラーになったため)

% brew install python3
% brew install numpy --with-python3
% brew link numpy --overwrite
% 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
% pip3 install tornado
% pip3 install --upgrade --trusted-host wxpython.org --pre -f http://wxpython.org/Phoenix/snapshot-builds/ wxPython_Phoenix
% pip3 install PyYAML

IkaLogの設定

まずはIkaLogを落としてきます。

% git clone https://github.com/hasegaw/IkaLog

続いてIkaLogの設定。

% cd IkaLog
% cp IkaConfig.py.sample IkaConfig.py
% vi IkaConfig.py

IkaConfigでは,まず使用する入力を設定します。
デフォルトでは「パターン4:ビデオファイル読み込み機能」がオンになっていますが,
ここでは「パターン3:Mac上でAVFoundationを介してキャプチャデバイスを利用する」をオンにするため,
パターン4と書いてある部分のコード2行をコメントアウトし,パターン3のコードのコメントアウトを解除します。

        # パターン3: Mac 上で AVFoundation を介してキャプチャデバイスを利用
        # 現在 UltraStudio Mini Recorder のみ動作確認                       
        source = inputs.AVFoundationCapture()
	source.start_camera(0)    # デバイス名は環境による

	# パターン4: OpenCV のビデオファイル読み込み機能を利用する          
        # OpenCV が FFMPEG に対応していること                               
	# source = inputs.CVFile()                                          
	# source.start_video_file('video.avi') 

※なお,自分の環境では,source.start_camera(0)の部分をsource.start_camera(1)にしたらMacの内蔵カメラが入力になりました。
(環境によってはここの数字部分を変更する必要があるかも?)

ついでにstat.inkの設定も入れてしまいましょう。以下のページからユーザ登録を行い,
stat.ink | ユーザ登録
「設定」から「APIキー」を表示してコピーしておきます。

続いてIkaConfig.pyを編集し,以下の部分のコメントアウトを解除します。
YOUR_API_KEY_HEREの部分には,先ほどコピーしたAPIキーを貼り付けます。

            outputs.StatInk(
                api_key='YOUR_API_KEY_HERE',
                dry_run=False,
                track_splatzone=False,
                track_objective=False,
            ),

これで設定は完了です。

IkaLogの実行

以下のコマンドでIkaLogの実行を開始します。

% python3 IkaLog.py

これで,Macの画面上にWii Uの画面が表示されれば(たぶん)OKです。
(自分の環境では,IkaLog実行時に一瞬Macの内蔵カメラからの画像の表示になって一瞬ビビリますが,すぐにキャプチャ画面の表示に切り替わります)
f:id:uriku:20151205131908p:plain
上手くいっていれば,プレイ中にこんな感じのログが出ます。

[event] 01:59 on_lobby_matching  Lobby_type: public
[event] 02:02 on_lobby_matched  Lobby_type: public
ゲームスタート。マップ モンガラキャンプ場 ルール ガチホコバトル
[event] 07:13 on_game_start 
プレイヤーをたおした!
[event] 07:41 on_game_killed
たおされた!
[event] 07:57 on_game_dead  

また,バトル終了後にstat.inkに戦績が連携されていることを確認してください。

まとめ

バトルが終了するとすぐにstat.inkに結果が反映されるのがとても楽しいです。
導入が少し面倒なのと機器がちょっと値が張るのが難点ですが。。。