見出し画像

【ウマ娘】pythonでリセマラ自動化!opencvで画像認識してSSRを識別

ウマ娘というゲームアプリのリセマラを自動化したのでコードを販売します。今回使っているコードでは下記の技術を使っています。

  • デスクトップ画面の操作

  • 起動しているソフト(今風にいうとアプリ)の識別

  • opencvライブラリを利用した画像の類似度判定

今後はこの記事に、ステータスを管理しながらのウマ娘の育成を自動化するプログラムを追加予定です。(追加日は未定)

実際に稼働している動画はこちら

改善したい箇所が数か所ある状態ですが、一旦安定して稼働できるレベルになったので公開しています。

エミュレーターでアプリを起動して、基本的にはpythonのpyautoguiモジュールを使ってマウスやキー操作を行っています。どうしても画像認識が必要な個所ではopen-cvモジュールを使って画像認識をします。(カッコ良くいうとテンプレートマッチング)

作成時に苦労したポイント

  • pyautoguiの判定がシビアすぎる

  • open-cvの類似度判定が絶妙

  • スペックや通信状況によってボタンクリック後の盤面更新時間が微妙に違うのでその調整

pyautoguiでも登録している画像と一致する場合は、デスクトップの該当座標をクリックできるのですがかなりシビアな判定となっていて少しでもpixelが違うと反応してくれないです。

SSRを判定している様子

下記画像がSSRを判定している箇所に赤枠を付けて出力した画像です。open-cvではRGBの定義がGRBみたいな感じになってるらしく、これではウマ娘じゃなくてゾンビ娘ですねw

しかも今回は左上3枚がSSR枠となるのです左から3番目のSSRに赤枠がついていないため判定漏れしているように見えますが..

下記のjupyterスクショでは判定結果が入ったリストの個数は3つになっている状態でこの辺は今後理由が判明したら追記します。


使い方

  1. 下記ファイルをダウンロード

  2. 任意の場所に解凍(日本語のディクレトリ名が使われていない場所がおぬぬめ)

  3. pythonの仮想環境を構築(参考1)

  4. 必要なモジュールインストール(参考2)

  5. bluestacksをインストール

  6. bluestacksの画面サイズを720 x 1280に設定

  7. bluestacksでウマ娘のチュートリアルを手動で終わらせる(データ削除ができないため)

  8. 連続リセマラ開始前の準備

    1. game_game_scripts\UmaMusume\my_config.pyに設定値を入力

    2. ゲームをトップ画面にする

  9. 仮想環境に入って状態でmain.py実行(参考3)


注意点

マシンスペックによっては、sleep時間の微調整が必要になります。参考に僕のPCスペックを記載しておきます。

CPU: Intel core i7 9700
GPU: NVIDIA GeForce RTX 2060 SUPER
MEM: DDR4 1330MHz 64GB

ボタンクリック処理が頻繁に失敗する場合は、assertを外してsleepを0.2秒前後設定してfor文で何度かリトライするようにするとうまくいきます。
もしくは、画像の出現判定を入れて画像が認識できるようになったらボタンを押すという処理に変更するとスムーズになります。(面倒なので僕は脳筋for派ですw)
一応イメージコード記載しておきます。

# 頻繁に失敗
assert self.img_click("uma")

# 脳筋策
for _ in range(10):
  if self.img_click("uma"):
    break  # img_clickは要素が存在した場合クリックし、クリックしたらTrueを返す
  sleep(0.2)

# スマート策
for _ in range(10): 
  if self.search_template("uma"):
    assert self.img_click("uma")
    break
  sleep(0.2)

スマート策の方では、一見記述が増えただけのように思えますがassertを利用することができるのでデバッグがしやすいコーディングになります。


不明点がある場合は、質問してください!回答できるか分かりませんが回答するかもしれないです

ご購入していただいた方は、コードのダウンロードと詳しい使い方を閲覧できます。

ここから先は

1,033字 / 4画像 / 1ファイル

¥ 1,000

この記事が気に入ったらサポートをしてみませんか?