Sikuli - 画像が見つからないけどエラーにしたくない場合

Sikuliで長い処理をしてる途中で、画像が見つからずエラーになってしまい処理が途中で止まってしまうときがあります。
こんな時処理を見直して再度最初から実行・・・としていたのですが、それを回避する素晴らしい関数があることに気づきました。

それは「setFindFailedResponse(PROMPT)」です。

例えば次のようなコードを書いて実行します。

1
2
setFindFailedResponse(PROMPT)
find("1577880270644.png")

もし指定した画像が見つからなかった場合は、エラーになるのではなく下記の確認ダイアログが表示されます。

確認ダイアログ

  • Retry
    見つからなかった画像が表示されるように操作しておいてから、このボタンを押すと処理を再開することができます。
  • Capture/Skip
    指定していた画像を別の画像に置き換えたり(再度スクリーンショットをとる)、処理自体をスキップすることができます。
  • Abort
    処理を中断することができます。

この関数を見つけてから処理を途中から再実行することができるようになり、効率があがりました。

Sikuli - イベント処理

Sikuliでは「ある画像が表示されたら処理を行う」といったイベント処理を行うことができます。

1
2
3
4
5
6
7
8
def hnd1(event):
popup('hnd1')

r = Region(163,107,323,217)
r.onAppear("1577792749137.png", hnd1)
r.observeInBackground()

wait(10)

まずイベントがあった場合に呼ばれる関数を定義します。(hnd1関数)

あとは監視する範囲をRegionで指定し、その範囲にイベントハンドラーを設定します。(onAppear)

次にobserveInBackground()でバックグラウンドで監視処理を開始させます。
observe関数でも監視処理を始めることができますが、この場合処理が止まってしまいほかの処理が実行できなくなります。

Hinemosのシステム構成

Hinemosは3つのパッケージを提供しています。

  • マネージャ
    管理対象ノードを管理し、情報を管理DBに蓄積します。
  • エージェント
    ジョブ管理機能やログ転送機能等を利用する管理対象ノードです。
  • クライアント
    リッチクライアントとWebブラウザの2つがあります。
    Webブラウザの場合クライアントへのインストールは必要ありませんが、マネージャサーバにWebクライアントサービスをインストールする必要があります。

Hinemos

Hinemosは大規模、複雑化するITシステムの監視やジョブといった運用業務の自動化を実現する統合運用管理ソフトウェアです。

Hinemosにはジョブ管理の機能があります。

ジョブ管理

複数のサーバやパソコンにあるプログラムの実行を制御せいたり、その結果を監視することができます。

LinuxのcronやWindowsのタスクスケジューラでも指定時刻に自動実行することができますが、ジョブ管理システムには次のようなメリットがあります。

  • 複数のジョブにまたがった処理ができる。
    cron/タスクスケジューラだと複数の関連ジョブを実行する場合に、時刻をずらして実行することもできますが、1番目のジョブが終了するまえに2番目のジョブを実行してしまったり、1番目のジョブが失敗したのに2番目のジョブを実行してしまう危険があります。
    ジョブ管理では、1番目のジョブが正常終了した場合に2番目のジョブを実行するといった連携が容易に可能です。
  • 一元管理ができる。
    ジョブ管理であれば複数のパソコンやサーバで実行された処理を1つの画面で管理できるので、システム全体の運用管理が簡単です。

Pentaho

Pentahoは総合的なBIツールで、次の2つの基盤から成り立ちます。

  • データ統合基盤
    データを抽出・準備・ブレンドする。
  • データ分析基盤
    統合したデータを分析・可視化する。

PentahoにはBIに必要なツールがいろいろありますが、PDI(Pentaho Data Integration)というETL機能はデスクトップ型RPAと比較して次の点が優れています。

  • RPAより処理が早い。
  • 安定して動作する。
  • バックグラウンドで動く。

基本的にはRPAシステムではETLを中心に組み立て、ETLではできないGUI操作をデスクトップ型RPAで行うのがおすすめです。
またPentahoのPDIクライアントツール(Spoon)は処理が図式化されプログラム経験のない人でも中身を理解しやすいというメリットがあります。

ETLの基本的な機能

ETLはExtract(抽出)、Transform(変換)、Load(格納)の頭文字をとったもので、データ統合時に発生する各プロセスを意味します。

