2020-08-30

SikuliXで様々な背景に表示されるアイコンを認識させる

SikuliXで画像認識をさせていると、背景画像の上に描画されたアイコンを認識させたい場合があります。

背景を含めて認識画像にすると、別の背景に配置されたアイコンの認識率は下がります。

これを解決するため、 SikuliXではアルファチャンネル付きの画像が扱えます。

背景部分を透過させ、アイコンのみを認識させることができます。


アイコンを認識させたい

オペラオムニア(DFFOO)の画面で「NEW」アイコンを認識させるとこのようになります。(認識閾値 0.70)

右側のNEWアイコンをスキャンしました。右側のNEWアイコンが認識率が高いため濃い赤で塗られています。

左側に移るにつれ、認識率が下がり、左端では認識されてていません。

背景を透過させ、認識できるようにします。


GIMPで背景画像を削除

スキャンした画像の加工にフリーの画像エディタ「GIMP」を使用しました。

SikuliXで取り込んだ画像はスクリプトフォルダに保存されています。

これをGIMPで加工していきます。


アルファチャンネルの追加

右側のレイヤー管理で右クリックするとメニューがでます。

その中から「アルファチャンネルの追加」を選択します。

あとは画像から不要部分を消すだけです。

消しゴム使用時は、「不透明度 100」「ハードエッジ チェック」が良いです。

ハードエッジにチェックしないと、消した跡がグラデーションがかかり、完全に消えません。

加工前

加工後

あとは、ファイル→名前を付けてエクスポートで元のファイルに上書きするだけです。


SikuliXで透過画像を認識させる

以上の手順で認識画像の背景は削除されました。

SikuliXでスクリプトを開くとちゃんと背景を透過した表示になります。
(画像の再読み込みが必要なため、スクリプトを開いている場合は、開きなおす必要があります)

そのまま認識させるとこのようになります。(認識閾値 0.70)

認識閾値を0.90くらいに上げると正しく認識されます。

すべてのNEWが濃い赤で認識されるようになりました。


まとめ

認識画像の背景が異なる場合や動画のように時間とともに変化する場合、変化しない部分を残して削除することで認識させるようになります。