72
IkaLogとはなんぞや Nov 14, 2015 qpstudy Takeshi Hasegawa (@hasegaw) 本スライド中に登場するスプラトゥーン関連画像は任天堂株式会社の著作物からの引用です。

IkaLog Presentation at qpstudy 2015.11

Embed Size (px)

Citation preview

Page 1: IkaLog Presentation at qpstudy 2015.11

IkaLogとはなんぞや

Nov 14, 2015 qpstudy Takeshi Hasegawa (@hasegaw)

本スライド中に登場するスプラトゥーン関連画像は任天堂株式会社の著作物からの引用です。

Page 2: IkaLog Presentation at qpstudy 2015.11

@hasegaw is 誰 長谷川 猛 (HASEGAWA Takeshi) twitter: @hasegaw Ø  もともと、インフラエンジニア(2004-2011)

SEとしてシステム構築、客先のシステム運用、提案 気付いたらプリセールス~PMを担当するインフラエンジニア (ざっくりデザイン、工数/導入物品見積もり、  構築プロジェクトの管理、保守等の問い合わせ対応)

Ø  フラッシュストレージを軸とした、アプリケーション高速化を支援するセールスエンジニア(2011-2014)

Ø  ファブレス半導体ベンチャーでコンピュータ関連なんでも

2

Page 3: IkaLog Presentation at qpstudy 2015.11

著書/寄稿

3

Page 4: IkaLog Presentation at qpstudy 2015.11

(会場のみ)

4

Page 5: IkaLog Presentation at qpstudy 2015.11

スプラトゥーンとは

•  第三者視点(TPS)のシューティングゲームの一種

•  インクで自分たちのナワバリを広げないと進めない

•  シューティングが苦手でも バケツやローラータイプのブキで気軽に楽しめる

•  本気でやってる人たちは怖い

5

Page 6: IkaLog Presentation at qpstudy 2015.11

IkaLog誕生秘話

Page 7: IkaLog Presentation at qpstudy 2015.11

IkaLog開発の経緯

•  スプラトゥーン プレイヤー同士で モツ鍋を食べていたら、戦績の統計の話に

•  ゲームには、戦績の統計機能は存在しない

•  手動でExcelを使い戦績を整理している人も

7

Page 8: IkaLog Presentation at qpstudy 2015.11

とあるイカの戦闘記録

8

Page 9: IkaLog Presentation at qpstudy 2015.11

とあるイカの戦闘記録

9

Page 10: IkaLog Presentation at qpstudy 2015.11

とあるイカの戦闘記録

10

0"

2"

4"

6"

8"

0" 1" 2" 3" 4" 5" 6" 7" 8" 9" 10"

Kill Win/Lose

Win" Lose"

0"

1"

2"

3"

4"

5"

1" 2" 3" 4" 5" 6" 7" 8" 9" 10" 11"

Death����Win/Lose"

Win" Lose"0.0%$2.0%$4.0%$6.0%$8.0%$10.0%$12.0%$14.0%$

*5$ *4$ *3$ *2$ *1$ 0$ 1$ 2$ 3$ 4$ 5$

K*D

Page 11: IkaLog Presentation at qpstudy 2015.11

11

Page 12: IkaLog Presentation at qpstudy 2015.11

IkaLog 、誕生

•  それ、手作業ってあまりに面倒なのでは?

•  ツールを作ろう!

•  ということで、作りました

12

Page 13: IkaLog Presentation at qpstudy 2015.11

IkaLog を使ってゲームを遊ぶと

13

HDMIキャプチャ

IkaLog  実行用PC

Page 14: IkaLog Presentation at qpstudy 2015.11

戦闘記録がログとなって残ります(゜Д゜)

14

