寿司打自動化
増える残り時間。 pic.twitter.com/SMkm2aPz5p
— かがさん (@kaga3twi) 2017年6月30日
WindowsAPIでマウス・キーボード操作 - 加賀一稿一記
と
opevcvでスクリーンショット - 加賀一稿一記
を組み合わせればゲームの自動化ができるだろうと思っていたのですが,そこまでゲームをしないため機会に恵まれませんでした.
そんなある日「タイピングゲームのスコアが情報の成績になる」学校の話を聞いたので,プログラムにやらせてみることにしました.
寿司打を選んだのは寿司が好きだからです.
画面のキャプチャとキーの入力は上の記事に書いてあるのでそちらを読めばよくて,文字の認識の部分について書きます.
例えば次のような画面をキャプチャしたとき,入力用の英文字は白色で表示されます.
そこで画像中心辺りを切り出し,色が255かどうかで2値画像を作成すると次のようになります.
(湯飲みや白枠は255ではないんですネ)
画像を1列ずつ調べて真っ黒な列で分割してやり,黒一色の画像を排除するとそれぞれの文字を取り出せます.
これらの文字は位置や時間によらず同様に表示されるため,画像の完全一致を調べるだけで文字を認識できます.
実際にタイピングをさせた時の動作は記事冒頭の動画の通りで,ボーナスによって残り時間が増えていきます.
残り時間が十数分のあたりで処理を止めたので,増え続けた先に何が待っているのかは分かりませんが,1万円で高級寿司パーティーができることは確かなようです.
途中で入力を止めた。 pic.twitter.com/Igd3aLYYgB
— かがさん (@kaga3twi) 2017年6月30日
リザルトを見ると40回ミスタイプをしていますが,文字を消すアニメーションが間に合わず,重複して入力してしまうことがあったためだと思います.
思っていたよりゲームの自動化は簡単でした.
もっとも内容も表示もシンプルなゲームだったからというのもあり,複雑なゲームならちゃんとAIを書き,豪華な表示ならOpenCV等を駆使して状況認識をする必要があります.
個人的にはスタミナを消費する系のゲームを自動化させて,寝てる間や外出している間にプレイさせたいんですが,そこまでハマれてPCで動くゲームってなかなかないんですよね・・・.
(スマホで動くならカメラで撮影してキャプチャして,タッチペンを動かして操作することになるけど,そこまでするかというと微妙.)