皆さんはゲームは人間がプレイすると当たり前に考えると思いますが、今回はゲームを機械にやらせてみました!
まずは、実際にスピードの自動化(RPA)を行った映像をご覧ください。
RPAとは
RPAとは、これまで人間が行なってきたコンピューターの画面を見てマウスをドラッグ、キーボードで入力するといった一連の動作を、人間に変わってコンピュータープログラムがそれぞれ画面キャプチャ、画像認識、マウス・キーボード制御を行うことで、人が実行するのと同じかたちで自動化するといったものである。

研究内容
本研究では、様々なミニゲームのRPAを行い、それぞれのゲームの最適なRPAを見つける為に、それぞれのゲームで2種類のRPAプログラムを制作し、その性能評価を行った。
今回はその内の一つのトランプゲーム・スピードのRPAプログラムについて紹介する。トランプのゲーム画面は以下のようになっており、真ん中の二枚のトランプが台札、下の4枚のトランプが自分の場の札、上の4枚のトランプが相手の場の札となっている。

スピードRPAプログラム
画像認識によるRPAプログラム
まず、トランプの数字を画像認識によって取得したプログラムを紹介する。本プログラムはプログラムaとする。スピードのRPAでは、主に以下のような操作が必要である。
まず、事前に、トランプの数字部分のみスクリーンキャプチャーして、フォルダに保存しておく。
1)ゲーム画面の中からトランプカード全体のスクリーンキャプチャーを行う 2)そのスクリーンキャプチャーと、事前に保存していたトランプの数字部分のスクリーンキャプチャーを利用して画像認識にて数値を取得する 3)台札と場札の数字を比べ、自分の場札に台札と隣合う数字があるか確認する 4)もし自分の場札に台札と隣り合う数字があれば、マウスの自動制御でその場札を台札のところまでドラッグする。もし、全てのトランプの数字を確認した上で、隣り合う数字がなければ、相手がカードを出すのを待つか、新しい台札が置かれるのを待つ。
1)の工程では、ゲーム画面の台札の2枚のトランプと自分の場の4枚のトランプのスクリーンキャプチャーを撮る。
2)の工程では、1の工程で取得した数字認識したいトランプ全体のスクリーンキャプチャーと事前に保存していた数字部分のみのスクリーンキャプチャーを使用して、画像認識を行い、画像の一致度が一番高い画像の数値をトランプカードの数値とする。

3)の工程では、取得した台札と場札の数字を順番に比べていき、自分の場札に台札と隣り合う数字(もし台札の数字が3の場合、自分の場札に3からマイナス1かプラス1をした数値の2か4があるか確認する。)があるか確認する。例外なのは、「A」と「K」の場合である。スピードでは、「A」は2とK、「K」はAとQがそれぞれ重ねられるカードなので、もし、台札の数字からマイナス12した数字と場札の数字が一緒の場合(台札がK、場札がAの場合)と、台札の数字からプラス12した数字と場札の数字が一緒の場合(台札がA、場札がKの場合)も重ねられると判別する。
4)の工程では、3)の工程でもし台札の数字と隣り合う数字が自分の場札の中にあれば、そのトランプカードを、マウスの自動制御のpyautoguiのdragTo関数で、その場札を台札のところまでドラッグする。(dragTo関数では、引数でドラッグスピードを調節できるがスピードが速すぎると、トランプカードが掴めずマウスカーソルだけが移動してしまっていたので、今回はドラッグスピードを0.35と設定した。ドラッグが完了したら。また一連の流れを行う。
もし3)の工程で隣り合う数字が見つからなければ、自分の場札の中に、台札に重ねられるカードがないということなので、相手がカードを出すのを待つか、新しい台札が置かれるのを待つ(使用するゲームサイトではお互い出せるカードがない場合自動でそれを認識して新しいカードが台札に追加される)。
もし、どちらかが場札のトランプカードを出し切り、ゲームが終了したら自動的にプログラムも終了するようになっている。
文字認識によるRPAプログラム
次に、トランプの数字をpyocrの文字認識で行ったプログラムについて紹介する。本プログラムは、プログラムbとする。大まかなアルゴリズムに関しては上記のプログラムaと同じだが、トランプの数字認識の部分を変更した。具体的には、まず1)の工程で、トランプ全体ではなく、数字部分のみスクリーンキャプチャーを撮る。2)の工程では、その数字部分のみのスクリーンキャプチャーを使用して、pyocrで数字認識を行う。この際pyocrを使った理由としては、文字認識の精度調節をすることができ、画面のトランプカードの小さな数字でも認識することができるからである。3)以降の工程は、プログラムaと同じとなっている。

RPAプログラムの性能評価
人間、プログラムa、プログラムbそれぞれ5段階の難易度で10回ずつプレイした結果のグラフが以下の通りである。
| very easy | easy | normal | hard | very hard | |
| 人間 | 7勝3敗 | 6勝3敗1分 | 3勝6敗1分 | 1勝7敗2分 | 0勝9敗1分 |
| RPAプログラムa | 10勝0敗 | 10勝0敗 | 10勝0敗 | 9勝1敗 | 8勝2敗 |
| RPAプログラムb | 4勝6敗 | 3勝5敗2分 | 1勝9敗 | 0勝10敗 | 0勝10敗 |
RPAプログラムaに関しては、数字認識の際にpyocrを採用していた為、数字認識の精度は高く、正確にトランプを出せてはいたが、その分認識に時間がかかってしまい、難易度が上がり、敵のトランプの出すスピードが上がるとそれに追いつけなくなり、負けてしまうことが多くなってしまっていた。RPAプログラムbに関しては、トランプの数字認識を画像認識で行ったことで、認識で時間をかけずに行えたので、スピードは、場の札の運なども絡むので、勝率10割とまではいかなかったものの、hardでは勝率9割、veryhardでは勝率8割と高い数値を出すことができ、人間、プログラムbどちらよりも高いスコアを記録することができた。
本評価によって、スピードでは、画像認識によってトランプの数値を認識し、トランプを出していくプログラムが、本研究のRPAの中では最適ということがわかった。
コメント