Tesseract OCR
Tesseractは、Robotのデフォルトの光学式文字認識(OCR)エンジンです。すべての主要プラットフォームでサポートされている無料のオープンソースコンポーネントです。
この統合は、Tesseractのコマンドラインインターフェース(CLI)とローカルファイルシステムに基づいています。精度を高めるためにデスクトップ画像は拡大(スケールアップ)され、システムの一時パス内のファイルに8ビット白黒形式で保存されます。その後、このメソッドは画像ファイルを引数としてCLI経由でTesseractを起動します。エンジンはOCRを実行し、認識したテキストを一時パス内のテキストファイルに保存し、それをRobotが解析します。
セットアップ手順
最初のステップとして、Tesseractがシステムで利用可能かどうかを確認します:
-
Robotを起動し、メインメニューでOCR → Choose Preferred OCR Engineを選択する
-
エンジンのドロップダウンでTesseractが選択されていることを確認してください。
-
"You have Tesseract XXX installed"のような緑色の注記が表示されれば、準備は完了です。表示されない場合は、以下の手順に従ってインストールしてください。
Tesseractのインストール
Linuxをお使いの場合は、パッケージマネージャーを使用して'tesseract'パッケージをインストールするだけです。
それ以外の場合は、Tesseractをダウンロードしてインストールしてください(instructions)。
-
Windowsの場合、オプションの言語ファイルも同時にインストールされる最新のUB Mannheim Tesseract installerの使用を強くお勧めします。
-
Tesseractバージョン5では、認識されたテキスト内のフォームフィード文字を抑制するために、Robotリリース6.3以降が必要です。
Robotはデフォルトで、tesseractバイナリがシステムパス上にあることを前提としています。そうでない場合は、上の画像内のTesseract Commandフィールドを適切に更新してください。例えば、エンジンをC:\Program Files\Tesseractフォルダにインストールした場合は、コマンドテンプレートを次のように更新します:
"C:\Program Files (x86)\Tesseract-OCR\tesseract.exe" $1 $2 $3 $4
Tesseractの確認
統合をテストするには、スクリプトエディタを開いた状態でScript → Compareto Commandウィンドウを開きます。Comparison methodドロップダウンで"tocr"を選択し、ウィンドウにTesseractを確認させます。
Tesseract OCRが正しくインストールおよび設定されているかをテストするには、テスト環境への接続がある状態で"Compare"ボタンから"tocr"認識を実行するだけです。OCRの結果、またはエンジンがスローしたエラーのいずれかが表示されます。最も一般的なエラーは次のとおりです:
-
Tesseractがまったくインストールされていません。
-
Tesseractはインストールされていますが、システムパス上にありません。この場合、Preferencesウィンドウ内でTesseract OCRの設定パネルを見つけ、コマンドテンプレートを"tesseract"バイナリへのフルパスで更新する必要があります。
-
Tesseractはインストールおよび設定されていますが、言語データファイルがないか、languageパラメータで指定されたものがありません。この場合、言語ファイルをダウンロードして、Tesseractが必要とするフォルダに保存する必要がある場合があります。
Tesseractの認識能力は最も一般的なフォントおよび言語に限定されているため、T-Planは特定のテスト環境に対する精度や互換性を保証しません。Tesseractエンジンは、特定のフォントや言語設定用に最終的に"トレーニング"することができます。その手順はTesseract's documentationに記載されています。
精度は、Robot側では2つのパラメータのみで制御できます:
-
cmpareaパラメータを使用して認識を特定の画面領域に制限すると、精度が大幅に向上します。デスクトップ全体を認識対象にすると、エンジンが混乱するようで、テキストが存在しない場所でもテキストを検出することがよくあります。これにより、多くのエラーを伴う予期しない結果につながります。
-
エンジンは1~2文字で構成される単独の文字列の認識に問題があるようなので、より長いテキスト(3文字以上)にのみ使用してください。
-
"scope"パラメータの値を2.5や3のように大きくすると、例えばフォントが非常に小さい場合などに、精度がわずかに向上することがあります。
自動化
OCRを使用するすべてのコマンド、例えばCompareTo、WaitFor、Click、およびDragは、優先エンジンを使用し、自動的にTesseractを使用します。
OCRは、設定ミスまたはI/Oエラーが原因でエラーをスローした場合、呼び出し元のコマンドに1を返させます。エラーのテキストは_TOCR_ERROR変数を通じて利用可能になります。この変数の存在をテストすることは、スクリプト内でコアOCRエラーを検出する方法です。
5つのTesseract OCR固有のパラメータがあります:
language=<3-charLanguageCode>
languageパラメータは、正しくインストールされたTesseract言語データファイルの有効な3文字の言語コードでなければなりません。このパラメータを省略した場合、デフォルトで"eng"(英語)になります。
scale=<scaleFactor>
scaleパラメータは、Tesseractに渡す前にデスクトップ画像を何倍に拡大するかを定義します。拡大率は精度に影響を与える可能性があります。詳細はTroubleshootingの段落を参照してください。
scale値は1.5、2、3のような任意の浮動小数点数を指定できます。scale値を大きくすると、メモリ要件が大幅に増加し、Robotがメモリ不足(OutOfMemoryError)になる可能性があります。デフォルトのscale係数は2です。
mode=<modeNumber>
任意の認識モード(3.5以降でサポート)。エンジンの動作を変更して、より良い結果を得ることができます。サポートされているモードは次のとおりです:
-
デフォルトのTesseractモード(コード"1")。これは、OSDなしの自動ページセグメンテーションを行うTesseractのデフォルトモードです("-psm 3" CLIスイッチ)。この値は3.5より前のRobotリリースと互換性があります。
-
高精度(コード"2")。これは、画面上のテキストを行に分割し、行モード(-psm 7)でそれぞれに個別にOCRを再適用するRobotの拡張機能です。この方法は数倍遅くなりますが、特にアプリケーションウィンドウのようなより小さな画面領域にOCRを適用する場合、通常はより正確な結果が得られます。
-
画像を単一の単語として扱う(コード"8")。認識対象のテキストが最大3文字までの場合にこのモードを使用してください。これは"-psm 8" CLIスイッチによって駆動されるTesseractのネイティブモードです。
Robotバージョン4.0.1以降では、追加のモードがサポートされています:
-
可変サイズのテキストの単一列であると仮定する(コード"4")は、Tesseractの"-psm 4" CLIスイッチに対応します。
-
垂直方向に整列した均一なテキストブロックであると仮定する(コード"5")は、Tesseractの"-psm 5" CLIスイッチに対応します。
-
均一なテキストブロックであると仮定する(コード"6")は、Tesseractの"-psm 6" CLIスイッチに対応します。
-
画像を単一のテキスト行として扱う(コード"7")は、Tesseractの"-psm 7" CLIスイッチに対応します。
-
画像を円形の単一の単語として扱う(コード"9")は、Tesseractの"-psm 9" CLIスイッチに対応します。
-
画像を単一の文字として扱う(コード"10")は、Tesseractの"-psm 10" CLIスイッチに対応します。
filter=<filterNumber>
任意の画像フィルタ(3.5以降)。OCRの精度を向上させるために、画面上の特定のアーティファクトを除去します。このフィルタは、対象の画面またはその一部が、標準的な単色のグレーまたは白のボタン、ドロップダウン、その他のコンポーネントを持つアプリケーションウィンドウのような、矩形の単色領域内に暗い色のテキストを含む場合に選択的に適用してください。白や明るい色のテキスト、および画像や写真のようなリッチカラーのグラフィックはフィルタリングに適していません。このようなシーンでフィルタを使用すると、テキストが損傷し、OCRの精度が低下する可能性があります。
fontsize=<fontSize>
認識対象テキストのおおよそのフォントサイズ(3.5以降)。デフォルト値は15です。これは画像フィルタが有効な場合にのみ使用されます。フォントサイズ以下のアーティファクトを除去しないようフィルタに指示します。実際のフォントサイズよりもかなり小さい値を指定すると、フィルタが一部の文字を損なう可能性があります。値が大きすぎると、フィルタが画面から特定のアーティファクト(コンポーネント)を除去できなくなり、精度が低下する可能性があります。