Text-Reading関数

以下に示す情報において、光学文字認識(OCR)検索によるテキスト認識や文字検索向けのReadCharacters()関数 によって操作される、Eggplant Functionalで利用可能なSenseTalkコマンドと関数を説明します。

ReadText()関数

挙動:所定の画面矩形の中にテキストを返します。

パラメータ:(必須)1対の画像、単一画像、矩形、または読み込む画面範囲を示す点。 一般的に、1対の画像の使用によってベストな結果が得られます。 ReadText()関数は、テキスト検索結果を向上させることが可能なオプションのプロパティリストを使用します。 検索におけるOCRプロパティの利用:で示すように、以下の非常によく利用されるプロパティを確認してください。

  • コントラスト:Contrastがオンの場合は、OCRエンジンはReadText矩形をフラットな2色の画像として扱います。 一次色は、矩形の左上のピクセルか、ContrastColorプロパティから採取されます。 その色のContrastTolerance値内に入っているピクセルは、その色を持つとみなされます。 その他すべてのピクセルに二次色が割り当てられます。 テキストはいずれかの色で表示できます。 デフォルト値:Off
  • ContrastColor:Contrastがオンの場合は、ContrastColorはReadText矩形の一次色として扱われます。 ContrastColorプロパティを設定していない場合は、コントラストカラーは矩形の左上のピクセルから採取されます。
  • ValidCharacters:文字列には、ReadText()関数によって返される文字セットが含まれます。 ValidCharactersプロパティは、Languageプロパティを上書きします。 この上書きは、ValidCharactersプロパティの一部でない文字は、ReadText関数によって返されないことを意味します。 OCRが、文字が定義済みの領域内に存在するものの、ValidCharacters文字列内で提供される文字に一致しないと判断した場合は、「^」が返されます。
  • IgnoreSpaces:テキスト検索時にIgnoreSpacesプロパティがオンになっている場合は、その検索は検索範囲内のスペースを無視します。
  • IgnoreUnderscores:ignoreUnderscoresプロパティがオンになっている場合は、OCRテキスト検索において、検索時はアンダースコアがスペースとして扱われます。 例えば、文字列「My_Computer」は、My_ComputerまたはMy Computerと等しくなります。 OCRエンジンはアンダースコアの認識に失敗することがあるため、ignoreUnderscoresプロパティはデフォルトではオンとなります。
  • Language:本プロパティは、どの文字セットがReadText()関数の戻り値に対して有効かを判断します。 Languageプロパティには、「English, French, German」などのようにコンマで区切ることで複数言語を含めることができます。 デフォルトでは英語となります。 使用がサポートされている言語の全リストはEggplant FunctionalOCR言語サポートで確認してください。

