寿司打を自動化してみた【RPA×OCR】

はじめに

皆さんは寿司打というタイピングゲームをご存知でしょうか?

回転寿司のように問題が次々に流れてきて、それをどんどんタイピングして点数を稼いで行くというゲームになります。

おそらくタイピングゲームでは一番有名?なのではないでしょうか。
(私もブラインドタッチの練習をしていた頃に大変お世話になりました)

私が現在参画しているプロジェクトでは、飲み会の幹事をこの寿司打で決めるという面白い習慣があります。
新卒の子達が先輩にボコボコにされ、その子達が訓練を積んで、次の後輩達をボコボコにする(結果的にみんなタイピングが速くなる)という事ですね。

もはや本来の趣旨を外れているのですが、「これすぐ自動化できそうだな」と思ったので、RPA(UiPath)とOCRで自動化してみました。

■使用環境
OS:Windows
ブラウザ:Chrome
RPA:UiPath
OCR:UiPathデフォルトのtesseractエンジン

■開発時間
2時間程度

結果

最適化すればもっと速くなりそうですが、しっかりとタイプしてくれています。

全体の動画は右記参照:寿司打を自動化してみた(YouTube)

アルゴリズムとしては、スクショを撮る→OCRで文字読み取り→読み取り結果をタイピングという単純なもので、正規表現でのマッチングとリプレイス、読み取りエラーのハンドリングを5箇所程度入れています。

最終スコアがどうなるか楽しみにしていたのですが、ここで一つ大きな誤算がありました。。
制限時間の減少速度を、連打ボーナスによる時間の増加が上回り、いつまでも終わらないのでスコアが出ないという状態になりました。
とりあえず放置してみた所、500円皿が100皿を超えたあたりでシステムエラー?によるポップアップが出て強制終了に。

スコアが出ないのはそれはそれで困るので、試しに強制終了となる手前でRPAを止めた所、合計300皿で12万円程度でした。これで新卒の子達に負ける心配はなさそうです。

※380円皿は2週目(180皿)

まとめ

過去に使用した際の経験上、tesseractの読み取り精度を心配していたのですが、この程度の問題設定なら十分に読み取ってくれました。

最初Pythonでやろうかと思ったのですが、UiPathは画面をクリックすればセレクタを自動で取ってきてくれるので楽ですね。小中規模程度の実装なら、フローチャート形式で書ける可読性の高さのメリットも大きいです(後から見た時にすぐわかる)。

今回は割と問題設定が易しかったので、「これ自動化してみて欲しい」という面白い課題がありましたら教えて頂けると幸いです。