うしろのこの本ください

なんでもかきます

ミリシタライブレポートから実績情報をOCRで読み取るやつ

お試しでつくった

github.com

簡単な実装しかしてないけど、一応動く。技術スタックは以下

  • Elasticsearch
  • Logstash
  • Tesseract.js

詳しくはリポジトリに書いてある。Elasticsearch に Logstash が取得したライブレポートの Twitter 情報を送ってため込む。

Erasticsearch の REST API 叩いて必要な情報(主に画像URL)を取得したら、request で画像をダウンロードして Tesseract へ渡す。それだけ。

なんで Elasticsearch なのかっていうと別件で AWS に Logstash と一緒に建ててたから。結局そっちの方は色々あって駄目になったんだけど、Logstash の Twitter input plugin の検索ワードだけ変えれば流用出来る事に気づいたのでそのまま使った。

Tesseract の部分は本来 Cloud VisionAWS Rekognition になる予定だったけど手元で実行できればとりあえず良かったので見送り。

そもそも GCP でやるつもりだった。Amazon Elastic Service がかなり楽だったし、余ってる EC2 インスタンスもあったので AWS で完結させた。

画像は今はディレクトリに突っ込んでるけど本来は S3 に投げつけてアップロードイベントで Lambda を発火してその中で Rekognition 呼ぶ構成だった。色々妥協したし Node のコードもかなり雑。サーバーサイドjsの非同期なコード真面目に書くの初めてだったから結構大変だった。お陰で AWS と Node の知見はそこそこ溜まった。

Tesseract.js は出力結果を JSON で吐いてくれないし、得た結果は Elasticsearch に戻そうと思ってたからここは S3 に突っ込む部分と一緒に Rekognition で再実装すると思う。完成したらまた記事書く。

結局これで何がしたいかって言うと、ある程度データが溜まったらリザルトレポートの画像からプレイの評価をしてくれるTwitterBotが作りたかった。フォローしてるとリザルト投稿した時に自動でリプして評価してくれるみたいな。出来るか分からんけどとりあえずデータ収集から入った形。

あと白よりの情報源が欲しかったってのもある。解析とかしてそうなもの結構あるんだけど、それ本番サービスで使い辛いなって思って自前でデータ用意するなら自動化したいというお気持ちが出てきた。まあそんな感じ。

結果例。流石に精度悪い。座標も何も渡してないし仕方ない。途中でスコアの前に#が入って VSCode がカラーコード扱いで色付けてるの面白かった。

f:id:apple19940820:20190108232844p:plain

おわり