ETLの基本的な機能は次の2点です。

  • データ処理機能
    実務処理ではデータの処理が多く行われます。
    ETLにはデータ処理のために、文字コードの変換、特殊文字の置換、フィルタ機能、複数データの結合、任意の列の追加、集計(合計値や平均値の算出)等、多くの機能が搭載されています。
  • 外部機能との連携
    ETLからスクリプト実行やバッチファイルの呼び出しを行うことで、他のツールを起動することができます。
    またデータベースとの連結ができるコネクタと呼ばれる機能がついていて、データベースのトランザクションデータやマスタ類を利用して、最終的な成果物を作成できます。

完全無料で使える唯一のRPAツール

RPAツールはいろいろありますが、基本的に数十万から数百万円かかるものがほとんどでなかなか手が出しにくい現状だと思います。

ただそんな中、唯一完全無料で使えるRPAを見つけることができました。

SikuliXです。

SikuliXはOpenCVを利用したオープンソース・ソフトウェアのGUIオートメーションツールです。
操作対象を画像としてマッチングするため、スクリーン上に表示されているものであればアプリケーションの種類を問わず操作することができます。
開発環境が付属していて画面上の特定の場所をクリックしたり、テキストボックスに文字入力したりといった人間が行う操作を記述することが簡単にできます。

開発環境では画面のキャプチャリングや、どのうように画像がマッチングしているか容易に確認・調整することができとても使い勝手がいいです。

処理はスクリプト(JythonかJRuby)で記述するのでプログラミングの経験は必要となります。
RPAはプログラミング不要で処理が記述できることをメリットとしてうたっていることが多いですが、正直プログラミングができる人にとっては処理をGUIで処理を組み立てていくのはまどろこっしくてはかどらないので、スクリプトで記述できるというのはいい仕様だと感じています。

バージョン1では操作の記録ができませんでしたが、バージョン2からは操作を記録してスクリプトを自動作成することができるようになったようです。

実行するためにはJVM(Java)が必要となります。

RPAの認識タイプ

RPAには3つの認識タイプがあります。

  • 座標指定
    操作対象画面の2次元座標データを記録する方式です。
    ロボットの実行時に座標データを呼び出してボタンなどの位置を認識させて動作します。
    座標指定の方式は、操作対象画面の大きさや表示位置が変わると誤動作するという問題があります。
  • 画像認識
    操作対象を画像データとしてキャプチャーし、RPAの開発画面に登録する方式です。
    ロボットの実行時に画像データを読み込み、画面上の画像とマッチングして対象を特定し、入力やクリックなどの操作を行います。
    座標指定方式と違い、ボタンの位置が変わっても画像が同じであれば、修正せずに対応できる利点があります。
  • 画像要素認識
    入力欄やボタンといった画面の要素をHTMLファイルやアプリケーションそのものから読みとって記録する方式です。
    見た目ではなくHTML等の内部構造を解析して実行されるので、画面レイアウトや見た目が変わってもHTMLファイルやアプリケーションの構成要素が変わらなければ問題なく動作します。

RPAを構成する3つの要素

RPAには目や手というロボット的な部分があり、それを駆使して人間のパソコン操作を代行するようなイメージがあります。

RPAには次の3つの要素があります。

  • 目に相当する部分
    画面を見て必要な情報を見つける。
  • 手に相当する部分
    コピー&ペーストやキーボード入力を行う。
  • 脳に相当する部分
    手順を覚える。

これまでのソフトウェアはコンピュータの深いところで実行されているので実行の様子を見ることはあまりなかったと思います。

これに対してRPAの実動作をみると、画面上でカーソルや画面がひとりでに変化していく様子を見ることができ、人間的な雰囲気を感じることができます。

RPAの特徴

RPAの特徴は、企業内にあるいろいろなシステムやアプリケーションを変更することなく対応が可能なことです。

具体的な特徴は以下の通りです。

  • 自動化
    人がキーボードやマウスで行っている業務の自動化が可能。
  • 反復・高品質
    24時間365日常時稼働が可能。
    ミスをすることもないので品質が向上。
  • 既存の業務システムの変更が不要
    RPAでは行う動作を定義するので、既存の業務システムやアプリケーションを変更する必要がない。
  • いろいろなアプリケーションへの対応が可能
    Office製品だけではなく、社内システムや社外のWebアプリケーションなど幅広いアプリケーションへの対応が可能。
  • プログラミング不要
    RPAはプログラミングが不要なため、プログラミング経験のない業務ユーザであっても、研修や支援を受けることでRPAツールを利用した自動化処理を進めることが可能。
  • 複数ロボットの管理が可能
    個別のパソコンで処理を行うことも可能ですが、複数のパソコンでのRPAロボットを集中して管理することが可能。