sikuliを使って困った点と解決法

最近 sikuli がすごく面白い。
http://www.sikuli.org/

MITのUI学科が作った画面操作マクロツールで、
エディタの未来感もあってすげー面白い

sikuliの特徴

  1. Javaによるクロスプラットフォーム対応(Windows,Mac,Linux対応)
  2. OpenCVを使った画面上の類似画像検索
  3. MIT Licence (商用利用も改造も自由)
  4. Jython(2.5.4rc1)を使った自由度の高いスクリプティング
    1. Jenkinsに連携してGUIテストの自動化も出来る

いくつかの類似のGUIマクロツールと比較しても、
これほど応用が効きそうなツールは見当たらなかった。
こりゃ覚えるっきゃないね!


しかしメリケン製のプログラムらしく、
キッチリ利用するには幾つか乗り越えるべき課題が…

最優先で乗り越えるべき課題

  1. うまく画像を認識しない
  2. 日本語の扱いに難がある

まずはこれらの問題を解決したい。

うまく画像を認識させるには?

sikuliは類似度を元にマッチする場所を決めている。

この類似度はデフォルトで 70 のため、
「パターン設定」で適切な類似度を設定してやる必要がある。


画面上の画像を指定したら、
その画像をクリックして「パターン設定」-> 「マッチングプレビュー」
Similarity を調整する。

この類似度は高めにすると、うまく見つけてくれやすい。

うまく日本語を扱うには?

この日本語の扱いが下手くそなのは
スクリプト基板に使っている Jython( Python ) に起因する問題だ。


つまりPythonでの日本語処理時と同様の対策が必要で、
普通の文字列ではなく、unicode文字列にしてからAPI関数に渡さなければならない。

#↓文字化けするリテラル文字
type("こんにちわ")

#↓文字化けしないリテラル文字
type(u"こんにちわ")

#変数xに入った文字列をutf-8だと仮定して unicode文字列に変換する
type( unicode(x, "utf-8" ))

#cp932(shift-jisのMS拡張)と仮定して変換する場合

type( unicode(x, "cp932" ))

リテラルの頭には u をつけて、
動的に変換する場合はエンコードを指定してunicode関数を通せばいいのだ。

これは普通のPythonでも絶対にハマるポイントなので
十分に把握した上でsikuliを楽しもう