光学文字認識との作業
テスト中のシステム(SUT)でテキストを探す必要があり、テキストの画像をキャプチャすることが実際的ではない場合、Eggplant FunctionalやSenseTalkの光学文字認識(OCR)機能を頼りにすることができます。OCRは、動的なテキストを検索する場合に最も役立ちますが、他にも多くの実用的な用途が見つかるかもしれません。
このページで説明されているOCRの概念、およびOCRで使用されるテキストプロパティを理解するために時間をかけることを強くお勧めします。これにより、OCR検索に適切な調整を行い、テスト環境でより良い検索結果を得ることができます。
OCRで成功するために:最も一般的なOCRプロパティの使用
SenseTalkには、状況や環境に合わせてOCR検索をカスタマイズできるテキストプロパティがいくつか含まれています。カスタマイズされたOCR検索を使用すると、検索の信頼性が向上し、最良の結果を得ることができます。OCRプロパティの完全なリスト、およびテキストの読み取りとテキストの検索にどのプロパティを使用できるかについての情報については、テキストプロパティを参照してください。
OCR検索をカスタマイズするためにプロパティを使用する場合、使用するプロパティとその数を慎重に考えることが重要です。検索が機能し ない場合、プロパティを追加し続けることは魅力的に思えますが、それが常に最善の方法ではありません。時にはプロパティを削除する必要があります。まず個々のプロパティを試し、必要に応じてプロパティを追加します。OCRチューナーを使用してプロパティを試し、何が機能するかを確認します。OCR検索のトラブルシューティングについての詳細は、OCRのトラブルシューティングを参照してください。
以下の各方法は、OCRの認識を改善したり、検索を高速化したりするために使用されるかもしれません。詳細については、OCR検索の速度を向上させるを参照してください。
Search Rectangles
ほぼ常に、検索矩形を追加することは有用で、OCRが検索する画面の一部を制限します。OCRが全画面を検索すると、それは遅くなるだけでなく、余分な可能性のある一致が出たり、全く一致しない可能性があるため、正確性も低下します。
検索矩形は通常、画像を使用して定義されますが、座標もこのプロパティに渡すことができます。キャプチャした画像のホットスポットが使用されるポイントを定義します(このポイントを移動する方法については、ホットスポットの使用を参照してください)。
画像を使用することは理想的です。なぜなら、SUTスクリーン上の要素が異なる場所に表示されるときに、矩形の位置 を動的にすることができるからです。例えば、テキストが常にSUTスクリーンの同じ位置に表示されないウィンドウに表示されるかもしれません。そのウィンドウにアイコンがあるかもしれません。そのアイコンの画像をキャプチャし、それを画像定義の検索矩形のアンカーとして使用することができます。
画像を使用して検索矩形を設定することができない場合は、画面座標を使用することができます。ビューワーウィンドウのCursor Locationツールバーアイコンは、この作業に役立ちます。なぜなら、それはSUT上のマウスの現在位置を示しているからです。ビューワーウィンドウのツールバーをカスタマイズする方法については、Customize the Toolbarを参照してください。
例:ウェブサイトから動的なテキストを読み取る
Google Financeページに移動し、特定の会社を検索し、その後株価を読み取るテストがあるかもしれません。OCRが価格の値を確実に、そして他の何ものでもなく読み取るために、画像を使用して検索矩形を定義することができます。使用されるコードは次のようにシンプルになります:
Log ReadText ("TLImage","BRImage")
上記のコードを動作させるためには、2つの画像をキャプチャする必要があります。この例では、画像TLImage
とBRImage
を使用して、検索矩形の左上と右下の角を定義しました。これらの画像をキャプチャするために、OCRが読み取るテキストに対して安定した画面の要素を1つ以上選択します。
この例では、画面の単一の要素である「会社」ラベルを使用しています。
TLImage
は、「会社」ラベルの画像で、ホットスポットが株価が表示されるエリアの左上の角に移動されています。
キャプチャエリアを移動せずに、ホットスポットを株価が表示されるエリアの右下の角に移動してBRImage
をキャプチャします。
画像をキャプ チャし、SenseTalkコードを書いた後、上記の例はGoogle Financeの任意の会社の株価を正常に読み取ることができます。
"TLImage"と"BRImage"は、OCRを使用した成功したReadText()検索のための検索矩形を設定するために使用されます。
コントラスト
このプロパティは、Eggplant Functionalが黒と白のみを視覚するようにします。 ContrastColor
(背景色)として使用されている色は白になり、それ以外のすべてのものは黒になります。白地に黒文字の場合、コードは次のようになります:
Click (Text: "hello", Contrast:On, ContrastColor: White, ValidCharacters: "hello", Searchrectangle: ("UpperLeftImage", "LowerRightImage"))
この状況では、白に近い各ピクセル(標準許容範囲の45以内)が白に変わり、それ以外のすべてが黒として読み取られます。これはOCRがテキストをより明瞭に読み取るのに役立ちます。
実際に見えるのは、アンチエイリアシングの影響を受けないこの画像です。
コントラストオン時のOCRが見るもの
Contrast
設定を使用してOCRエンジンに送られるテキスト画像を確認するには、OCR Tunerパネルを使用します。このパネルには、コントラスト関連の設定の任意の組み合わせ(EnhanceLocalContrastを除く)で、OCRエンジンに認識のために送られるものを表示するライブディスプレイがあります。
灰色の背景(または中程度の値の別の色)のテキストを探す場合、少し複雑になることがあります。 ContrastTolerance
を少し低く設定する(20程度まで)と、OCRが白に変えようとするピクセルの数が減ります。上の画像では、"hello"の"h"と"e"の間のピクセルが黒に変わり、2つの文字が連結しています。この状況では、OCRはまだ文字を読むことができましたが、他の状況では、これがOCRが文字を処理するのをより難しくする可能性があります。これが、スクリプト全体を実行する前に試してみることが常に良い考えである理由です。
Click (Text:"hello", Contrast:On, ContrastColor: White, ContrastTolerance: 20)
Contrast
検索でContrastColor
が設定されていない場合、デフォルトでは検索領域の左上隅のピクセルの色になります。
背景色の決定
背景/コントラストの色がわからない場合、任意のプラットフォーム上の特定の位置の背景色のRGB値を見つけるための2つの方法があります。
方法1:カラーピッカー(Mac)を使用する
カラーピッカーを使用するには、以下の手順を実行します:
-
リモート画面ウィンドウのツールバーのFind Textアイコンをクリックします。これでテキスト検索パネルが開きます。
-
テキストまたは背景色のボックスをクリックします。Colorsシステムパネルが表示されます。
-
カラーピッカーのアイドロッパーアイコンをクリックし、テキストまたは背景の上にカーソルを移動し、コントラスト色の設定に使用したい色を選択します。アンチエイリアシングのピクセルを選択しないように注意してください。
カラーピッカーを使用してMacでコントラストカラーを見つける
方法2: ColorAtLocation()
関数を使用する
ColoratLocation()
functionを使用するには、以下の手順を実行します:
- ライブモードでビューアウィンドウを開きます。Cursor Locationツールバーアイコンがすでにツールバーにない場合は、ツールバーのカスタマイズを参照してください。
- 次に、
ColorAtLocation
関数を使用します。 - RGBカラー値が必要な背景上にマウスを移動します。
- SUT上のマウスの座標を使用して、Cursor Locationツールバーボタンのフィールドに表示される、このコードラインを実行ウィンドウの下部にあるアドホックdoボックス(AHDB)またはスクリプトから実行します:
put colorAtLocation(x,y) // where (x,y) refers to the coordinates found in the remote screen window
このコードラインを実行すると、指定した位置の色のRGB値が返されます。
ローカルコントラストの強調
OCRエンジンに送信されるテキスト画像のローカルコントラストを自動的に上げたい場合は、このプロパティを有効にします。このプロパティは、読まれているテキストの一部または全部が比較的低いコントラストを持っている場合、たとえば暗い背景上の青色のテキストなど、認識を助ける可能性があります。コントラストがオンになっていると、このプロパティは効果がないため、コントラスト
がオフの場合にのみ有用です。
Log ReadText(("TLImage","BRImage"), enhanceLocalContrast: On)
ValidCharacters
およびValidWords
ValidCharacters
とValidWords
プロパティは、OCRが返す内容を制限します。これには、一致と見なす内容、テキストを読み取るときに返す内容が含まれます。
これらのプロパティに渡す値はOCRに優先されます。本質的に、OCRが何を探しているのかヒントを与えています。たとえば、ValidWords:"cat"
を設定し、SUTスクリーンに"oat"という単語が表示されると、OCRはそれを"cat"と読むことがあります。
ValidCharacters
ValidCharactersプロパティは、OCRにどのグリフを探し、どのグリフを無視するかを伝えます。たとえば、OCRが文字“O”を数字“0”と誤読したり、その逆をしたりするのを防ぐために使用できます。これは、スクリプトの最適な制御のために手動で行うことができます。または、アスタリスク(*)を使用して自動的にvalidCharacters
を検索対象のテキストに設定することができます。
ValidCharacters
は、テキストを事前に知らない状況でテキストを読むときや、文字セットを制限する必要があるときに最も役立ちます。たとえば、お金を扱うときに数字と文字を区別するのに使用できます。
例
//ValidCharacters を手動で設定する:
Log ReadText[("TLImage","BRImage"], ValidCharacters:"$£€.,0123456789") -- 通貨記号を含む数値を読み取る
//変数と一緒にValidCharactersを使用する:
Put "Charlie" into MyText
Click (Text: MyText, ValidCharacters: MyText)
//アスタリスクを使用してValidCharactersを検索対象のテキストに設定する:
Click (Text:"CoDe13v9065", ValidCharacters:"*", SearchRectangle:("UpperLeftImage","LowerRightImage"))
ValidWords
ValidWords
プロパティはValidCharacters
に似ていますが、有効とされる文字だけでなく、それらの文字の配置も強制します。これがValidWords
が特定のフレーズを検索するときによく使用される理由です。
ValidWords
は、ValidWords
に提供された単語のみを含む新しい言語ライブラリを基本的に作成するため、設定されたLanguage
プロパティをオーバーライドします。
例:
Put "Charlie Brown" into mytext
Click (text: mytext, searchRectangle:("RT1","RT2"), validwords:mytext)
OCRに無視することを伝える
OCRの使用はすべて、テキスト検索に適切なプロパティをOCRに提供することに関連しています。 これらのプロパティのほとんどは、OCRが何を認識するべきかに向けるのが一般的ですが、場合によっては、誤った結果から逃れるために何を認識しないかを伝えることでそれを逸らす方が良いです。 以下のプロパティは、テキストを扱うときにOCRが無視するべきものを具体的に伝えます。
Ignore Spaces
テキスト検索のプロパティとして、IgnoreSpaces
はその名の通り、検索内のスペースを無視するために使用できます。 たとえば、このアプローチは、文字間のス ペースが一貫していないシナリオで役立つ可能性があります。 OCRは、存在しない場所にスペースがあると見ることがありますし、存在する場所のスペースを無視することがあります。 IgnoreSpaces
プロパティをON
に設定すると、OCRは"flowerpot"を"flower pot"と一致させ、その逆も同様です。 このプロパティを使用すると、OCRは検索している文字列と見つけた文字列の両方からスペースを取り除き、一致を見つけます。
Click (Text:"flower pot", validCharacters:"*", ignoreSpaces:ON, searchRectangle:("UpperLeftImage","LowerRightImage"))