Text OCR ("tocr") (JA)
4.3.1 Text OCR ("tocr")
説明
テキストOCRメソッド(コード"tocr")は、外部光学式文字認識(OCR)エンジンを呼び出してリモートデスクトップ画像からテキストを抽出することを可能にします。優先するOCRエンジンは設定で選択および構成する必要があります。Robot 5.xは以下をサポートします:
TessractOCRがデフォルトです。無料で、主要なプラットフォーム(MS Windows、Linux/Unix、Mac OS X)をすべてサポートしています。欠点は、性能(速度)と精度の低さです。
ABBYY Fine Readerは追加費用で利用可能な商用OCRエンジンです。Tesseractよりも高速かつ高精度です。MS Windowsでのみサポートされています。
Google VisionはOCR処理を行うクラウドサービスです。デスクトップの画像がセキュアな接続(HTTPS)を介してGoogleサイトにアップロードされるため、この方法を選択する前にプライバシーとセキュリティについてご検討ください。OCR処理は比較的高速かつ正確です。全体的なパフォーマンスにおける最大の要因はネットワーク速度です。テキストOCRメソッド(コード"tocr") では、外部の光学式文字認識 (OCR) エンジンを呼び出して、リモートデスクトップ画像からテキストを抽出できます。好みのOCRエンジンを選択し、環境設定で設定する必要があります。Robot 5.xは以下の機能をサポートしています:
認識されたテキストは、オプションで以下のパラメータを使用してフレーズの存在を検査できます:text(プレーンテキスト検索)、"text" および "distance"(許容範囲付きテキスト検索)、または "pattern"(正規表現マッチング)。
正規表現マッチングは、認識されたテキストを、指定されたjava.util.regex.パターンに準拠した正規表現と照合します。バージョン 4.1.3 までは、式は テキスト全体 に一致する必要があり、一致する部分文字列の検索は行われません。バージョン 4.1.4 では、テキスト内の一致する位置の検索をサポートし、テキストパラメータと同様の方法でそれらのテキストと座標を返します。。
ファジー検索は、レーベンシュタイン距離に基づいています。これは、ある文字列を別の文字列に変換するために必要な最小編集回数として定義され、許容される編集操作は単一文字の挿入、削除、または置換です。この測定基準は、"distance" パラメータによって有効化されます。これは、"text" パラメータで指定されたサンプルテキストを同等と見なすために、最大で何文字を省略または正しく認識できないかを指定する整数です。正規表現とは異なり、許容的なマッチングは、認識されたテキスト内で、指定されたテキストと距離に一致する文字列の出現を常に検索します。文字列の前後に別のテキストが続くことを指定する必要はありません。
この方法は、OCR結果を以下のようにTOCR接頭辞付き変数の集合に格納します:
変数名 | 説明 |
|---|---|
_TOCR_ERROR=<errorText> | OCR エンジンによって投げられたエラーテキストを含みます。 |
_TOCR_TEXT=<text> | 認識されたテキスト(改行文字で区切られたすべての行)。 |
_TOCR_TEXT_X=<X-coordinate> | 認識されたテキストの境界矩形(バージョン3.4以降)。 |
_TOCR_LINE_COUNT=<number> | 認識されたテキストの行数。 |
_TOCR_LINE<n>=<lineText> | <n> が 1 から _TOCR_LINE_COUNT_ の間である n 行目のテキスト。 |
_TOCR_LINE_X<n>=<X-coordinate> | 第n行の境界矩形(3.4以降)。 |
そのときテキストまたはパターンパラメータが指定され、認識されたテキストから与えられた文字列を検索する場合、このメソッドは次のように結果変数を作成します:
変数名 | 説明 |
|---|---|
_TOCR_MATCH_COUNT=<number> | 認識されたテキスト内で、 パターン 式、または テキスト と 距離 (指定されている場合)パラメータに一致する位置(文字列)の数。 |
_TOCR_MATCH=<matchingString> | 最初の一致する文字列。 textが使用され、 distanceが0に設定されているか、または 指定されていない場合、変数には textパラメータの値が格納されます。 |
_TOCR_MATCH_<n>=<matchingString> | <n>が1から_TOCR_MATCH_COUNTの間のn番目に一致する文字列。 |
_TOCR_MATCH_INDEX=<index> | 認識されたテキスト内の最初の一致のインデックス(位置)。インデックスは認識されたテキストの先頭を示す0から開始します。 |
_TOCR_MATCH_INDEX_<n>=<index> | <<n> が 1 から _TOCR_MATCH_COUNT の間である n 番目の一致のインデックス。 |
_TOCR_MATCH_X_<n>=<X-coordinate> | 最初の一致文字列の境界矩形(バージョン3.4以降)。 |
_TOCR_MATCH_CLICK_X=<X-coordinate> | <n> が 1 から _TOCR_MATCH_COUNT の間にある n 番目のマッチング文字列の境界矩形。 |
_TOCR_MATCH_CLICK_X_<n>=<X-coordinate> | 最初の一致文字列の中心座標(バージョン3.4以降)。これらは、「OCR を使用して文字列を検索し、それをクリックする」などのタスクに使用できます。 |
_TOCR_MATCH_CLICK_X_<n>=<X-coordinate> | n番目のマッチング文字列の中心座標。ここで <n> は 1 から _TOCR_MATCH_COUNT の間です。 |
オプション
このメソッドは テンプレート画像を受け付けません。 「passrate」パラメータはOCRの文脈では適用されず、無視されます。 「cmparea」パラメータはオプションであり、省略された場合はデフォルトで全画面表示となります。
サポートされているOCRパラメータ:
text=<textToSearchFor>
認識されたテキスト内で検索する任意のテキスト。ホスティングコマンドは、OCRが正常に実行され認識テキストに指定文字列が含まれる場合に0を、それ以外の場合は1を返します。テキスト位置のインデックスと画面座標は TOCRスクリプト変数に格納され、さらに処理できます。このパラメータはパターン指定と併用できません。
distance=<0-[textLength]>
オプションのレベンシュテイン距離は、「text」パラメータと組み合わせて 許容範囲のあるテキストマッチングを実行するために使用されます。詳細はメソッド仕様を参照してください。
pattern=<regularExpression>
オプションjava.util.regex.パターンに準拠した正規表現と照らし合わせて、認識したテキストをテストします。このパラメータは、text パラメータと併用することはできません。
バージョン4.1.3までは、式はテキスト全体と一致する必要があります(部分文字列の一致検索は行われません)。
バージョン4.1.4以降、このパラメータはテキストパラメータと同様の方法でテキスト内の一致箇所を検索します。一致したテキスト位置のインデックスと画面座標は、クリーン座標がTOCRスクリプト変数に保存され、さらに処理される可能性があります。この機能強化により、単一の"クリックocr"コマンド内で「一致するテキスト位置を見つけてクリックする」といったアクションを作成できるようになります。 。
詳細なパラメータについては、TessractOCRのヘルプページを参照してください。
戻り値
この方法により、設定ミスやI/Oエラーが発生した場合、ホスティングコマンドはランタイムエラーをスローします。エラーメッセージは_TOCR_ERROR変数を通じて利用可能になります。
戻り値はそれ以外の場合は入力パラメータに依存します。結果の検証を行わずにOCRのみを実行するためにメソッドが呼び出された場合、テキストが認識されなかった場合でも常に0を返します。"text"または"pattern"のパラメータでメソッドが呼び出された場合、認識されたテキストが指定された文字列/正規表現と一致すれば0を返し、そうでなければ1を返します。
使用例
Var _TOCR_LINE_COUNT=0Compareto method="tocr" cmparea="x:33,y:2,w:200,h:22"for (i=1; {i}<{_TOCR_LINE_COUNT}+1; i={i}+1) { Typeline "{_TOCR_LINE{i}}"}
- 指定したデスクトップ領域内のテキストを認識し、デスクトップに入力します。
Compareto method="tocr" cmparea="x:33,y:2,w:200,h:22" pattern="[aA]pplication"if ({_EXIT_CODE} > 0) { Exit 1}
- 認識されたテキストが'Application'または'application'の単語と一致しない場合、スクリプトを終了するようにします。
Compareto method="tocr" cmparea="x:33,y:2,w:200,h:22" pattern=".*[aA]pplication.*"if ({_EXIT_CODE} > 0) { Exit 1}
- 前の例では、認識されたテキストに'Application'または'application'が含まれていない場合にスクリプトを終了するように修正しました。
Compareto method="tocr" cmparea="x:33,y:2,w:200,h:22" text="apple" distance="2"
- 画面上のテキストを認識し、それが「apple」のような文字列であるか、または「apple」のような文字列を含むかどうかを確認します:
OCRが「There is an apple」のようなテキストを認識した場合、完全一致が見つかるためコマンドは成功(終了コード0)を報告する。
OCRが「There is an Apple」のようなテキストを認識した場合、コマンドは成功を報告します。なぜなら単語「Apple」は1文字(A→a)の置換によって「apple」に変更可能であり、これは許容誤差範囲2文字内にあるためです。
OCRが「There are Appls」のようなテキストを認識した場合、コマンドは成功を報告する。なぜなら単語「Appls」は、許容誤差範囲である2文字以内で、(1)置換(A→a)と(2)付加(+e)または置換(s→e)の2操作で「apple」に変換可能だからである。
OCRが「There is Doppler」のようなテキストを認識した場合、単語「Doppler」が単一の置換(o→a)後に「apple」と一致する文字列を含むため、コマンドは成功を報告します。
OCRが「There are Appis」のようなテキストを認識した場合、コマンドは失敗(終了コード1)を報告します。これは単語「Appis」を「apple」に変換するのに少なくとも3つの操作(A→a、i→l、s→e)が必要であり、許容距離2を超えているためです。
テキストが一致した場合、テキスト内の一致位置のインデックスがTOCR_MATCH_INDEX変数に格納されます。インデックスはテキストの先頭を表す0から始まります。さらに、一致した部分文字列は_TOCR_MATCH変数に保存されます。例えば、認識されたテキストが_'There are Appls'の場合、変数は_TOCR_MATCH=Applsおよび_TOCR_MATCH_INDEX=10として生成されます。