以下に記載するその他のプロパティはアルファベット順で表記され、ユーザー選好の特定の順序を持たない点について注意して確認してください。

  • CaseSensitive:OCRテキスト検索は、デフォルトでは大文字と小文字を区別しません。 検索では、文字が大文字か小文字かにかかわらず、結果が返されます。 CaseSensitive:yesパラメータを使用すると、検索時に大文字と小文字を区別し、テキスト文字列の大文字・小文字の使用と正確に一致する結果のみを返すよう強制できます。 CaseSensitive:noパラメータを使用すると、大文字と小文字が区別されなくなり、大文字と小文字を考慮しないすべての結果が返されます。
  • ContrastTolerance:コントラストがオンの場合は、ContrastToleranceは、1ピクセルがContrastColorプロパティのRGB値と異なる程度を示す尺度を表し、引き続き一次色とみなされます。 デフォルト値:45。
  • DPI:SUT画面の1インチ当たりのドット数。 デフォルト値:72 DPI。
  • Enable Aggressive Text Extraction:画像からできるだけ多くのテキストをOCRに抽出させたい場合に、このプロパティを有効化します。
  • Enhance Local Contrast:OCRに自動的に画像のローカルコントラストを強めさせたい場合に、このプロパティを有効化します。
  • Ignore Lines:本プロパティを有効化すると、検索時にOCR検索に新しい行を無視させることができ、OCRが実際に読み取るテキストに影響を及ぼすこともありません。
  • MultiLine:本プロパティは、矩形内のテキストを読み取る場合とは逆に、点の周囲のテキストを読み取る場合のみ適用します。 MultiLineがオンの場合は、ReadText()関数は、指定した点に関連するテキスト行とともに、同じテキストブロックに属していると思われるそれ以降の行を返します。 MultiLineがオフの場合は、ReadText()関数は、指定した点に関連するテキスト行のみを返します。 デフォルト値:Off
  • PreferredWords:本プロパティは、ReadText()関数で返すことができる語を判断する文字列またはリストです(ただし、指定した語と一致しない語を返す場合もあります)。
    注:以下で定義するValidWordsプロパティは、指定した語と一致しない語を除外するのに使用できます。
  • SingleColumnMode:SingleColumnModeがオンの場合は、OCRエンジンは、画面上にはただ1つのテキスト列しか存在しないと仮定します。 SingleColumnModeがオフの場合は、OCRエンジンは複数の列を検出し、それに応じて戻り値内でテキスト行を調整できます。
  • TextRotation: 以下の4つの値のうちの1つ。
    • clockwise。 右方向に90度回転
    • counter-clockwise。 左方向に90度回転
    • upside-down。 180度回転
    • none。 回転しない

    本プロパティが設定されている場合は、ReadText()関数は指定された回転度数の語を特定します。

  • Trim:Trimがオンの場合は、OCRエンジンは背景のないピクセルに達するまで、ReadText()関数の両端を切り取ります。 背景色は、矩形の左上のピクセルか、TrimColorプロパティから取得されます。 デフォルト値:Off
  • TrimBorder:Trimがオンの場合は、整数で表されるTrimBorderは、ReadText()関数の矩形から切り取られなかった背景のピクセル幅を意味します。 TrimBorderは、背景のない端を矩形から切り取るために、負の数にも設定できます。 デフォルト値:0。
  • TrimColor:Trimがオンの場合、TrimColorは、ReadText()関数の矩形の背景とみなされる色となります。 TrimColorプロパティを設定しない場合は、背景色は矩形の左上のピクセルから取得されます。
  • TrimTolerance:Trimがオンの場合、整数で表されるTrimToleranceは、1ピクセルがTrimColorのRGB値と異なる程度を示す尺度を表し、引き続き背景とみなされます。 デフォルト値:0。
  • TrimWhitespace:TrimWhitespaceがオンの場合は、返されたテキストの前後からすべての空白文字が取り除かれます。 TrimWhitespaceがオフの場合は、ReadText()関数は空白文字が前か後に存在するテキストを返すことができます。 デフォルト値:On
  • ValidCharacters:本パラメータは、OCRエンジンが認識する文字を制限します。 デフォルトでは、OCRエンジンは、現行のテキストプラットフォームにおける言語(単一または複数)向けのすべての文字セットを使用します。 文字を制限することで、OCRエンジンにテキスト文字列を確認させることができる場合があります。 アスタリスクをワイルドカードとして使用すると、OCRエンジンにテキスト文字列内の文字だけを検索させることができます。
  • ValidPattern:本プロパティは、下表に概要を示す正規表現の値をとり、指定したパターンと一致する文字またはワードのみを返す文字列です。

    以下の表に、OCRで使用できる正規表現の文字の概要を示します。

    アイテム名 従来の正規表現符号 使用例/説明
    文字 . c.t:「cat」や「cot」などの語を表します。
    文字範囲内の文字 [] [b-d]ell:「bell」や「cell」、「dell」などの語を表します。
    [ty]ell:単語「tell」および「yell」を表します。
    [A-Z]:任意の大文字のアルファベット文字を表します。
    [a-z]:任意の小文字のアルファベット文字を表します。
    [A-Я]:任意の大文字のキリル文字を表します。
    [а-я]:任意の小文字のキリル文字を表します。
    [0-9]:任意の数字を表します。
    [0-9a-zA-Z]:英数字を含む、任意の1文字を表します。
    文字範囲外の文字 [^] [^y]ell:「yell」以外の「dell」、「cell」、「tell」などの語を表します。
    または | c(a|u)t:単語「cat」および「cut」を表します。
    連続する0回以上の出現 * 10*:1、10、100、1000などの数字を表します。
    連続する1回以上の出現 + 10+:1以外の10、100、1000などの数値をとります。
    [0-9a-zA-Z]+:あらゆる単語をとることができます。

    注:

    • 正規表現で使用される文字の一部を、システム目的で使用する場合があります。 上の表に示したように、これらの文字は角括弧、ピリオドなどを含みます。
    • 通常の文字として補助用の文字を入力したい場合は、その前にバックスラッシュ(\)を入力します。 例:[t-v]x+は「tx」、「txx」、「txxx」などの語や「ux」、「uxx」などの語を表しますが、\[t-v\]x+は「[t- v]x」、「[t-v]xx」、「[t-v]xxx」などの語を表します。
    • 特定の正規表現の要素をグループ化する必要がある場合は、丸括弧を使用します。 例えば、(a|b)+|cは、「c」と「abbbaaabbb」や「ababab」のような任意の組み合わせ (aとbが任意の順序で任意の数存在する0以外の長さの一語)を表します。一方、a|b+|cは 「a」、「c」および「b」、「bb」、「bbb」などを表します。
  • ValidWords:本プロパティは、ReadText()関数で返すことができる語を判断する文字列またはリストです。 validWordsプロパティは、Languageプロパティを上書きします。 この上書きは、validWordsプロパティの一部ではない語がReadText関数によって返されないことを意味します。

