Pythonとそのライブラリを用い、ゲームの操作を自動化。
プレイヤーが通常入手しづらい情報をできるだけ効率的に取得する。
取得したデータはユーザが利用する想定で加工し、tsvファイルとして保存する。
左側...ゲーム画面(自動操作)
右側...エディタと情報が追記されていく様子を捉えるターミナル
-
OCRによる情報の取得と加工
- ☑️ 達成できた 🔲 概ね達成できた 🔲 達成できなかった
- 結果は実用レベルに到達しなかったが、満足の行く結果だった。
- 取得方法を工夫することができた。
- 取得内容が不十分でも、補正することができ、それによって利用できる情報も有ることが分かった。
- ☑️ 達成できた 🔲 概ね達成できた 🔲 達成できなかった
-
OCRへの興味を充足させる
- ☑️ 達成できた 🔲 概ね達成できた 🔲 達成できなかった
-
実際にゲーム内で行うには非常に煩雑な作業の自動化
- 🔲 達成できた 🔲 概ね達成できた ☑️ 達成できなかった
- 実用できるレベルではない。
-
自分の発想をもって課題解決の方法を導き出す。
- ☑️ 達成できた 🔲 概ね達成できた 🔲 達成できなかった
- このテーマ自体が通常のプレイではできない情報の取得の仕方へのアプローチ。そして自動化。
- +のテンプレートを利用することで、適切な対象を無理なく選び出す
- 色の変わらないピクセルを指定することでレアリティの判別をより安定感の高いものとした。
- ステータス名や値を取得するために、画像の拡大をするなどの発想で対応できた。
- フォント毎に二値化のためのしきい値を変更した。
コンポーネント名 | 用途 |
---|---|
PyAutoGUI | マウスの自動操作 |
OpenCV | マウス操作向けの座標取得、条件判定のための画像比較 |
Pillow | 画面キャプチャの取得、画像のトリミング |
PyOCR | 画像から文字情報を取得 |
pandas | ログ出力の整形、取得情報のtsv出力 |
コンポーネント名 | 用途 | 種類 |
---|---|---|
GetUniqueCoordinates | 取得された近い座標を一つにまとめる | 関数 |
◎,○
…効果のあった内容。◎は特にそう感じたところ。
▲
…期待通りに行かなかった点
☓
…
-
◎際どい場面では誤検出も有るテンプレートマッチングと違い、常に安定した結果が出る。
- この動作を意識してのテンプレート作成をした(テンプレートの左上ピクセルにレアリティの色が入るような画像を指定した)
-
○ 検出精度の向上が図れた
○ 画像検出の原理を利用した上でのアプローチをとることができたと思う。
- 画像を拡大して保存することによって、多少細やかなしきい値設定ができるようになる
- ※サンプルコードのコピペではなく、再現性があって、仕組みを自分の言葉で説明できるやり方を得た。
☓ 処理時間の増大
- 画像のサイズや取得内容を工夫することで本番では想定よりかは短い時間だった。
-
○ テストやデバッグの際に目を余り使わなくてすむ(着色に意味をもたせているので識別にかかる負担が少ない)
- 情報が多かったり正確であろうとしたことで逆に使いづらい場面もあり、適切な出力を考える意味で良い経験だった。
-
○ 工数大幅削減と実績が有るので非常に助かった。
-
○ ひとつか2つ汎用的な関数が作れたと思う。
○ 正規表現を一つのクラスに収めてIDEのインテリセンスが聞くようにだとか、同じ内容を分散させないようにしてメンテナンス性の向上。
-
処理終了までにかかる時間
- ユーザによるとは思うが、処理開始から終了までに2時間ほどかかる。
- 今回最も時間がかかる処理は画像の二値化で、精度向上にはやむないかもしれない。
-
適切な正規表現パターンの模索
- 正規表現は得意だと思っていたが、それでも実際の出力を補正しきれなかった。
-
特定の項目、特定の値の区別
- 例えば3~25の間にある攻撃力のパラメータは%と+の両方のパターンがあり、それを区別する方法。
- 多分OCRの検出モードを変更して、更に数値だけを検出する工程を追加するなどで対応が可能と考えられる。
- 例えば3~25の間にある攻撃力のパラメータは%と+の両方のパターンがあり、それを区別する方法。
-
不定期に発生する誤クリック
- テスト中数回遭遇したが、発生条件が不明。
- 起動プロセス一覧のボタンを押していることが原因と思われるが特定の場所で発生するわけではない。
- テスト中数回遭遇したが、発生条件が不明。
-
単純な検出精度か正規表現による補正力
- 実用可能でないだけでなく、ここで正確な情報が取得できるのであればデータ分析にも持っていけるので結構重要。
- 自動化による手間と感じていた作業からの開放
- 見づらいログの経験値を得た。
- インデントが揃っているだけでもだいぶ違う。
- 正直中身が多少不足していても、追跡しやすい情報が見やすければ良いと思った。
- あるいはインデントが揃うような情報の記載の仕方をするなど。
- 憧れのあったpandasに触ることができた
- 本来想定されている用途ではないと思う。
-
綺麗なコーディング
- フローの中でいきなり関数を作り出したりしてしまった
-
変数の命名規則が一貫しない、似たような変数名をつけたい場面がとても多かった。
-
コーディング量が多い。
- 多分メインオプションとサブオプションで分けた時の正規表現処理がダブっているんだと思う。