アプリケーションの自動操作をスクリプトで実現するために、Sikuliを調べてみました。
Sikuliとは
Sikuliとは、
- OpenCVをつかった画像認識
- OCRをつかった文字認識
で、アプリケーションの自動操作を実現するためのツール、スクリプト言語。
Javaで実装されているため、JVM上で動作するスクリプト言語から利用できる。
スクリプト編集のためのIDEは、画像とプログラム言語を合わせて表示できるという、革命的なソフトウェア。久々に、スゴイ!とおもったソフトウェアだ。
インストール
sikuli-setup.jarをダウンロードして、インストーラをダブルクリックで起動するだけ。
すると、いろいろとインストールオブションがきかれる。JRubyを選択。
slkulix.jarをダブルクリックで起動。IDEが立ち上がる。
インストールは、以下のドキュメントが詳しい。
WinUtil.dllが見つからないエラーではまる
runsikulix.cmdで起動するとエラーした。
[error] ResourceLoader: loadLib: Fatal Error 110: loading: WinUtil.dll
[error] ResourceLoader: loadLib: Since native library was found, it might be a problem with needed dependent libraries
C:\sikuliX\libs\WinUtil.dll: 指定されたプロシージャが見つかりません。ﴀ
[error] ResourceLoader: loadLib: Check, wether a valid Sikuli libs folder is in system path at runtime!
よくわからないのだが、環境変数のパスを通して(C:)、JDK 7 を最新版にしたらなおった。
Hello Sikuli
以下のようなコード。
App.open("notepad.exe")
find("1400849474303.png")
type("Hello Sikuli!!")
実行結果はこんな感じ。驚きの結果である。
実行ファイルから実行する
もちろん、IDE を経由しないでコマンドラインから実行できる。
ツールバーのファイルから実行ファイルとしてエクスポートを選択。 .skl拡張子のバイナリファイルができる。(ここではtest.skl) なかみは、たんなるzipだったりする。
runsikulix.cmdの引数として、.sklを渡す(注意: 1.1からの仕様)
E:\test>C:\sikuliX\runsikulix.cmd -r test.skl
これで、コマンドラインから実行できた。
Rubyから実行する
Sikuliの素晴らしいところは、JVM上で動作スクリプト言語を利用できる。
JPython, JRubyとか。つまりは、Rubyが使える!
IDEで Rubyをつかう
保存フォルダをのぞくと、たんなる.rbファイルがある。 IDEから実行すると、Lib配下にあるsikkulix.rbがrequireされるようだ。ようするに、rubyの文法をつかってかけるということ。
たとえば、さっきのHelloSikuliをメソッド化してみる。
def hello
App.open("notepad.exe")
find("1400849474303.png")
type("Hello Sikuli!!")
end
hello()
すごい。
Ruby scriptとしてつかう
Sikuli IDEでは、実行時にsikkulix.rbを読み込んでいろいろやっているようなので、このファイルに書いてあることを真似すると、純粋なrubyとして実行できる。
But be aware: Since the interpreters used are based on Java, the modules available for Python or Ruby might not be available in the Jython or JRuby environment. So before trying to use any non-standard modules or extension packages, you have to check, wether they are supported in this SikuliX environment.
Java APIを JRubyを経由して呼び出すため、 JRubyのちからを借りる。以下のガイダンスに従う。
JRubyをインストール
以下から、インストール。インストールしたら、binフォルダにパスを通す。
実行は、jrubyコマンドで実行。
sikulixapi.jarをクラスパスに追加
sikulixapi.jarのなかに、sikuliを制御する処理が入っているので、ここにクラスパスを通す。
require 'java'
$CLASSPATH << 'C:\\sikuliX\\'
require 'sikulixapi.jar'
必要なSikuliクラスをimport
つづいて、必要なクラスをインポートする。
java_import "org.sikuli.script.Screen"
あとは、一生懸命書くだけだ。なんどでも思う、これはスゴイ。
結果
Environment
- windows 7 64bit
- JDK 7 64bit
- JRuby 1.7.12
Special Thanks
Official
Java Doc
Document
よくまとまっている日本語のまとめ
Ruby関連