例:

put the last character of readtext("UpperLeft","LowerRight",contrast:on, contrastColor:(0,0,128),contrastTolerance:25) //readText()関数によって返される最後の文字のみを印刷します

例:

Log trimAll(ReadText(("UpperLeft","LowerRight"), ValidPattern: "[A-Za-z]+\.py")) //readTextに正規表現を使用して画面を読み取ることを強制し、アウトプットからタブやキャリッジリターンなどのすべてのホワイトスペースを切り取ります

例:

//これと同様のコードを使用して、ラベルの左側を読み取ります

 

function readResultsNumber ObjectLabel // ObjectLabelパラメータを用いてreadResultsNumberと命名されたカスタム関数を宣言します

 

set ResultsRectangle to ImageRectangle(text:ObjectLabel) // OCRを使用して画面上のラベルを検出し、ImageRectangleを変数に格納します

set ResultsNumber to ReadText((0,Top of ResultsRectangle),BottomLeft of ResultsRectangle) // OCRを使用して、SUT画面の端のラベルの左側を読み取ります

delete comma from ResultsNumber // ResultsNumberに格納されている値からすべてのコンマを除去します

return ResultsNumber // ResultsNumberを返し、呼び出し元のハンドラによって回収されるようにします

 

end readResultsNumber

練習:

次の3つの例を練習するために、readTable() 関数の下でclass scheduleを使用します。

例:

log readText(imagelocation("ReadingAssignmentHeader").x, imagelocation (text:"Introduction").y,singlecolumnmode:true) // 列のx座標と行のy座標に基づく単一の点の周囲を読み取ります

例:

// これと同様のコードを使用して特定の表の列内における各行を読み取ります

put ImageLocation("ClassSchedule") into ILC // 「ClassSchedule」のホットスポットの位置を変数に格納します。 ホットスポットは画像の中央に存在します。

put ((ILC+(20,60)), (imageRectangle("ReadingAssignmentHeader"). BottomLeft+(-10,34))) into TableRectangle // ClassScheduleとReadingAssignmentHeadの位置を使用して、読み取りたい最初の表のセル位置を設定し、確立します

repeat 7 times // 読み取る行数を指定します

log ReadText(TableRectangle) // セルのコンテンツをログに記録します

add ((0,30),(0,30)) to TableRectangle // 読み取り領域を30ピクセル下に移動し、次のセルをカバーできるようにします

end repeat

例:

//これと同様のコードを使用して特定の行に対応する列を読み取ります

set Characters to 0..9 &&& dash &&& "Chapters" // すべての数値、-、および「Chapters」内の文字をリストとして変数に入れます

put the readTextSettings into RTS // 現在のreadTextSettingsを変数に格納します

set the readTextSettings to (validCharacters:Characters) // Charactersに格納されているvalidCharactersのリストに基づき、readTextSettingsを設定します。 readTextSettingsの使用は、 readTextSettingsの同じ設定を必要とする複数のreadText()またはreadTable()関数を 実行する場合に適当です

put (2,4,7) into Weeks // 関心のある行の識別子のリストを変数に格納します

put imageRectangle("WeekHeader") into WeekHeader // 検出された画像「WeekHeader」用の矩形を格納します

put imageRectangle("WeekHeader") into WeekHeader // 検出された画像「ReadingAssignmentHeader」用の矩形を格納します

repeatwith each Week of Weeks // Weeks内の行の識別子ごとに1回繰り返します

put (WeekHeader. BottomLeft, (WeekHeader. Right,remoteScreenSize().y)) into WeekColumn // 表中のWeeks列の位置に基づき矩形を作成します

put imageRectangle (text:Week,searchRectangle:WeekColumn) into RowNum // 行の識別子用の矩形を変数に格納します

