現: 2025-03-03 (月) 14:14:18 yuji ソース
Line 1: Line 1:
 +* SikuliX [#ef01b174]
 +Sikuli(シクリ)は,デスクトップアプリケーションでの作業を人に代わって自動的に操作出来るようにするツール。~
 +画像認識([[OpenCV>https://opencv.org/]])や文字認識OCR([[Tess4J>http://tess4j.sourceforge.net/]]/[[Tesseract>https://github.com/tesseract-ocr/tesseract]])を利用してGUIコンポーネントを認識して,いろいろな動作するようになっている。~
 +また,Python(Jpython)などを使って操作をプログラム化出来る。~
 +
 +SikulはJavaで実装されていてJVM上で動作する。このため,Windows,Linux,Mac OS,Androidなどでも利用できる。~
 +
 +自動化をプログラムするのにIDEが備わっていて,プログラム言語と画像認識を使用してプログラムしていくというユニークなソフトウェア。なかなかすごいツールです。~
 +
 +一般的な[[RPA(robotic process automation)>https://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%9C%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%BB%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%83%BB%E3%82%AA%E3%83%BC%E3%83%88%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3]]とは違い画像認識ベースで自動化を行うので,あらゆるアプリケーションで利用することが出来る。~
 +
 +Sikuliは,2009年にMITのUser Interface Design Groupで開発されたオープンソース・ソフトウエアで,無料で使用することが出来る。~
 +
 +ソースコードは,[[github – sikuli>https://github.com/sikuli/sikuli]]で公開されているが,2012年でプロジェクト開発が終了している。~
 +その後の開発とサポートは,[[RaiMan's SikuliX>http://sikulix.com/]]として開発を引き継いでいるようだ。~
 +
 +** Sikuli(SikuliX)で出来ないこと・苦手なこと [#u416d60c]
 +Sikuli(SikuliX)は手軽に始められてスクリプトの作成も比較的容易だが,いくつか出来ないことや苦手なことがある。~
 +- 操作を自動で記録するレコーダー機能がない~
 +市販されているRPAに実装されているレコーダー機能は,人が操作した手順をツールが自動で記録する機能。~
 +Sikuli(RPAとは言っていないが・・・)には,このレコーダー機能が実装されていない。~
 +レコーダー機能はお手軽で有用なのだが,人が操作する時には途中で本来の操作とは違う操作をしてしまうことがあったりするので,後でレコードした操作を編集することが多い。~
 +レコーダー機能は慣れてくるとあまり使わなくなる傾向があるので,まあ無くてもそう困らない。~
 +- 作成したスクリプトが他のPCで動作しないことが多い~
 +Sikuliは画面上に表示される画像を探して操作する位置を特定するので,ディスプレイの解像度が異なるPCとかで使うとうまく動作しないことがある。~
 +また,OSのデザインがカスタマイズされていてボタンの色やデザインなんかが違う場合でも,うまく動作しなくなっちゃう。~
 +ディスプレイの解像度が異なっていても,画像のピクセルサイズが同じになるように解像度を設定すれば(ディスプレイのアスペクトレシオを同じにする)うまく動く。~
 +- 表示倍率を変更すると動作しなくなる~
 +アプリケーションによっては表示倍率を変更する機能があったりする。表示倍率100%でスクリプトを作成したら,スクリプトを実行するときも表示倍率100%にしないと,うまく動作しなくなってしまう。~
 +
 +* Sikuliのインストール [#uadfb02d]
 +[[Sikul>https://github.com/sikuli/sikuli]]が開発が終了しているので,[[SikuliX>http://sikulix.com/]]を使ってみる。~
 +
 +** SikuliXのインストール [#v224e1b3]
 +[[SikuliX>http://sikulix.com/]]の最新安定バージョンは2.0.5。~
 +SkuliXはJavaで動作するので,前もって[[Java:https://www.oracle.com/jp/java/technologies/downloads/]] JDKまたはJREのバージョン8以降の64bit版をインストールしておく。~
 +- SikulX IDE~
 +[[SikulX IDE ver2.0.5の実行ファイル>https://launchpad.net/sikuli/sikulix/2.0.5/+download/sikulixide-2.0.5.jar]]をダウンロードする。~
 +- SikuliX API~
 +[[SikulX APIファイル>https://launchpad.net/sikuli/sikulix/2.0.5/+download/sikulixapi-2.0.5.jar]]をダウンロードする。~
 +- スクリプトエンジン~
 +SikuliXはいくつかのスクリプトエンジンが使える。Jython(Python 2.7)とJrubyをダウンロードする。~
 +-- [[Jython:http://www.jython.org/]]~
 +[[こちらから>https://repo1.maven.org/maven2/org/python/jython-standalone/2.7.4/jython-standalone-2.7.4.jar]]jython-standalone-2.7.4.jarファイルをダウンロードする。
 +-- [[Jruby:http://jruby.org/]]~
 +[[こちらから>https://repo1.maven.org/maven2/org/jruby/jruby-complete/9.2.0.0/jruby-complete-9.2.0.0.jar]]jruby-complete-9.2.0.0.jarファイルをダウンロードする。~
 +
 +インストールは,ダウンロードしたファイルを適当な(日本語が含まれていない)ディレクトリを作成して(例:C:\WinApl\Sikuli-2.0.5),sikulixide-2.0.5.jarとsikulixapi-2.0.5.jarをそのディレクトリに置く。~
 +以下のファイルを,''C:\Users\<ユーザー名>\AppData\Roaming\Sikulix\Extensions''に置く。~
 + jython-standalone-2.7.4.jar
 + jruby-complete-9.2.0.0.jar
 +
 +これでインストールしたディレクトリの''sikulixide-2.0.5.jar''ファイルをダブルクリックなどしてJVMを実行すれば,SikuliXのIDE画面が表示される。~
 +#ref(sikulix.png,,50%)
 +
 +* Sikuliの機能 [#x6520245]
 +
 +** よく使うコマンドコマンド [#h4868fa9]
 +|コマンド|説明|h
 +|>|マウス操作                                                                                    |
 +|click(【画像】)                |画面内から指定した画像を探して,画像の中心をクリックする。      |
 +|doubleClick(【画像】)          |画面内から指定した画像を探して,画像の中心をダブルクリックする。|
 +|rightClick(【画像】)          |画面内から指定した画像を探して,画像の中心を右クリックする。    |
 +|mouceMove(【画像】)            |画面内から指定した画像を探して,画像の中心をマウスを移動する。  |
 +|drugDrop(【画像1】,【画像2】) |画像1から画像2までドラッグドロップする。                        |
 +|>|キーボード操作                                                                                |
 +|type("A")                      |Aキーを押す。                                                  |
 +|type(Key.ENTER)                |Enterキーを押す。                                              |
 +|type("c", Key.CTRL)            |Ctrl+Cを押す。修飾キーは後ろに指定。                            |
 +|paste(u"日本語")              |カーソルの位置に指定した文字列をペーストする。                  |
 +|>|制御系                                                                                    |
 +|wait(10)                      |10秒間待機する。                                                |
 +|wait(【画像】)                |画面内に指定した画像が見つかるまで最大5秒待機する。            |
 +|wait(【画像】, 10)            |画面内に指定した画像が見つかるまで,指定した秒数待機する。      |
 +
 +コマンドは画像を指定するが,メニューで指定することが出来る。~
 +メニューの7個のボタンは次の用途で使用する。~
 +|ボタン名                |説明                                              |h
 +|スクリーンショットを撮る|画面内からクリックしたい場所などの画像を切り取る。|
 +|画像を挿入する          |取得済みの画像をプログラムに使用する。            |
 +|Region                  |処理を行う範囲を指定する。                        |
 +|Location                |画面左上を(0, 0)とした座標で位置を指定する。      |
 +|Offset                  |相対距離を指定する。                              |
 +|実行                    |プログラムを実行する。                            |
 +|スローモーションで実行  |マウス操作のみ,ゆっくり操作する。                |
 +
 +** [[スクリプトと画像処理に関する機能>http://sikulix-2014.readthedocs.org/en/latest/scripting.html]] [#w470a819]
 +マウスの動作やログ出力など,各種機能の動作に関わる共通仕様の設定方法。
 +|コマンド                                                  |説明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |h
 +|setShowActions                                            |click()などの操作の前に,検索対象に指定した画像の位置で赤色の◎印を点滅する機能。&br;(バグのためSikuliX1.1.0やSikuliX1.1.1では動作しない。)&br;highlight()で代替可能。(環境設定で常時ハイライト表示することも可能。)                                                                                                                                                                                                                                                              |
 +|exit                                                      |スクリプトを正常に停止させる。&br;pythonにはsys.exit()があるが,SikuliXの内部初期化のためにexit()を使わなくてはならない。                                                                                                                                                                                                                                                                                                                                                          |
 +|Settings.setImageCache                                    |SikuliX1.1.1以降で有効。&br;デフォルトでは一度使った画像はキャッシュされ,画像が更新されたとしてもキャッシュしたものが使用されるが,設定をSettings.setImageCache(0)にした後は,使うたびにすべての画像がファイルからロードされる。&br;デフォルトに戻すには,Settings.setImageCache(1)に設定する。&br;[[公式サイト>https://answers.launchpad.net/sikuli/+question/483025]]                                                                                                            |
 +|Settings.ActionLogs                                        |デフォルト:Settings.ActionLogs = True                                                                                                                                                                                                                                                                                                                                                                                                                                              |
 +|Settings.InfoLogs                                          |デフォルト:Settings.InfoLogs = True                                                                                                                                                                                                                                                                                                                                                                                                                                                |
 +|Settings.DebugLogs                                        |デフォルト:Settings.DebugLogs = False                                                                                                                                                                                                                                                                                                                                                                                                                                              |
 +|Settings.MinSimilarity                                    |find系の処理での最小類似度。デフォルト=0.7(70%)&br;デフォルトの最小類似度を変更するときに使用する。                                                                                                                                                                                                                                                                                                                                                                              |
 +|Settings.MoveMouseDelay                                    |mouseMove()の位置が特定できてから,マウスの移動を開始するまでの時間を遅らせるときに使用する。&br;【注】Windows10の場合,Settings.MoveMouseDelay=0に設定すると奇妙な動きをする。&br;できるだけ速く操作したいときは,0.1に設定すれば想定通りの動きをする。                                                                                                                                                                                                                            |
 +|Settings.DelayBeforeMouseDown                              |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|Settings.DelayBeforeDrag                                  |前のバージョンではDelayAfterDragだったみたい。                                                                                                                                                                                                                                                                                                                                                                                                                                      |
 +|Settings.DelayBeforeDrop                                  |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|Settings.ClickDelay                                        |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|Settings.TypeDelay                                        |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|Settings.SlowMotionDelay                                  |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|Settings.WaitScanRate&br;Settings.ObserveScanRate          |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|Settings.ObserveMinChangedPixels                          |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|Settings.AlwaysResize&br;ImageCallback                    |SikuliX1.1.3以降で有効。[[公式サイト>http://sikulix-2014.readthedocs.io/en/latest/scripting.html#Settings.AlwaysResize]]                                                                                                                                                                                                                                                                                                                                                            |
 +|Settings.UserLogs&br;Settings.UserLogPrefix&br;Debug.user  |setUserLogFileの説明で使ってる。                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|Settings.UserLogTime                                      |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|Debug.setUserLogFile                                      |setUserLogFileは存在しないフォルダを指定するとエラーになっちゃう。                                                                                                                                                                                                                                                                                                                                                                                                                  |
 +|getBundlePath()                                            |現在実行しているスクリプトフォルダ.sikuliを取得する。(末尾の区切り文字なし)&br;ログの出力先や,スクリプト独自の設定ファイル格納先としてスクリプトフォルダを使いたいときなどに利用する。                                                                                                                                                                                                                                                                                          |
 +|getBundleFolder()                                          |getBundlePath()と同様だが,末尾の区切り文字を使用する。                                                                                                                                                                                                                                                                                                                                                                                                                            |
 +|getParentPath()                                            |現在の.sikuliフォルダの親フォルダへのパスを返す。(末尾の区切り文字をなし)                                                                                                                                                                                                                                                                                                                                                                                                        |
 +|getParentFolder()                                          |getParentPath()と同様だが,末尾の区切り文字を使用する。                                                                                                                                                                                                                                                                                                                                                                                                                            |
 +|makePath(path1, path2, path3, ...)                        |文字列として与えられたパスを左から右へ連結して,システムの正しいパスを返す。(末尾のパス区切り文字なし)                                                                                                                                                                                                                                                                                                                                                                            |
 +|makeFolder(path1, path2, path3, ...)                      |makePath()と同様だが,末尾のパス区切り文字を使用する。                                                                                                                                                                                                                                                                                                                                                                                                                              |
 +|unzip(fromFile, toFolder)                                  |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|setBundlePath(path-to-a-folder)                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|getBundlePath()                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|getImagePath()                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|addImagePath((a-new-path)                                  |Sikuli Webサーバに画像を置いて使用する時。                                                                                                                                                                                                                                                                                                                                                                                                                                          |
 +|addHTTPImagePath                                          |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|removeImagePath                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|resetImagePath                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|addImportPath                                              |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +|load                                                      |sikulix.jarにバインドされていないクラスを追加するときに使う。&br;SQLiteドライバを使いたいときやSeleniumWebDriverを使いたいときなど,load(xxx.jar)の1行追加するだけ使えるようになる。&br;sys.pathにパスが追加されるので,xxx.jarに含まれるクラスをimportして使えるようになる。(SikuliX1.1.0以降のPython版で使用可能)&br;SikuliX 1.1.4から使えなくなった。1.1.4の場合,「C:\Users\ユーザー名\AppData\Roaming\Sikulix\Extensions」にjarファイルを置いて,クラスをimportすれば使える。|
 +|runScript                                                  |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
 +
 +** [[ユーザーやその他のアプリケーションの操作>http://sikulix-2014.readthedocs.org/en/latest/interaction.html]] [#u282cb14]
 +スクリプトの実行条件を入力したりエラーメッセージを表示したりしたいときのポップアップ画面の表示や,他のアプリケーションを開いたり閉じたりといった連携方法。
 +|コマンド                            |説明                                                                                                                                                                                                  |h
 +|popat                                |ポップアップ表示の位置は,デフォルトはスクリーンの中心。ポップアップ表示位置を変更したいときに使う。                                                                                                  |
 +|popup                                |ポップアップを表示する。                                                                                                                                                                              |
 +|popError                            |ポップアップウインドウ。(popAsk,popError,select,input)                                                                                                                                          |
 +|popAsk                              |はい,いいえ,を表示するポップアップ・ダイアログ。                                                                                                                                                    |
 +|input                                |入力フィールド付きのはい,いいえ,を表示するポップアップ・ダイアログ。                                                                                                                                |
 +|inputText                            |複数行の文字列を入力したいときに使う。                                                                                                                                                                |
 +|select(python)&br;popSelect(Ruby)|プルダウンメニュー付きポップアップ・ダイアログ。                                                                                                                                                      |
 +|popFile                              |ファイル出力先として,任意のフォルダを選択させたいような場合に使う。                                                                                                                                  |
 +|Env.addHotkey                        |コマンドラインから実行したスクリプトをスマートに止める。&br;スクリプト実行中に,キー操作を行ったタイミングで割り込み処理(スクリプトの強制終了とか,Global変数の書き換えとか)を実行させたいとき使う。|
 +|Env.removeHotkey                    |Env.addHotkeyで追加したホットキーを,削除する。                                                                                                                                                      |
 +|openApp                              |App.openと同じ,アプリケーションを開く。                                                                                                                                                              |
 +|switchApp                            |openAppしたアプリケーションに,フォーカスを与える。                                                                                                                                                  |
 +|closeApp                            |openAppしたアプリケーションを閉じる。                                                                                                                                                                |
 +|run(command)                      |バッチファイルの実行など,コマンドラインからの実行を行うとき使う。                                                                                                                                    |
 +
 +** [[設定と環境変数>http://sikulix-2014.readthedocs.org/en/latest/globals.html]] [#iccd70d5]
 +Envクラスは旧バージョンとの互換性のためにあるが非推奨。~
 +|コマンド                        |説明                            |h
 +|Sikulix.prefStore              |                                |
 +|Sikulix.prefLoad                |                                |
 +|Sikulix.prefRemove              |                                |
 +|Settings.getOS                  |                                |
 +|Env.getOS                      |                                |
 +|Settings.getOSVersion          |                                |
 +|Env.getOSVersion                |                                |
 +|Settings.isWindows              |                                |
 +|Settings.isMac                  |                                |
 +|Settings.isLinux                |                                |
 +|Settings.getSikuliVersion      |                                |
 +|Env.getSikuliVersion            |                                |
 +|App.getClipb&br;Env.isLockOn    |Numlockキーの状態を取得する機能。|
 +|Mouse.at&br;Env.getMouseLocation|マウスの座標位置を取得する。    |
 +|Vision.setParameter            |                                |
 +|Vision.getParameter            |                                |
 +
 +** [[画面の領域>http://sikulix-2014.readthedocs.org/en/latest/region.html]] [#k1e3ac00]
 +画像認識の対象範囲の設定。~
 +画像を検索,マウスの移動や画像認識対象範囲を座標で指定したい場合に使う。~
 +|コマンド|説明|h
 +|getX||
 +|getY||
 +|setLocation||
 +|above|上方向|
 +|below|下方向|
 +|left |左方向|
 +|right|右方向|
 +
 +** [[画面>http://sikulix-2014.readthedocs.org/en/latest/screen.html]] [#z5573d01]
 +デフォルトのスクリーン,マルチモニタのときのスクリーン,スクリーンキャプチャの方法。
 +|コマンド|説明|h
 +|Screen          |Screenクラス|
 +|getNumberScreens|                        |
 +|getBounds      |バウンド領域を取得する。|
 +|capture        |スクリーンを画像ファイルとしてキャプチャーする。保存したファイルのフルパスを戻り値に返す。|
 +|selectRegion    |範囲を指定して画像を保存する。|
 +|vncStart        |                              |
 +
 +** [[パターン>http://sikulix-2014.readthedocs.org/en/latest/pattern.html]] [#l446a349]
 +画像検索機能(find,exists,clickなど)のオプション。~
 +IDEの中に貼り付けた画像を,クリックして表示する[パターン設定]ウインドウで設定すると,自動的にスクリプトが編集されるので文法は覚えなくても大丈夫。~
 +|コマンド|説明|h
 +|Pattern&br;similar&br;exact|90%以上の類似度で検索したい場合なら,&br;if exists(Pattern("screenimage1.png").similar(0.90)):&br;  popup(u"画面が一致したよ!")&br;最小類似度を極力高く設定して検索したい場合なら,&br;if exists(Pattern("screenimage1.png").exact():&br;  popup(u"画面が一致したよ!")|
 +|targetOffset&br;getFilenameget&br;TargetOffset||
 +
 +** [[マッチ>http://sikulix-2014.readthedocs.org/en/latest/match.html]] [#l8ed4363]
 +find系の処理では,最小類似度より類似度の高い画像を抽出する。抽出された画像がいったいどれ程の類似度であったかは,そのスコアで知ることができる。
 +|コマンド|説明|h
 +|getScore&br;getTarget|findAll("img.png")&br;mm = SCREEN.getLastMatches()&br;while mm.hasNext():&br;  m = mm.next().highlight(1, "blue")&br;  print m.getScore()|
 +
 +** [[ファイル画像の検索>http://sikulix-2014.readthedocs.org/en/latest/finder.html]] [#df08b1c4]
 +スクリーンの画像を検索対象とするのではなく,ファイル保存した画像を検索対象にする場合。
 +|コマンド|説明|h
 +|Finder|スクリーンの代わりに画像ファイルを検索する場合,その画像ファイルを設定する。|
 +|findAll|検索する。|
 +|hasNext&br;next|複数見つかった場合処理に使用する。|
 +|find||
 +
 +** [[キー定数>http://sikulix-2014.readthedocs.org/en/latest/keys.html]] [#q43f42b0]
 +type()の引数に指定するキー定数。~
 +addHotkey()に使うmodifier keyとしては使えないことに注意する。~
 +
 +** [[アプリケーションクラス>http://sikulix-2014.readthedocs.org/en/latest/appclass.html]] [#i75e5f34]
 +|コマンド|説明|h
 +|focus|ポップアップ・ダイアログが他のウインドウの背面に隠れてしまうと困る。&br;こんなときは,ホットキーでポップアップ・ダイアログを再表示する仕掛けにしておくと最前面に表示出来る。その場合最画面にするのに使用する。|
 +|pause||
 +|App||
 +|isRunning||
 +|hasWindow||
 +|getWindow||
 +|getPID||
 +|getName||
 +|setUsing||
 +|open||
 +|close||
 +|focusedWindow||
 +|window||
 +
 +** Sikuliの実行を停止する [#dd770c02]
 +Alt-Shift-Cで,スクリプトの停止が出来る。
  

  • PC/RPA/SikuliX のバックアップ差分(No. All)
    • 現: 2025-03-03 (月) 14:14:18 yuji

トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 76, today: 1, yesterday: 1