ChkImgX関数

本ページには広告が含まれています。

画像の曖昧検索を行います。

構文
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_XG_IMGX_YG_IMGX_SCOREに格納
番号にて -1指定時はヒットした数を返し、座標,スコア,画像番号は配列変数ALL_IMG_X[ ],ALL_IMG_Y[ ]
ALL_IMGX_SCORE[ ], ALL_IMGX_NUM[ ]に格納(配列はゼロから)
※内部処理の制限で最大200個までしか検出しない。番号に201以上を指定すると常にFALSEが返る

ダウンロード方法

UWSCの標準関数であるCHKIMG関数 (スクリプト関数)は完全に一致した画像にしかマッチしないため、少しでも変わってしまうと検知されなくなってしまいます。 そこで下記サイトにある拡張機能(ChkImgX関数)を利用すると曖昧検索できるようになります。

ChkImgX-ver1.2.1.zipをクリックしダウンロードします。バージョンは変わっている可能性がありますが、最新版をダウンロードしてください。

また、ChkImgX関数の使用には.NET Framework 4.5以上のバージョンがインストールされている必要があります。

以下のプログラムでレジストリからインストールされている.NET Frameworkのバージョンを求めることができます。値からバージョンの関係値はインストールされている .NET Framework のバージョンを確認する - .NET Framework | Microsoft Learnを参考にしました。

UWSC

初期設定

ダウンロードしたZIPファイルを解凍します。

  • ChkImgX-1.2.1
    • ChkImgX
      • src
        • ChkImgX
          • ChkImgX.cpp
          • ChkImgX.hpp
          • ChkImgX.vcxproj
          • ChkImgX.vcxproj.filters
          • Export.def
          • stdafx.h
          • targetver.h
          • tmatch_opencv.h
          • tmatch_opencv.hpp
        • include
          • GDICapture.h
          • GDICapture.hpp
          • LightWnd.h
          • LightWnd.hpp
          • NekoAddon.h
          • NekoAddon.hpp
          • search_base.h
          • search_base.hpp
          • string_buffer.h
          • win_int64.h
        • NekoAddon
          • Export.def
          • NekoAddon.cpp
          • NekoAddon.vcxproj
          • NekoAddon.vcxproj.filters
          • stdafx.cpp
          • stdafx.h
          • targetver.h
        • ChkImgX.sln
        • ChkImgX.dll
        • ChkImgX.uws
        • NekoAddon.dll
        • Readme.txt
        • sample.png
        • sample.uws
        • 簡単キャプチャ.exe

プログラムを動かすのに必要なのは以下のファイルのみです。

  • ChkImgX-1.2.1
    • ChkImgX
      • ChkImgX.dll
      • ChkImgX.uws
      • NekoAddon.dll

これらのファイルがある同じ階層にChkImgX関数を実行するUWSCファイルを置きます。

UWSC

ChkImgX関数を実行するには、startup_chkimgx()shutdown_chkimgx()で囲う必要があります。

UWSC

特殊変数

マッチした画像の情報が以下の特殊変数に代入されます。第七引数の番号に-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.pngtest.n.png(nは自然数)のすべてのファイルをパターン画像とし、test.2.pngにマッチした場合2を、test.pngにマッチした場合-1を返す。

使い方

マインスイーパー

マインスイーパーのページで画像認識を行います。プログラムはブラウザのズーム倍率を100%にして実行してください。

画像は以下のボタンからダウンロードして同じフォルダに置いて使用してください。

ダウンロードボタン

以下のプログラムは画面上にある未開放.pngのx座標、y座標を出力します。ゲーム開始時に実行すると9×9で81個の画像を認識します。

プログラム実行中にブラウザの画面をスクロールすると正しく認識できなくなる可能性があります。

画像が認識しない場合はChkImgX関数の第八引数の判定閾値の値を10から20くらいにして判定を甘くしてみてください。

それでも認識しない場合はZIPファイル内の画像を参考にスクリーンショットを撮り、PNGファイルとして保存して置き換えてください。

UWSC
結果
CSV

マインスイーパーの各マスの状態を配列に格納し出力します。images配列に格納されている画像名を順番に画像認識のチェックを行い、該当する配列の位置に格納していきます。

UWSC
結果
プレーンテキスト

以下は盤面を進めたとき。

結果
プレーンテキスト

以下はゲームオーバーのとき。

結果
プレーンテキスト

NoxPlayer

NoxPlayerのウィンドウで画像認識を行いたい場合、第二引数にNoxPlayerのIDを指定。

UWSC

以下はNoxPlayerアプリストア.pngの画像を検索。

NoxPlayerの画面(IDに指定しているウィンドウ)
NoxPlayer
探す画像(アプリストア.png)
アプリストア
UWSC
結果
プレーンテキスト

アプリストア.pngをクリックする。

UWSC

第七引数の番号に1以上の数値を指定するとi番目にマッチした画像の情報を取得できます。見つからなかった場合はFalseを返すので、以下のように記述するとマッチしたすべての画像に処理が行なえます。

以下はマッチした画像のx座標y座標スコア番号を取得する例。

UWSC
CSV

第七引数に-1を指定した場合は、配列変数にマッチした画像の情報が格納されます。

UWSC
CSV

ゲームなどを操作するときは以下のように無限ループでチェックを行います。優先度の高いものから順に記述していきます。

G_IMGX_XG_IMGX_YG_IMGX_X + 10G_IMGX_Y - 15とかすることでクリックする位置をずらすことができます。

マッチしたらカーソルが持っていかれるので、ESCでプログラムを強制終了するようにしています。

UWSC

マッチしない場合は第二引数にIDを設定している場合は0にして範囲を画面にする、もしくは第八引数の閾値を+10〜20程度増やし判定を緩くしてみるとかしてみてください。ID0にしてマッチしたなら指定するIDが間違っていたことになりますし、閾値を上げてマッチしたなら画像が厳密過ぎたことになります。

CHKIMGからChkImgXへの書き換え

画像名は拡張子(BMPPNGJPEG)まで記述する必要があります。

UWSC
UWSC

番号(第七引数)を指定するときは、IDx座標y座標は省略不可。

UWSC

IDを指定していればバックグラウンドでも検知できます。

エラー

存在しないファイルを指定

ファイル名に存在しないファイルを指定すると発生します。1行目のimage.pngには指定したファイル名が入ります。画像は実行しているUWSCファイルと同じフォルダに置いてください。

UWSC

指定範囲が無効

x1 > x2またはy1 > y20を除く自然数を座標として指定した場合、エラーが発生します。1行目の[x2,x1,y2,y1]には指定した座標が入ります。

プレーンテキスト

Android画面をPCにミラーリング

Androidを操作したい場合、PCに画面をミラーリングすることで操作することができます。

無料版では連続で10分の制限時間がありますが接続し直せば何度でも使えるので、無料版でも十分かと思います。無料版で動作のテストを行い有料版を購入するのでも良いと思います。

PCのリンク
ApowerMirror-スマホをリアルタイムにミラーリング/制御する
Google Play(Android)のリンク
Google Play

ApowerMirrorのIDは以下で指定できます。

UWSC

参考文献

  1. https://classicrpa.000webhostapp.com/