加賀一稿一記

心は戦国

寿司打自動化


WindowsAPIでマウス・キーボード操作 - 加賀一稿一記

opevcvでスクリーンショット - 加賀一稿一記
を組み合わせればゲームの自動化ができるだろうと思っていたのですが,そこまでゲームをしないため機会に恵まれませんでした.
そんなある日「タイピングゲームのスコアが情報の成績になる」学校の話を聞いたので,プログラムにやらせてみることにしました.
寿司打を選んだのは寿司が好きだからです.

画面のキャプチャとキーの入力は上の記事に書いてあるのでそちらを読めばよくて,文字の認識の部分について書きます.
例えば次のような画面をキャプチャしたとき,入力用の英文字は白色で表示されます.
f:id:kgsn:20170630161754p:plain
そこで画像中心辺りを切り出し,色が255かどうかで2値画像を作成すると次のようになります.
(湯飲みや白枠は255ではないんですネ)
f:id:kgsn:20170630162106p:plain
画像を1列ずつ調べて真っ黒な列で分割してやり,黒一色の画像を排除するとそれぞれの文字を取り出せます.
f:id:kgsn:20170630162522p:plain
これらの文字は位置や時間によらず同様に表示されるため,画像の完全一致を調べるだけで文字を認識できます.


実際にタイピングをさせた時の動作は記事冒頭の動画の通りで,ボーナスによって残り時間が増えていきます.
残り時間が十数分のあたりで処理を止めたので,増え続けた先に何が待っているのかは分かりませんが,1万円で高級寿司パーティーができることは確かなようです.

リザルトを見ると40回ミスタイプをしていますが,文字を消すアニメーションが間に合わず,重複して入力してしまうことがあったためだと思います.


思っていたよりゲームの自動化は簡単でした.
もっとも内容も表示もシンプルなゲームだったからというのもあり,複雑なゲームならちゃんとAIを書き,豪華な表示ならOpenCV等を駆使して状況認識をする必要があります.
個人的にはスタミナを消費する系のゲームを自動化させて,寝てる間や外出している間にプレイさせたいんですが,そこまでハマれてPCで動くゲームってなかなかないんですよね・・・.
スマホで動くならカメラで撮影してキャプチャして,タッチペンを動かして操作することになるけど,そこまでするかというと微妙.)