SikuliXのfind()を使った画像検索を解説

 

★悩み★
・SikuliXで一致した全画像に対する「操作自動化」ってできるかな?
・SikuliX内でfind()を使うと、どのような処理を自動化できるのかな?
・SikuliXの「find()とは」から「プログラム作成方法」まで知りたい。



こういった「悩み」に答えます。
 

★本記事の内容★
① SikuliXのfind()とは?
➁ 準備:SikuliXのインストールと起動
③ SikuliXのfind()を使う方法



これからご紹介する「SikuliXのfind()を使った画像検索を解説」を実践したことで、5分以内で「画像一致した複数箇所」を自動操作できました(下の動画参照)。
 

SikuliXのfind関数を使ったプログラム



記事の前半では「SikuliXのインストールや起動といった環境の準備」を解説します。
記事の後半では「SikuliXのfind()を使い画像一致した全箇所を自動操作する方法」を紹介します。
 

この記事を読み終えることで、「SikuliXにおいてfind()」を使える状態になります。
 

★SikuliXとは★
SikuliX(シクリ)とは、画像認識を用いたGUI操作自動化ツールです。簡単な操作で「エクセル入力の自動化」などに利用できます。「検索ボックスに検索ワードを入力して検索ボタンを押す」などの操作を自動化できます。
さらに詳しく知りたい方には、以下の記事がオススメです。
>> 【要点解説】SikuliXとは?を解消!3ステップで入門する方法を解説



ちなみに、筆者が2週間でSikuliXを学んだ方法や手順について以下で公開しています。皆様の学習の参考になれば嬉しいです。

>> SikuliXに0から入門し操作を自動化するまでのロードマップを公開中

 

SikuliXのfind()とは?


「SikuliXのfind()とは?」に関してご紹介します。
 

★SikuliXのfind()関連の情報★
・find()で自動化できる処理(機能説明)
・find()を利用するべき場面(用途)



以降で、上記「SikuliXのfind()関連の情報」の各項目に関してご説明します。
 

find()で自動化できる処理(機能説明)

「find()で自動化できる処理(機能説明)」に関して説明します。
 

SikuliXでは、find()という関数を使えます。まずは、find()を使うことで「自動化できる処理」に関して説明しますね。



SikuliXにおいて、「find()」を使うことで、以下の処理を自動化できます。
 

★find()を使うことで自動化できる処理★
①指定した画像が画面上に存在するかを検索
 存在する場合、一致した箇所の位置情報を取得
➁指定した画像に「似ている箇所」が画面上に存在するかを検索
 存在する場合、「似ている箇所」全ての位置情報を取得



以上が、「find()で自動化できる処理(機能説明)」となります。
 

find()を利用するべき場面(用途)

「find()を利用するべき場面(用途)」に関して説明します。
 

筆者の体験談をもとにして、SikuliXのfind()を利用するべき場面に関して解説しますね。



筆者は、この1年間でSikuliXを用いて、10件ほどの業務自動化を実施しました。
その経験を通して、以下の場面では、find()を利用するべきだと考えました。
 

★SikuliXでfind()を利用するべき場面★
指定した画像と「似ている全ての箇所」に対する操作を自動化したい場合
例)「ー」が記載された行頭に「Clicked」を記入したい(下の動画参照)

 

SikuliXのfind関数を使ったプログラムの例



以上が、「find()を利用するべき場面(用途)」となります。
 

指定した画像と「似ている全ての箇所」に対する操作の自動化をしたい方は、SikuliXのfind関数の利用を検討してみてください。


 

準備:SikuliXのインストールと起動


「準備:SikuliXのインストールと起動」に関してご紹介します。
 

★SikuliXでfind()を使うための環境準備の手順★
手順1:SikuliXをインストール
手順2:SikuliXの起動



上記の流れで、「find()で画像検索するための環境準備」ができます。
 

上記の各手順は、以下の日時で動作確認済みです。
動作確認済み日時:2022年5月5日



以降で、上記「SikuliXでfind()を使うための環境準備の手順」の各手順に関してご説明します。
 

手順1:SikuliXをインストール

「手順1:SikuliXをインストール」に関して説明します。
 

お使いのパソコンにSikuliXをインストールしましょう。



「SikuliXをWindowsにインストールする手順」に関しては、以下の記事をご覧ください。
>> 【Windows向け】SikuliXのインストール手順と基本的な使い方
 

「macOS(Mac)にインストールする手順」に関しては、以下の記事をご覧ください。
>> 【Mac向け】SikuliXのインストール手順と基本的な使い方
 

以上が、「手順1:SikuliXをインストール」となります。
 

手順2:SikuliXの起動

「手順2:SikuliXの起動」に関して説明します。
 

インストールしたSikuliXを起動し、「find()を使ったプログラム」を記載できる状態にしましょう。



「WindowsにインストールしたSikuliXを起動する手順」に関しては、以下の記事をご覧ください。
>> 【Windows向け】SikuliXのインストール手順と基本的な使い方
 

