ダメージ計算ツール(というよりは努力値調整ツール)の開発もひと段落して、今のところ問題なく動作してそうですので、何か新しいツールを作ろっかなーと考えた次第。
※問題あったら連絡くれると助かります・・
前から興味のあったOCR(光学的文字認識)とAIによる画像処理の勉強のために、ポケモン剣盾で何か使えそうなツールを作ろうと思いました。
んで、思いついたのが
リアルタイムバトル解析ツール
というもの。
HDMIキャプチャボードから画面を取り込んで、それをリアルタイムで画像処理させることで色々バトル中に手助けをしてくれるツールを作ってみようかな、と思います。
ポケモン剣盾用の耐久努力値調整ツールを作成しました! ぜひ使ってみてください!
概要
目的
今回作るツールにどんなことをさせたいかというと、
- 相手のパーティ(ポケモン6体)を自動で検出して画像を保存する
- 相手が選出したポケモンを自動で記録して保存する
- 自分が使った技や相手に使われた技、そして交代タイミング等のバトル中のメッセージを自動でテキスト保存する
- 自分のポケモンが受けたダメージ数や、相手に与えたダメージ割合を元に、相手のポケモンの努力値の振り方や持ち物を自動で予測する
- ↑の結果を解析してビックデータ化
等々・・・
昔、スプラトゥーンの対戦画面をリアルタイム解析してLOGに残す、といったツールがありましたが、それをポケモン版で作ってみようかな、という感じです。
開発フロー
これらを実現するためには、以下の機能が必要になります。
- キャプチャーボードから映像を取得する機能
- 画像から文字を抜き出す機能(OCR)
- 類似画像を検索する機能
- ダメージ計算機能(すでにAPI化済み)
- データをサーバへ送受信する機能
1~5の順番でレイヤーの低い=開発優先度の高いものなので、まずは1~3の機能開発をしてく所存です。
開発言語
最初はPythonで開発しようと思ったのですが、なかなか大がかりなツールになりそうなのと、流石にOCR処理をリアルタイムでサーバサイドで実行するのは厳しいという判断。
クライアント側で簡単に動作するツールを作成する・・・といえばC#かな、
というわけで今回はC#を使って開発します。
昔はよくC#を使って色々作っていたので、言語仕様もある程度理解してるし、何より最強の統合開発環境であるVisual Studioを使って開発できるんですよね。
Windowsフォームアプリケーションを作成するのであればこれ以上の言語はありません。
・・・と思っていざC#で開発を始めてみると全然筆が進まない。
Pythonに慣れすぎて型宣言という行為自体忘れてたし、for文もまともに書けない始末。
やっぱ定期的に触らないと全然使えなくなるもんなんですねえ・・・
試作
取り合えず、
- キャプチャーボードから映像を取得する機能
- 画像から文字を抜き出す機能(OCR)
この機能を実装してみます。
カメラデバイスから映像を取り込む方法はググったらこのあたりの記事がヒットしたので参考に。
OpenCvSharpってのが画像処理するのに使いやすそうなライブラリですね。
OCR処理は有名なtesseractを使用することに。
Googleで調べてみるとあまり精度は良くないようなのですが、フリーで使用できるOCRライブラリって探してもこれぐらいしかないんですよね・・・
まあ、悪い精度は辞書の充実化でなんとかしましょう。
こちらの記事が非常に参考になりました。
コチラの方もゲーム画面をキャプチャしてOCRするツールを作ってました。
やっぱりこういうツールって誰でも思いつくんだなあ・・
非同期処理の試用やOCR処理にかかる時間の短縮に苦しみながらも取り合えず試作完了。
こんな感じの動作となっております。
ポケモン対戦用のリアルタイム画像処理ツールの試作。やっぱり文字認識精度悪し。訂正用の辞書をきちんと作成しないと実用に耐えなさそう。 #ポケモン剣盾 #ツール #リアルタイム画像処理 pic.twitter.com/qAC8v4wqLM
— ばっち (@vatch_px) March 4, 2020
想定通り、文字の認識精度は悪め。
ルナアーラが「ルナァーラ」になっていたり、
ムーンフォースが「ムーフフオース」になっていたり。
※どうやらカタカナの「ン」が「フ」と誤認してしまうようです。
あとは濁点とかが抜けてしまうことが多々ありますね。
これらは訂正用の辞書を作成することで置換処理して訂正するようにしようとは思います。
次の機能開発
- 相手のパーティ(ポケモン6体)を自動で検出して画像を保存する
- 相手が選出したポケモンを自動で記録して保存する
ここら辺の開発を進めていこうと思います。
その中で一番問題となるのが言語の壁。
ポケモン剣盾のオンラインでのバトルって、自身の言語が日本語でも相手が英語だったり中国語だったりすると、その言語でポケモン名が表示されてしまうんですよね・・・
それにより日本語用のOCRライブラリが使用できなくなってしまうので、今以上に精度が悪くなってしまいます。
そのあたりをどう解消するのかが鍵になってきそうです・・・。
まとめ
- 懲りずに新しいツールの開発に着手!
- 今度は画像解析系のツールを作ります。
- 完成は2か月後ぐらいを想定・・・
まあ、気長に作成していくこととします・・・。
是非使いたい!みたいなコメントとかリプライとかもらえるとモチベーション上がるです・・・。
コメント
すごくいいツールですね!!是非使ってみたいです!!
進捗いかがですか?(小声)
>シマダ様
進捗ありません・・・・(小声)