2020-09-30

SikuliX findAnyListで見つかった画像を判別する

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プロパティの一致をみることで目的の画像かを判別できます。