{'rank_in_team': 2, 'weapon': 'デュアルスイーパーカスタム', 'result': 'win', 'kills': 1, 'time': 1444491154, 'cash_after': 1820744, 'players': [{'rank_in_team': 1, 'weapon': 'プライムシューター', 'kills': 2, 'deaths': 1, 'udemae_pre': 'B-', 'team': 1}, {'rank_in_team': 2, 'weapon': 'デュアルスイーパーカスタム', 'kills': 1, 'deaths': 0, 'udemae_pre': 'B', 'team': 1}, {'rank_in_team': 3, 'weapon': 'プライムシューター', 'kills': 1, 'deaths': 0, 'udemae_pre': 'C+', 'team': 1}, {'rank_in_team': 4, 'weapon': 'スプラシューターコラボ', 'kills': 1, 'deaths': 0, 'udemae_pre': 'B-', 'team': 1}, {'rank_in_team': 1, 'weapon': 'ジェットスイーパーカスタム', 'kills': 1, 'deaths': 2, 'udemae_pre': 'C', 'team': 2}, {'rank_in_team': 2, 'weapon': '3Kスコープ', 'kills': 0, 'deaths': 1, 'udemae_pre': 'B-', 'team': 2}, {'rank_in_team': 3, 'weapon': 'プロモデラーRG', 'kills': 0, 'deaths': 1, 'udemae_pre': 'B-', 'team': 2}, {'rank_in_team': 4, 'weapon': 'ダイナモローラーテ

スラ', 'kills': 0, 'deaths': 1, 'udemae_pre': 'B+', 'team': 2}], 'rule': 'ガチホコバトル', 'event': 'GameResult', 'deaths': 0, 'udemae_pre': 'B', 'map': 'アロワナモール', 'team': 1}

Page 15: IkaLog Presentation at qpstudy 2015.11

IkaLog の画像認識例

15

Page 16: IkaLog Presentation at qpstudy 2015.11

IkaLog の画像認識例

16

Page 17: IkaLog Presentation at qpstudy 2015.11

IkaLog の画像認識例

17

Page 18: IkaLog Presentation at qpstudy 2015.11

IkaLog の画像認識例

18

Page 19: IkaLog Presentation at qpstudy 2015.11

(会場のみ)

19

Page 20: IkaLog Presentation at qpstudy 2015.11

IkaLog のイメージ

20

HDMIキャプチャ

IkaLog  実行用PC

Page 21: IkaLog Presentation at qpstudy 2015.11

プラガブルで様々な使い方に対応

21

録画ソフト 自動制御

AmaRecTV

カラーLED連動

Fluentd  転送

スプラトゥーン戦績記録SNS

CSV/JSONファイル保存 スクリーンショット保存

SNS投稿

IkaLog

Page 22: IkaLog Presentation at qpstudy 2015.11

Embed IkaLog (ライブラリモード)

•  IkaLog 自体が Python モジュールとして実装されている

•  Python コードから IkaLog を実行して、情報を受け取れる

•  作ってみたアプリケーションの例

22

アプリケーション 説明

IkaRename.py スプラトゥーンのビデオを分析  ステージ/ルール/勝敗のついた  ファイル名にリネームする

IkaClips.py スプラトゥーンのビデオを分析  敵を倒した/倒されたシーンだけクリップし、  “忙しい人”向けのサマリムービーを生成

Page 23: IkaLog Presentation at qpstudy 2015.11

マスク画像を使った 画像認識

Page 24: IkaLog Presentation at qpstudy 2015.11

ツールを作ろう(検討編 1)

その晩から、720p 1プレイ分の動画を相手に 検討開始 •  非圧縮 5分 → 20GB

OpenCV のテンプレートマッチングで試行錯誤 •  判ったこと:使えなそう – 誤検出が多い

– マッチングアルゴリズムが遅い 24

Page 25: IkaLog Presentation at qpstudy 2015.11

IkaLog の画像認識例

25

Page 26: IkaLog Presentation at qpstudy 2015.11

IkaLogの画像マッチング (第一世代)

26

ソース映像 マスク画像 加算画像

+ = =

正しいマスクを加算すると画像が真っ白になる

違うマスクを加算すると画像が真っ白にならない

Page 27: IkaLog Presentation at qpstudy 2015.11

入力画像から目的の色だけを取り出す

27

入力画像 黄色のみ

白のみ 黒のみ

Page 28: IkaLog Presentation at qpstudy 2015.11

RGB色空間とHSV色空間

28

RGB色空間 HSV色空間

引用元  hIps://ja.wikipedia.org/wiki/RGB  hIps://ja.wikipedia.org/wiki/HSV%E8%89%B2%E7%A9%BA%E9%96%93  

©Wapcaplet   ©Marc_Mongenet

Page 29: IkaLog Presentation at qpstudy 2015.11

数字の認識と機械学習

Page 30: IkaLog Presentation at qpstudy 2015.11

数字の認識 •  ゲーム中で使われているフォントは2種類

•  認識対象になる数字フォントは1種類

•  フォントが判っているのだから、認識できるはず

•  試行錯誤の末、既存OCRエンジンの利用は断念

•  機械学習ベースの認識エンジンを実装

30

Page 31: IkaLog Presentation at qpstudy 2015.11

既存OCRでの問題点 •  Tesseract OCRを評価

–  認識率が安定しない

–  もともと文章を読み取るためのもの –  1~2文字の文字、数字の認識は苦手

–  0, 8, 3 などを間違えることがある

–  今後問題があったときにアルゴリズムに 対して手が出せない

–  Python 3.x スクリプト上から利用しづらい

•  既存の文章向けOCRエンジンよりも 単純で目的に適した認識方式を検討

31

文字として  認識されないことも

Page 32: IkaLog Presentation at qpstudy 2015.11

kNN(K近傍法)の考え方

32

● ● ●

■ ■

■ ■

? ▲

?

?

?

?

とてもシンプルな機械学習    標本    の傍にあるサンプルがどれかで分類する。    K=1  の場合は最寄りのサンプルがあるクラスに分類される。    K=3  の場合は近くに3つのサンプルがあるクラスに分類される。

Page 33: IkaLog Presentation at qpstudy 2015.11

kNNによる図形マッチングのデモ(1/2)

•  GitHub にソースあり –  https://github.com/hasegaw/opencv_knn_example/

•  三つのパターン ○ △ □ で画像を生成し、 kNNで学習する

•  ランダムに ○ △ □ から画像を生成し、その画像の種類を判定する –  KNN を用いてそれに近い画像を見つけ出す

– 見つけた画像の種類から、答え(標本の種類)を特定

33

Page 34: IkaLog Presentation at qpstudy 2015.11

kNNによる図形マッチングのデモ(2/2)

34

問題図形をランダムに生成

K近傍法を用いて、学習済みの  図形から、もっとも近い図形を調べる

仕分ける ○ △ □

○ 学習済み図形

○ △ □

Page 35: IkaLog Presentation at qpstudy 2015.11

デモ風景

35

Page 36: IkaLog Presentation at qpstudy 2015.11

36

kNN  による数値認識を実装後、はじめての  テスト結果。10の位は文字画像の位置ズレで  誤認識が生じているが、1の位は100%認識  できた

Page 37: IkaLog Presentation at qpstudy 2015.11

数字の認識 1)画面上の数字部分(位置固定)を切り抜き

2)縦・横のヒストグラムを生成し各文字の位置を特定

3)文字を検出用サンプルのサイズ(等幅)にリサイズ、 二値化

