(金)PCにも作業してもらおう雨続きで外に出るのが億劫になります。晴耕雨読とは田園で世間の煩わしさから離れて心穏やかに暮らすことだそうですが、雨の日はコードを読んで過ごすのも悪くないかもしれません。おはようございます、本日のブログ当番M.Iです。先日CEDECに行ってきましたが、自動化についてのセッションが増え、効率化がゲーム開発に求められるように感じてきました。効率化の考え方の一種、GUIでの自動化について話します。CUIのプログラムなら自動的に走らせるのは難しくないことが多いです。"error"とすればカレントディレクトリを再帰的に回り、ファイルを読みとり何行目にerrorという文字列があるかを出力してくれます。これをjenkinsにさせれば指定した時間に自動的にログを調べ、errorの文字を検索するというような動作ができます。最近のゲームエンジンはUnity然り、UE4然りGUIで操作します。パッケージ作成等はCUIでも操作できるので自動化が楽ですが、自動配置というようなことをしたい場合は自動化が難しいかと思います。プラグインで実装ということもできますが、APIの構造など、内部をよく知っておかないと実装ができないです。そこで画像認識とマウス自動操作を実装し、自動化を実現してみます。コンピュータに画像にある物体を認識させるのは、コンピュータビジョンという研究分野なのですが、うれしいことに人類の研究の成果がOpenCVというライブラリに還元されていて、手軽に利用できます。Visionの略なのでコンピュータビジョン専門のライブラリです。映っている物体を学習して分類する機能もあり、機械学習といった分野とも関係するので、サポートベクターマシン等の幅広いアルゴリズムも備えています。コンピュータビジョンで実装する利点として、ソフトのAPIに依存しないプログラムが書けることが挙げられます。反面似たような画像が画面上に現れることで、フローがおかしくなったり、誤って別の箇所をクリックするといった事故が起こることもありえます。プラグインにも言えることですが、最悪アセットが削除されたり、変な状態で上書き保存されることも考えられます。どちらにしても、こまめにバージョン管理しておけば大体の場合リカバリできます。前置きが長くなりましたが実装していきます。C++から利用すれば最新の手法が試用できるのですが、古典的なテンプレートマッチングという手法で実装するので、C#版の方で実装します。テンプレートマッチングとは探したい物体の映った画像を作り、その画像と一致するところを探すという手法です。違う物体を目的のものと認識してしまうことがほとんどないのですが、画像の向きがちょっとでも変わったり、少しでも形が違うと認識されなくなってしまいます。3D空間に浮いていたり、回転するUIを認識させたいわけではないのならこの手法で充分です。https://github.com/shimat/opencvsharpからソースをビルドすることもできますし、nugetから自分のプロジェクトに組み込んでもいいです。雰囲気をつかむため、画像からテンプレート画像を検出してみます。コード中の<>は半角に直してください。テンプレートマッチングし、結果をresultに入れる。テンプレート画像と似ているほど1に近付く。);}}}テンプレートマッチングはテンプレート画像を画像の上で縦横にずらし、一致するピクセル数を数えるイメージです。画像からはみ出た個所を検出しても意味がないので、resultはテンプレート画像分引いたサイズになっています。認識はこれで試せました。PCの画面をキャプチャし、OpenCVに渡す必要があります。OpenCVにカメラ出力をもらう関数があります。DSFという画面キャプチャソフトの出力をとれるのでそれを利用します。後はテンプレートマッチングと同じ最後にマウス入力を行います。http://whoopsidaisies.hatenablog.com/entry/2013/03/22/142031[1]を参考にWindowsAPIを使用し、指定個所をクリックさせるようにします。0);}}テンプレートマッチング後、detectedLocationsに見つかった個所が入っているので、そこでWinAPI.Clickを呼んでやればクリックしてくれます。これで画面から物体を認識し、クリックまで実装できました。jenkinsのworkspaceフォルダにテンプレート画像とビルドした実行ファイルを入れておけば、「Windowsバッチコマンドの実行」の機能で自動操作に組み込めます。マウスクリック以外にもキーボード入力といった任意の操作が自動化できるので、アイデア次第で様々な仕事ができるようになるかもしれません。技術交流の業(2019.03.07)福袋争奪戦デビュー(2019.01.31)温泉旅行(2019.01.24)ゲーセンの近況(2018.11.29)健康的にプログラミングを続けるためのちょっとした習慣(2018.10.18)コメントコメントを書く名前:メールアドレス:(ウェブ上には掲載しません)アドレス(URL):この情報を登録するコメントは記事投稿者が公開するまで表示されません。