SikuliXで画像を検索するメソッドのfindAnyListは、一度に複数の画像を検索し見つかったものを返します。
どの画像が見つかったか判断する方法をまとめます。
index番号で判別
検索結果のオブジェクトに対してgetIndexのメソッドを呼ぶと検索画像配列の位置が得られます。
これによりどの画像が検索されたか判定できます。
サンプルコードは以下。
# 検索画像配列 IMGS = [ "1601465877364.png" ,"1601465887104.png" ,"1601465895898.png" ] # 検索 ms = reg.findAnyList(IMGS) # 検索結果配列から1つごと取り出して処理 for m in ms: # indexが2の場合クリック if m.getIndex() == 2: m.click() break
上記はIMGSに登録された画像のうち、3番目(index=2)の画像のみクリックする。
ファイル名で判別
index番号で判別した場合は、検索画像配列の並びが変わると判定条件のindex番号も変更すが必要になります。
並びに影響を受けないファイル名で判別する方法もあります。
画像オブジェクトはnameプロパティでファイル名を取得することができます。検索画像、検索結果画像のnameを比較することで対象の画像であるか判別できます。
サンプルは以下。
# 検索画像 IMG = Pattern("1601465895898.png") # 検索画像配列 IMGS = [ "1601465877364.png" ,"1601465887104.png" ,IMG ] # 検索 ms = reg.findAnyList(IMGS) # 検索結果配列から1つごと取り出して処理 for m in ms: # 名前が一致したらクリック if m.getImage().name == IMG.image.name: m.click() break
まず、比較用画像オブジェクトIMGを定義します。
検索画像配列には、このIMGを追加。
検索結果のgetImageを呼び出すと画像オブジェクトが取得できます。この画像オブジェクトのnameプロパティが見つかった画像のファイル名になります。
nameプロパティの一致をみることで目的の画像かを判別できます。