前提・実現したいこと
ゲームのBOTを作成しています。
画面上の敵を攻撃し、体力が減ったら回復を行い、魔力に余裕があればスキルを使用し、ミニマップを確認しながら移動し…というもので、画面全体を何度もキャプチャする必要があります。
Pythonにて、PillowのImageGrabを用いて試作してみたのですが、負荷が大きく、あまり実用的なものにはなりませんでした。
(敵の探査に一番負荷がかかり、その次に重いのが画面キャプチャなので、キャプチャ部分をどうにかしたいというのが、今回の質問の意図です)
そこで現在、Win32apiを用いてプログラム全体を作り直している最中でして、画面の取得はPrintWindowで行っております。
本題ですが、より負荷の少ない画面キャプチャ方法(関数名、ライブラリ名など)をご存じでしたらご教示いただければ幸いです。
(キャプチャというか、画面の特定の座標の画素値を低負荷で取得できる方法はないのでしょうか?)
手法の名前だけなどでも構いませんので、回答よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Windows 10
Python 3.7.1
Python以外の言語の使用可否:可
上記のBOTはバックグラウンドで動作することが必須なため、それが可能な言語であれば変更可能です。
Win32apiで実現可能と思われるため、大抵の言語に変更が可能です。
追記での申告となり申し訳ありません。(03:45, 2019年8月4日)
パケット解析やメモリスキャン等が困難な状況なため、画像処理的な手段で作成しようと考えております。
後から何度も追記してしまい申し訳ありません。(16:57, 2019年8月4日)
謝辞
ImageGrabより負荷の軽い方法を示してくださったZuishin様をベストアンサーとさせていただきます。1ドットを監視すれば行える、体力自動回復、スキルの自動使用部分の負荷を下げることができました。
PrtScを使用する方法は、私の技術力不足により、どのようにすればバックグラウンドの画面を取得できるか分かりませんでした、申し訳ありません。
また、Teratailが初めてで、至らない投稿をしてしまい、申し訳ありませんでした。編集・追記依頼を記入してくださった方々にも御礼を申し上げます。
皆様、ありがとうございました。
最後になりますが、敵の探査のような大きめの範囲の画素値を取得しなければいけない場合に、これまではPrintWindowで画面を取得した後Numpyのasarray関数でarrayに変換して使用していたのですが、frombuffer関数を使用したほうが高速で、およそ3/5の時間で変換できることが分かりました。
備忘録がてら記載させていただきます。
回答2件
あなたの回答
tips
プレビュー