put readText(ReadingHeader. Left,RowNum. Top-4, ReadingHeader. Right, RowNum. Bottom+4) into Reading // 行位置と列位置に基づいて矩形を読み取ります

If Topic is not empty then // readText()の戻り値がemptyかどうかチェックします

Log Reading

else

Log "No chapter."

end if

end repeat

set the ReadTextSettings to RTS // ReadTextSettingsの設定を元のプロパティリストに戻します

ReadTable()関数

挙動:表のテキストをリストとして返します。 返されるリストには、値の行につき1つのサブリストが含まれ、各サブリストにはその行内で検出されるセルにつき1つの値が含まれます。 各行のサブリストには、同じ数の値が含まれる場合と、含まれない場合とがあります。

パラメータ:読み取りたいテキストを含んだ1つの矩形。 ReadText()関数の下に表記された任意の数のプロパティを含むオプションのプロパティリスト。

例:

Log ReadTable("TableUpperLeft","TableLowerRight")

練習:

このclass scheduleを利用して以下の例を練習します。

ReadTable()およびReadText()の表画像の例

例:

put (("Week", "Topic", "Reading Assignment"), (1, "Course Introduction", "Chapter 1")) into ClassAssignments // 予想される表のコンテンツリストのリストを作成します

put readtable("TableUpperLeft", "TableLowerRight") into ClassAssignmentsTable // readtableのアウトプットを変数に格納します

put the first item of ClassAssignments into AssignmentsHeader // コンテンツを変数に格納します

put the first item of ClassAssignmentsTable into TableHeader // コンテンツを変数に格納します

Assert that AssignmentsHeader=TableHeader // 予想されるヘッダーと実際の表のヘッダーが同じかどうかをアサートします。

repeat for each item 2 to -1 of ClassAssignmentsTable // 2つ目のアイテムから最後のアイテムまで反復処理します。 各アイテムは表内の行を表します

if the second item of it is not "Review, final exam" then // 表の行の2つ目の列の値をチェックします

Log "Assignment" && the repeatIndex && "is" && the third item of it && colon && the second item of it & period // 異なる行列の文字列、repeatIndexおよび値を連結させ、メッセージをログに記録します

end if

end repeat

注:一般的に、ReadTable()関数は、表の境界が矩形に含まれる場合に最もよく機能します。 与えられた矩形内で表が検出されない場合は、エラーが投げられます。
ヒント:ReadTable()関数が希望する結果を与えない場合や表を検出しない場合は、表の周囲で所定の矩形の別の境界を検証します。
ヒント:ReadTable()関数は、非常に規則的で明確に定義された表を用いる場合に最もよく機能します。 ReadTable()関数が、希望する表を読み取るのに苦労する場合は、ReadText()関数を使用して各行とセルを個別に読み取ります。

ReadCharacters()関数

挙動:キャプチャした文字コレクションとともにReadCharacters()関数を使用します。 スクリプティングにおいて本関数を利用する場合は、文字列または複数行の文字列として、(所定の画面の矩形内の)文字コレクションから文字が返されます。

パラメータ:(必須)1対の画像、単一画像、矩形、または読み込む画面範囲を示す点。 一般的に、1対の画像の使用によってベストな結果が得られます。 領域パラメータの後には、追加パラメータ(画面上のテキストの読み取り用に使用する文字コレクションの名前)が続きます。 CurrentCharacterCollectionグローパルプロパティを設定する場合は、文字コレクションの名前を省略できます。

  • asListasListが有効な場合は(asList:Yes)、ReadCharacters()関数は認識される文字グループごとに1つずつ、文字列のリストを返します。
  • characterPriority:本文字列には、高~低の順序で優先文字が組み込まれます。デフォルト設定では「;:.」となります。本設定により、同じ場所で2つの文字画像が検出された場合に、どちらの文字を認識するかが管理されます。例えば、characterPriority:"OC"を利用すると、「O」の文字画像に「C」 の文字画像より高い優先度が与えられます。結果として、OおよびCの画像が画面上の同じ場所で検出された場合に、ReadCharacters()関数は文字「C」ではなく文字「O」を使用することになります。
  • minimumVerticalOverlap:この値は、2つの文字が同じ行にあるとみなすことができる最低限の重複(単位:ピクセル)を設定します。2つの文字がminimumVerticalOverlap値よりも多く重なり合っている場合は、ReadCharacters()関数は、これらの文字は同じ行にあるとみなします。
  • maximumHorizontalOverlap:この値は、隣接する文字が同じスペースを占有しているとみなすことができる最大限の重複(単位:ピクセル)を設定します。2つの隣接する文字がこの設定値よりも多く重なり合っている場合は、ReadCharacters()関数は、これらの文字は同じスペースを占有しているとみなします。
  • maximumAdjacentGap:この値は、2つの隣接する文字に許容される最大限の隙間(単位:ピクセル)を設定します。本設定では、文字間にはスペースがないと仮定します。2つの隣接する文字がこの設定値よりも離れて存在する場合は、ReadCharacters()関数は、これらの文字は非隣接文字であるとみなします。
  • maximumSpaceGap:この値は、2つの文字間に存在する暗黙のスペースの最大限の隙間(単位:ピクセル)を設定します。2つの文字がこの設定値よりも近くに存在する場合は、ReadCharacters()関数は、これらの文字がスペースで区切られているとみなしません。
  • spaceWidth:この値は、スペース文字の名目上の幅(単位:ピクセル)を設定します。ReadCharacters() 関数はこの値を使用して、広いスペースの隙間に対して返されるスペースの数を決定します。