「macOS(Mac)にインストールしたSikuliXを起動する手順」に関しては、以下の記事をご覧ください。
>> 【Mac向け】SikuliXのインストール手順と基本的な使い方
 

以上が、「手順2:SikuliXの起動」となります。
 

Javaをインストールし、SikuliXのjarファイルをダウンロードすることで、簡単にSikuliXの環境を準備できます。
以降で、find()で画像検索する方法に関して解説します。


 

SikuliXのfind()を使う方法


「SikuliXのfind()を使う方法」に関してご紹介します。
 

★SikuliXでfind()を使う方法★
① find()の記述方法を解説
➁ find()とfindAll()で画像一致した箇所を自動操作する方法



SikuliXの「find()」を使うことで、「画面内に指定した画像が存在するかを検索」できます。
 

上記の各手順は、以下の日時と環境で動作確認済みです。
動作確認済み日時:2022年5月5日
動作確認済み環境:macOS Catalina



以降で、上記「SikuliXでfind()を使う方法」の各項目に関してご説明します。
 

find()の記述方法を解説

「find()の記述方法を解説」に関して説明します。
 

画像で画面上を検索する関数として、「find()」「findAll()」があります。



SikuliXで「指定した画像が画面上に存在するか検索したい」場合、「find()」「findAll()」のいずれかを利用します。
各関数に関して、簡単に記述方法を記載しますね。
 

★find()の記述方法★
・処理
 指定した画像が画面上に存在するか検索する。
 画像と「似た箇所」が複数ある場合、最も類似度が高い箇所を返却する。 
・書き方
 find(検索したい画像[必須], 類似度の閾値[任意])
・参照
 SikuliXのfind()に関するリファレンス(公式サイト)

  

★findAll()の記述方法★
・処理
 指定した画像が画面上に存在するか検索する。
 指定した画像と「似た箇所」が複数ある場合、全候補を返却する。 
・書き方
 findAll(検索したい画像, 類似度の閾値[任意])
・参照
 SikuliXのfindAll()に関するリファレンス(公式サイト)



以上が、「find()の記述方法を解説」となります。
 

find()とfindAll()で画像一致した箇所を自動操作する方法

「find()とfindAll()で画像一致した箇所を自動操作する方法」に関して説明します。
 

SikuliXのfindとfindAllを使って、画像一致した箇所を自動操作するプログラムを作成してみましょう。



メモ帳などのテキストエディタを起動し、下図のように「●」と「ー」を入力しましょう。
 

テキストエディタに「●」と「ー」を記入



続いて、起動したSikuliX上において、「スクリーンショットを撮る」をクリックし、テキストエディタに入力した「●」と「ー」の画像を撮影しましょう。
その後、以下のプログラムを作成してください。

  

findとfindAllを使ったプログラム

 

# find関数で画像一致度が最も高い箇所をクリック
f = find(Pattern("1651713698116.png").similar(0.89))
click(f)
sleep(5)
type("Clicked ")


# findAll関数で画像に一致した箇所を全てクリック
f_list = findAll(Pattern("1651712786891.png").similar(0.77).targetOffset(-2,0))
for f_item in f_list:
    click(f_item)
    sleep(5)
    type("Clicked ")


print "SikuliXのfind関数とfindAll関数を実行しました。"



ちなみに、上記プログラムで使った「click」「for」「targetOffset」に関する詳細を知りたい方には、以下の記事がオススメです。

>> SikuliXでマウスのクリックや移動操作を自動化

>> SikuliXのforとwhileで繰り返し実行(loop)

>> SikuliXでクリック(click)のオフセット(offset)と認識精度を設定
 


プログラム作成後、SikuliX上の「実行」ボタンをクリックします。

クリック後、下のデモ動画のように、findとfindAll使った操作の自動化を実現できます。
 

findとfindAllを使ったプログラムの実行結果



以上が、「find()とfindAll()で画像一致した箇所を自動操作する方法」となります。
 

SikuliXの「find」「findAll」を使うことで、画像一致した箇所を自動操作できます。



ちなみに、「SikuliXをシステムで利用する場合の注意点」や「SikuliXでAndroidを操作する方法」などを知りたい方には、以下の記事で紹介している本がオススメです。
>> 【入門者向け】SikuliXの勉強に役に立つオススメ書籍3冊

 

【まとめ】SikuliXのfind()を使った画像検索を解説


いかがでしたでしょうか?
SikuliXで画面上の画像検索をする関数「find」と「findAll」の使い方をプログラムとデモ動画を用いて解説し、以下の悩みを解決しました。
 

★悩み★
・SikuliXで一致した全画像に対する「操作自動化」ってできるかな?
・SikuliX内でfind()を使うと、どのような処理を自動化できるのかな?
・SikuliXの「find()とは」から「プログラム作成方法」まで知りたい。



SikuliXで画面上に「ある画像が存在するかどうか検索したい」場合、「find」と「findAll」の利用を検討してみてください。

コメント