Upload
ysrken
View
971
Download
3
Embed Size (px)
Citation preview
やさしい画像認識教室~ゲーム編~書いた人:YSR
http://qiita.com/YSRKENhttp://www.vector.co.jp/vpack/browse/person/an050622.html
自己紹介• プログラミングと艦これが好きです• 言語で言えばHSP ・C++ ・ Javaが好きです• フリーソフトウェアを頻繁に作成しています (以下代表作 )
• おりこうさんな秘書(艦これ用スクショ保存兼各種便利ツール )
• aviutl-waifu2x-cpuと aviutl-waifu2x-w2xc(waifu2xの AviUtlプラグイン版 )
• HSP de 自動着色(モノクロの漫画を擬似的にカラー化する )
• フォント自動判定(画像に使われているフォントを推測する )
本題の前に• 画像認識……パターン認識の一つで、画像から有用な情報を引き出して利用する手法のこと• 昨今では機械学習の精度も向上しており、ニューラルネットワークの一種であるディープラーニングにおいては、人間を超える認識率を叩き出すことも不可能ではなくなった
• 今回は画像認識の基礎的な部分について、高度な数学は用いず実例をもって紹介します
今回のサンプル=艦これ採用理由• 人気ゲームである• 画面サイズが一定で扱いやすい• 3Dゲーではない• 最近やってるゲームが 主にこれだった
何を判定したいか?• 自艦隊および敵艦隊の艦船数→先程の例では「 4隻」「 2隻」と答えるのが正解• 自艦隊および敵艦隊の艦名→先程の例では「暁・響・雷・電」「駆逐ロ級・駆逐イ級」と答えるのが正解• 自艦隊および敵艦隊の損害判定→「全て無傷」「全て撃沈」と答えるのが正解
判定方法=テンプレートマッチング• テンプレートとなる雛形を先に用意しておき、それらと比較することにより判定する手法• 特徴点や図形的パターンを検出する手法 (SIFTなど )に比べて原始的だが、実装が楽で速いので使いやすい• 今回は「画像サイズ一定」「明るさがほぼ変動しない」「回転や拡大縮小もない」と仮定できるのでまさにうってつけの題材といえる
艦船数判定について• 自艦隊および敵艦隊について、表示される枠の位置は一定• しかも、各枠の位置は艦船数が変わってもそのままである• したがって、枠の各位置においてそれが存在するかを 判定すれば良い• 自艦隊においては、 n番艦とした際、「 (33, 45n+74)の位置の 色が#747572と十分近いか」として表される
艦名判定について その 1
• 枠の位置が一定なので、その中にある艦娘や深海棲艦のアイコンの位置も一定であり、またサイズも共通である• そのままだと情報量が大きすぎるので、下図のように削減する
艦名判定について その 2
• 先ほどの枠判定にしてもそうだが、 100%完全に一致するとは限らないので、ハッシュ関数でO(1)というわけにはいかない可能性もある• ただし先ほど抽出したクロップ画像は、小破以上で出るアイコンや煙で隠れない位置を狙ったものなのでそれなりに頑強なはず (実コードではHashMapで実装した )• マッチングする際は「どの特徴を利用すれば、頑健でかつ高速か」を考えることが重要で、最先端の研究対象でもある
損害判定について• 発想としては艦名判定と一緒• 指定点 (自艦隊の n番艦においては (140, 45n+60))における色データから、「小破以上のアイコン」のものと十分に近いかを判定する 小破:#e3d052 中破:#c9944a 大破:#6d2e27 撃沈:#4b9fd4• 小破未満の場合アイコンは付かないが、全く削れていない場合 (無傷 )と僅かに削れている場合 ( 軽微 )があるので、枠の横にあるゲージで判定
実行例• 実装に使用した言語: Java• 動作環境: Core i7-4790K+Windows 10 64bit ※たまたま自作 PCがこれだっただけで遅くても大丈夫なはずです• 処理時間:約 600マイクロ秒
まとめ・備考• 画像認識には様々な手法が存在する• テンプレートマッチングだけでも相当戦える• 文字認識となると若干面倒だが、やってやれないこともない• 今回のソースコード、および詳細な説明はこちらの記事に書いてます 「やさしい画像認識教室~ゲーム編~ - Qiita」 http://qiita.com/YSRKEN/items/819dd3acf750ff5c0e7f