ここに示されるプロパティに加えて、任意の画像検索プロパティを指定できます。 これらのスペシャルプロパティは、文字コレクション内の各文字画像に対応する検索プロパティを上書きします。 例えば、「tolerance:60」を指定すると、各文字画像を検索する際に、ReadCharacters()関数が画像ごとに設定された個々の許容値ではなく、許容値の60を使用するようになります。 詳細情報は、画像プロパティリストを参照してください。

構文:

ReadCharacters (<rectangle>, <option1Name>:<option1Value>, <option2Name>:<option2Value>,...<optionNName>:<optionNValue>)

例:

put ReadCharacters(the RemoteScreenRectangle, CharacterCollection:"Receipt") into myString // 戻り値を文字列に入れます

例:

set the currentCharacterCollection to "Receipt" // currentCharacterCollectionグローバルプロパティを設定します。

put ReadCharacters(the RemoteScreenRectangle) into myString // characterCollectionプロパティは前の行でcurrentCharacterCollectionグローバルプロパティを使用して設定されているため、そのプロパティを使用する必要はありません

例:

put ReadCharacters(the RemoteScreenRectangle, "Receipt", asList:true) into stringList // asList:trueを指定し、ReadCharacters()関数が文字列のリストを返すようにします

例:

ReadCharacters(the RemoteScreenRectangle , characterPriority:"OC") // characterPriorityプロパティを設定し、OとCの2つの文字画像が同じ場所で検出される場合はReadCharacters()関数が文字Oを使用するようにします

例:

put ReadCharacters(the RemoteScreenRectangle, minimumVerticalOverlap:6) // minimumVerticalOverlapプロパティを6ピクセルに設定します。 2つの文字が6ピクセルより多く(垂直に)重なり合う場合は、ReadCharacters()関数によりこれらは同じ行に存在するとみなされます。

例:

ReadCharacters(the RemoteScreenRectangle , maximumHorizontalOverlap:2) // maximumHorizontalOverlapプロパティを2ピクセルに設定し、2つの隣り合う文字の水平方向の位置が2ピクセルより多く重なり合う場合は、 ReadCharacters()関数によりこれらの文字は同じスペースを占領しているとみなされるようにします

例:

ReadCharacters(the RemoteScreenRectangle , maximumAdjacentGap: 3) // maximumAdjacentGapプロパティを設定し、2つの隣接する文字が3ピクセル超離れて存在する場合は、ReadCharacters()関数によりこれらが非隣接文字列とみなされるようにします

例:

ReadCharacters(the RemoteScreenRectangle , maximumSpaceGap:2) // maximumSpaceGapプロパティを2ピクセルに設定し、2つの文字が2ピクセルより近く存在する場合は、 ReadCharacters()関数によりこれらの文字がスペースで区切られているとみなされないようにします

例:

ReadCharacters(the RemoteScreenRectangle , spaceWidth:2) // spaceWidthプロパティを2ピクセルに設定します。 ReadCharacters関数はこの値を使用して、広い隙間を占領しているスペース数を判断します

関連:

詳細情報は、文字コレクションを扱うを参照してください。

 

This topic was last updated on 2月 01, 2019, at 11:13:23 午前.

Eggplant icon Eggplant.io | Documentation Home | User Forums | Support | Copyright © 2019 Eggplant