はじめに
SikuliXとはオープンソースのRPAツールで、事前に用意した画像と画面上のオブジェクトの類似性を元に操作が行えます。
また、用意された画像や事前に指定した画面の領域からテキストを抽出する機能も存在します。
本記事では光学的文字認識,、いわゆるイメージから文字列を取得する手法について紹介します。
環境情報
- java version "1.8.0_201"
- Sikulix IDE 1.1.3
SikuliXによるテキスト抽出方法
事前準備:注意点
結論から言うと選択した領域に.text()
メソッドを用いれば文字列を取り出せます。
一方で設定ができていなければ例えば以下のようにprint文を行っても
reg=Region(346,674,272,47) print reg.text()
以下のエラーが出ます。
[error] text: text recognition is currently switched off --- no text ---
文字通り、設定がオフになっているのでオンにします。
事前準備:対応
Sikulix IDEのタブから
ファイル → 環境設定
を選択してください。
以下のような画面が出るので「more options」を押下すると
以下の画面になります。
この画面にある「TextSearch and OCR」欄の「allow searching for text」と「allow OCR」にチェックを入れて「Save」してください。
Setting saved
とウィンドウに表示されるので×マークで該当ウィンドウを閉じ、親ウィンドウで「Apply」「OK」を押すとSikuliXの再起動を促されます。
読み取り手順
Region機能をクリックすると以下のようにグレーアウトされるので検出したい領域を指定します。
そうすると画面全体の中から選択箇所が赤くなった画像が表示されます。
reg=Region(0,60,206,61) print reg.text()
先ほど設定したエリアに自由な半角英数を入れると検出可能です。
注意点
ワンポイントのテキストの抽出には使えますが長い文章は単語単語で切れて出力されますし、環境によっては精度がイマイチです。
例えばハリーポッターの書き出しである以下のフレーズですが
Mr and Mrs Dursley, of number four, Privet Drive, were proud to say that they were perfectly normal, thank you very much.
以下のように出力されました。
Mr and Mrs of number four Pr Dr to ivet |Ve Were thank that normal say you
終わりに
オブジェクトの抽出という観点では十分な精度で操作を行うSikuliXですがOCRとして使うにはピンポイントの利用になりそうです。本記事では半角英数に絞っていますが、日本語への対応も外部のパッケージを落とせば利用できるようなので興味がある方は調べてみてください。
以上、SikuliXによるテキスト抽出でした。