画像の曖昧検索を行います。
- 構文
- CHKIMGX( 画像名, ID, x1, y1, x2, y2, 番号, 判定閾値, 着目する色 )
- 引数
- 画像名 (String)必須
- 画像ファイル名(BMP, PNG, JPEG, 形式は拡張子から判断)
- ID (Integer)省略可
- Windowを識別するID (0 であればスクリーン全体)
- x1, y1, x2, y2 (Integer)省略可
- サーチ範囲(指定ウィンドウの左上が原点。クライアント領域基準ではない)
- 番号 (Integer)省略可
- マッチした箇所が複数ある場合に順番を指定 (左上から)
- -1
- -1が指定された場合はヒットした数を戻値として返し、座標,スコア,画像番号の情報は一致率の高い順で ALL_IMGX_X[ ], ALL_IMGX_Y[ ], ALL_IMGX_SCORE[ ], ALL_IMGX_NUM[ ] に格納。
G_IMGX_X, G_IMGX_Y, G_IMGX_SCORE, G_IMGX_NUMには最も一致率の高い箇所の情報が入る
- 判定閾値 (Integer)省略可
- [0-100](%) マッチしたと判定する閾値(0は完全一致のみ)マッチした場合のスコアはG_IMGX_SCOREに格納。値が小さいほど厳しくなる。1~20程度が実用範囲と思われる。
- 着目する色 (Integer)省略可
- 指定した色とどれだけ近いかでグレースケール化した画像を使ってマッチングの計算を行う。文字の色などを指定することで背景の変化に強いマッチング判定を行うことが可能。
$000000〜$FFFFFFのRGB値で指定。-1は色指定なし。
- 戻り値
- 有ればTRUE、無ければFALSE
TRUEの場合は見つかった座標、スコアをグローバル変数G_IMGX_X、G_IMGX_Y、G_IMGX_SCOREに格納
番号にて -1指定時はヒットした数を返し、座標,スコア,画像番号は配列変数ALL_IMG_X[ ],ALL_IMG_Y[ ]
ALL_IMGX_SCORE[ ], ALL_IMGX_NUM[ ]に格納(配列はゼロから)
※内部処理の制限で最大200個までしか検出しない。番号に201以上を指定すると常にFALSEが返る
ダウンロード方法
UWSCの標準関数であるCHKIMG関数 (スクリプト関数)は完全に一致した画像にしかマッチしないため、少しでも変わってしまうと検知されなくなってしまいます。 そこで下記サイトにある拡張機能(ChkImgX関数)を利用すると曖昧検索できるようになります。
Classic RPA – NEWS Automatic Detection- Classic RPA – NEWS Automatic Detection(Internet Archive)
- UWSC 本体とあいまい検索 | 日々彼是
ChkImgX-ver1.2.1.zipをクリックしダウンロードします。バージョンは変わっている可能性がありますが、最新版をダウンロードしてください。
また、ChkImgX関数の使用には.NET Framework 4.5以上のバージョンがインストールされている必要があります。
以下のプログラムでレジストリからインストールされている.NET Frameworkのバージョンを求めることができます。値からバージョンの関係値はインストールされている .NET Framework のバージョンを確認する - .NET Framework | Microsoft Learnを参考にしました。
初期設定
ダウンロードしたZIPファイルを解凍します。
-
ChkImgX-1.2.1
-
ChkImgX
-
src
- ChkImgX
- include
- NekoAddon
- ChkImgX.sln
- ChkImgX.dll
- ChkImgX.uws
- NekoAddon.dll
- Readme.txt
- sample.png
- sample.uws
- 簡単キャプチャ.exe
-
src
-
ChkImgX
プログラムを動かすのに必要なのは以下のファイルのみです。
-
ChkImgX-1.2.1
-
ChkImgX
- ChkImgX.dll
- ChkImgX.uws
- NekoAddon.dll
-
ChkImgX
これらのファイルがある同じ階層にChkImgX関数を実行するUWSCファイルを置きます。
ChkImgX関数を実行するには、startup_chkimgx()〜shutdown_chkimgx()で囲う必要があります。
特殊変数
マッチした画像の情報が以下の特殊変数に代入されます。第七引数の番号に-1が指定された場合は、一致率の高い(スコア値が低い)順でAll_*に代入され、G_*には最も一致率の高い(スコア値が最低)情報が代入されます。
- G_IMGX_X(ALL_IMGX_X)
- x座標
- G_IMGX_Y(ALL_IMGX_Y)
- y座標
- G_IMGX_SCORE(ALL_IMGX_SCORE)
- スコア
1-類似度[%]で求められる値。0=完全一致。例えば95%一致した画像にマッチした場合、5が出力されます。 - G_IMGX_NUM(ALL_IMGX_NUM)
- 画像番号
ファイル名.番号.拡張子の形式で指定したすべてのパターン画像で判定しマッチした画像の番号。
画像にtest.pngを指定した場合、test.pngとtest.n.png(nは自然数)のすべてのファイルをパターン画像とし、test.2.pngにマッチした場合2を、test.pngにマッチした場合-1を返す。
使い方
マインスイーパー
マインスイーパーのページで画像認識を行います。プログラムはブラウザのズーム倍率を100%にして実行してください。
画像は以下のボタンからダウンロードして同じフォルダに置いて使用してください。
以下のプログラムは画面上にある未開放.pngのx座標、y座標を出力します。ゲーム開始時に実行すると9×9で81個の画像を認識します。
プログラム実行中にブラウザの画面をスクロールすると正しく認識できなくなる可能性があります。
画像が認識しない場合はChkImgX関数の第八引数の判定閾値の値を10から20くらいにして判定を甘くしてみてください。
それでも認識しない場合はZIPファイル内の画像を参考にスクリーンショットを撮り、PNGファイルとして保存して置き換えてください。
- 結果
マインスイーパーの各マスの状態を配列に格納し出力します。images配列に格納されている画像名を順番に画像認識のチェックを行い、該当する配列の位置に格納していきます。
- 結果
以下は盤面を進めたとき。
- 結果
以下はゲームオーバーのとき。
- 結果
NoxPlayer
NoxPlayerのウィンドウで画像認識を行いたい場合、第二引数にNoxPlayerのIDを指定。
以下はNoxPlayerのアプリストア.pngの画像を検索。
- 結果
アプリストア.pngをクリックする。
第七引数の番号に1以上の数値を指定するとi番目にマッチした画像の情報を取得できます。見つからなかった場合はFalseを返すので、以下のように記述するとマッチしたすべての画像に処理が行なえます。
以下はマッチした画像のx座標、y座標、スコア、番号を取得する例。
第七引数に-1を指定した場合は、配列変数にマッチした画像の情報が格納されます。
ゲームなどを操作するときは以下のように無限ループでチェックを行います。優先度の高いものから順に記述していきます。
G_IMGX_XとG_IMGX_YをG_IMGX_X + 10、G_IMGX_Y - 15とかすることでクリックする位置をずらすことができます。
マッチしたらカーソルが持っていかれるので、ESCでプログラムを強制終了するようにしています。
マッチしない場合は第二引数にIDを設定している場合は0にして範囲を画面にする、もしくは第八引数の閾値を+10〜20程度増やし判定を緩くしてみるとかしてみてください。IDを0にしてマッチしたなら指定するIDが間違っていたことになりますし、閾値を上げてマッチしたなら画像が厳密過ぎたことになります。
CHKIMGからChkImgXへの書き換え
画像名は拡張子(BMP、PNG、JPEG)まで記述する必要があります。
番号(第七引数)を指定するときは、ID、x座標、y座標は省略不可。
IDを指定していればバックグラウンドでも検知できます。
エラー
存在しないファイルを指定
ファイル名に存在しないファイルを指定すると発生します。1行目のimage.pngには指定したファイル名が入ります。画像は実行しているUWSCファイルと同じフォルダに置いてください。
指定範囲が無効
x1 > x2またはy1 > y2で0を除く自然数を座標として指定した場合、エラーが発生します。1行目の[x2,x1,y2,y1]には指定した座標が入ります。
Android画面をPCにミラーリング
Androidを操作したい場合、PCに画面をミラーリングすることで操作することができます。
無料版では連続で10分の制限時間がありますが接続し直せば何度でも使えるので、無料版でも十分かと思います。無料版で動作のテストを行い有料版を購入するのでも良いと思います。
- PCのリンク
- ApowerMirror-スマホをリアルタイムにミラーリング/制御する
- Google Play(Android)のリンク
- Google Play
ApowerMirrorのIDは以下で指定できます。


