CHKIMGXで画像検索
Win10環境でUWSCを使った裏マクロに欠かせないもう一本の柱がCHKIMGXです(理由は前述)
基本的な使い方はUWSCとさほど変わりませんし、先人の記事がそこかしこにありますので省略します
ここでは特にアレをナニする時に自分なりに身に染みたことを書き出しておこうと思います
・対象画面範囲はある程度限定して指定する
別に何かに限った話ではないのですがこの手の処理は検索対象、被検索対象いずれも小さいに越したことはありません
とはいえ類似シンボルに騙されないようにマッチングスコアの差を確保しやすいように一定以上の画像サイズを確保しておく方が動作の安定度は増すと思います
(余談:CHKIMGXには透過色オプションが無いのと色指定検索オプション動作について自分自身が使えない事情もあります)
類似シンボルの誤認識を除外しようとすればマルチヒットを許可してスコア第1位の結果を使うやり方になりますがもっと単純に済ませる方法として存在しうる範囲を限定してしまえば当たり外れの結果だけで処理を進められます
(シングルヒットだと誤認識が最初にくるとそこでお終いになります)
アレにおいては検索対象が何処にいるのか判らない状況は人形選択くらいでしか発生しませんので、それ以外の画像検索は出来るだけ対象範囲を絞っておいた方が謎動作を防止出来ます
・画面の動くタイミングと動き方を意識する
CHKIMGXの動作は想像しているよりも高速だったり判断閾値によっては想定外のタイミング(フェイドイン途中とか)でヒット判定出たりします
フェイドインやスクロールインの途中でヒット出された場合、次ステップのヒット位置を基準にした動作がタイミングずれやターゲット外れになります(なりました)
動きや描画が無いと思われるタイミングを意識しましょう
//遷移監視ループサンプル
chkimgx("recycle.bmp", NOXid, 50, 425, 125, 495, 1, 10, -1)
P_adb_BTN(G_IMGX_X + delta_X + randomx(75), G_IMGX_Y + delta_Y + randomx(30),100,"Retire") //回収ボタン押す
timeover = gettime() + 15 //操作後15秒でタイムアウト判定する
repeat //対象選択ボタン待ち
P_random_sleep(1)
ifb timeover < gettime() then
print "Time over"
exitexit
endif
until chkimgx("feed_set.bmp", NOXid, 325, 175, 400, 255, 1, 10, -1)
sleep(2) //画面安定待ち
chkimgx("feed_set.bmp", NOXid, 325, 175, 400, 255, 1, 10, -1)
P_adb_BTN(G_IMGX_X + delta_X + randomx(75), G_IMGX_Y + delta_Y + randomx(50),100,"Feed set") //選択開始ボタン押す
動作速度にこだわらなければ手順ごとに十分な待ち時間を与えてやればシンプルなスクリプトになりますが実際には通信遅延等での遷移時間ばらつき、操作無視によるタイムオーバー判定に対応するために上記のようなループによる判定待ちを組み込むことになります
画面安定待ちと書かれた部分の上下に同じCHKIMGXがあります、上のCHKIMGXでOK判断(=ループ抜け)した瞬間だとまだ動きがあると懸念されるので2秒待ちを入れて再度座標を拾いにいきます