4)KNNにより既知の検出用サンプルと照らし合わせて 認識する

37

Page 38: IkaLog Presentation at qpstudy 2015.11

38

Page 39: IkaLog Presentation at qpstudy 2015.11

死因の認識

Page 40: IkaLog Presentation at qpstudy 2015.11

死因の認識

40

Page 41: IkaLog Presentation at qpstudy 2015.11

死因の認識

•  「数値が認識できているから、   死因もなんとかなるだろう」

•  数字認識との共通点 – 目的の情報が白色なので二値化しやすい

– 文字列の位置を特定し、切り抜きできる

•  数字認識との相違点 – アニメーションにより、常にサイズが変化

41

Page 42: IkaLog Presentation at qpstudy 2015.11

死因の認識(3) 死因のリスト

42

Page 43: IkaLog Presentation at qpstudy 2015.11

死因の認識(3) •  基本は数字の認識と一緒

–  1文字単位ではなく文字列を一組として処理

–  文字列は左寄せして処理(したほうがいいのかはよく判っていない)

•  認識率はそれほど高くないが、認識回数で精度を確保 –  IkaLogは現在毎秒10フレームほど解析している

–  下記例では、死因のメッセージ合計49fを解析し、 最多頻度は96gal_deco (18f, 36%) だった → 結果的に正解

43

votes={      'supershot':  6,    'carbon_deco':  1,    'bucketslosher':  1,  'octoshooter_replica':  1,      'splashshield':  1,  'sshooter_collabo':  5,  'hotblaster':  2,    'pablo':  1,    'nzap89':  6,      'sharp_neo':  3,  'hotblaster_custom':  2,  '96gal_deco':  18,  '52gal':  1,    'hokusai':  1  }

Page 44: IkaLog Presentation at qpstudy 2015.11

ブキの認識

Page 45: IkaLog Presentation at qpstudy 2015.11

スプラトゥーンのブキ

•  スプラトゥーンでは、50種類を超えるブキから 好きなものを選んで利用できる

•  全体的にバランスが取れているゲームだが 戦略や戦術、ブキの選択で優劣が発生する

•  分析したい -> 画像認識

45

Page 46: IkaLog Presentation at qpstudy 2015.11

スプラトゥーンのブキ画像リスト

46

スプラトゥーンのブキ 59種類(現時点)

Page 47: IkaLog Presentation at qpstudy 2015.11

画像判別においてのチャレンジ

•  ブキ画像が小さい(47x45ドット・外枠込み)

•  表示条件(背景・被る画像)が変わる

•  誤判定すると後の統計結果に多大な影響が出る

•  一回の判定に使えるのは画像1枚のみ

47

他の装備品が被っている 保護色(まだマシ) 保護色(マジつらい)

Page 48: IkaLog Presentation at qpstudy 2015.11

スペクトラムによるブキ特徴量の算出

48

(まだバグがあった頃のバージョンの表示なので色がずれているけども)  こんなかんじで特徴量を抽出していた → 認識率97%台

Page 49: IkaLog Presentation at qpstudy 2015.11

ブキ認識テストの様子(かなり初期)

49

