アプリケーションの自動操作をスクリプトで実現するために、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関連