Page 50: IkaLog Presentation at qpstudy 2015.11

ブキ認識の正答率があがらない

•  アルゴリズムの改善を繰り返して 認識率97%台に。しかし、その先で伸び悩み – 戦績画面一回あたり、認識対象となるブキが8個登場

–  98%だと12~3ゲームに1回は認識ミスする計算

•  モツ鍋を食べながらアルゴリズムの 改善方法を議論 – ラプラシアンフィルタの活用を提案される

– トレーニングデータで.xxガロンの分類が間違っていたのを修正

50

Page 51: IkaLog Presentation at qpstudy 2015.11

ラプラシアンフィルタを用いた ブキ画像 特徴量の算出

•  新アルゴリズムを導入(@itoooon 作)

•  ラプラシアンフィルタを利用し、 最終的に64次元の特徴量を算出

•  ブキ1000個の事前学習で11000個以上の分類(正答率99.99%以上)を達成!

51

入力画像 ラプラシアン フィルタ適用 グレースケール 輪郭情報 特徴量画像

(合計64ドット)

@itoooon

Page 52: IkaLog Presentation at qpstudy 2015.11

新しい特徴量算出方法での分類結果(1)

52

Page 53: IkaLog Presentation at qpstudy 2015.11

新しい特徴量算出方法での分類結果(2)

53

テストデータは12000弱  正解の一覧は作っていないので目視で確認  

多分、分類できている  

Page 54: IkaLog Presentation at qpstudy 2015.11

Webcam サポート

※ ソースコードは GitHub にありますが、現在開発中の   機能であり、一般ユーザー向けには提供していません。

Page 55: IkaLog Presentation at qpstudy 2015.11

Webcamサポート

•  HDMIキャプチャデバイスを持っている人は少ない – ゲーム実況をするニコ生主などなら 持っているが…

– 新たに購入しようとすると、約2万円の投資

•  HDMIキャプチャの代わりにWebカメラを利用できないか?

55

Page 56: IkaLog Presentation at qpstudy 2015.11

Webcam サポート(イメージ)

56

1)  TV、ディスプレイに  Webcam  を向ける  2)  WiiU  のホーム画面を表示  

3)  IkaLog  で  Webcam  を介して  ワープ キャリブレーション  4)  以後 IkaLog  は画面と認識した範囲に対して処理を行う  デモムービー hIps://www.youtube.com/watch?v=d91xyyA-­‐exA    

Page 57: IkaLog Presentation at qpstudy 2015.11

OpenCVサンプル find_obj.py (1)

57

Page 58: IkaLog Presentation at qpstudy 2015.11

OpenCVサンプル find_obj.py (2)

58

Page 59: IkaLog Presentation at qpstudy 2015.11

HDMIキャプチャと間接キャプチャの比較

59

HDMIキャプチャ  (H264録画) Webcamによる間接キャプチャ  雑なカラーコレクション適用済み

Page 60: IkaLog Presentation at qpstudy 2015.11

データの活用

Page 61: IkaLog Presentation at qpstudy 2015.11

stat.ink (戦績SNS)

•  IkaLogユーザのひとり @fetus_hina さんが開発、運営する Web サイト

•  IkaLog からのプレイデータを受け取り、表示・集計する

61

Page 62: IkaLog Presentation at qpstudy 2015.11

62

Page 63: IkaLog Presentation at qpstudy 2015.11

63

Page 64: IkaLog Presentation at qpstudy 2015.11

stat.ink (全ユーザのプレイ結果からの統計)

64

自分が4回以上死ぬと  試合への勝率が大きく下がる

Page 65: IkaLog Presentation at qpstudy 2015.11

IkaLog + stat.ink のDAU、処理ゲーム数

65

データソース  hIps://twiIer.com/fetus_hina/status/654681918131142657

【ピーク】  120ユーザ/日  

5,000ゲーム/日を分析、ログ出力  

毎日 約70ユーザが利用  24時間あたり1500ゲーム以上を処理

Page 66: IkaLog Presentation at qpstudy 2015.11

入門方法

Page 67: IkaLog Presentation at qpstudy 2015.11

必要なもの

67

Page 68: IkaLog Presentation at qpstudy 2015.11

必要なもの

68

HDMI  キャプチャデバイス

HDMI  スプリッタ

HDMI  ケーブル  x2

Page 69: IkaLog Presentation at qpstudy 2015.11

スプラトゥーンの始め方

•  必要なものを揃えられる アフィリエイトリンク集を作りました

69

http://d.ballade.jp/2015/10/IkaLogStore.html

Page 70: IkaLog Presentation at qpstudy 2015.11

(会場のみ)

70

Page 71: IkaLog Presentation at qpstudy 2015.11

(会場のみ)

71

Page 72: IkaLog Presentation at qpstudy 2015.11

ありがとうございました。

72