メインコンテンツまでスキップ

テキスト読み取り関数

以下の情報は、Eggplant Functionalで光学文字認識(OCR)検索または文字検索のためのReadCharacters()関数を使用してテキスト認識を行うためのSenseTalkコマンドと関数について説明します。

ReadText関数

動作: 指定された画面矩形または指定された点付近のテキストを返します。

パラメーター: 読み取るべき画面領域を示すための必要な画像ペア、単一画像、矩形(座標ペア)、または点。 (画像のペアを使用すると、通常は最高の結果が得られます。)

ReadText関数は、テキスト検索結果の改善に役立つオプションのテキストプロパティリストも取ります。SenseTalkには、ReadText関数や他のOCR検索と一緒に使用できる多くのOCRプロパティが含まれています。OCRプロパティの完全なリストについては、テキストプロパティを参照してください。以下のプロパティは、通常、OCRエンジンがテキストを認識するのに最も役立ちます:

  • Contrast: SUTディスプレイがOCR分析の前に高コントラストの二色画像に変換されるかどうか。contrastがオンの場合、「コントラストカラー」と呼ばれる色(ContrastColorプロパティを使用して設定できます)がSUTディスプレイの主要色と見なされ、他のすべての色は二次色として扱われます。テキストはどちらの色でも見つけることができます。Contrastプロパティは、テキストの検索(検出)と読み取りの両方で使用可能です。
    • ContrastColor: Contrastがオンの場合、コントラストカラーはSUTディスプレイの主要色と見なされ、他のすべての色は二次色として扱われます。背景色を見つける方法については、背景色の決定を参照してください。
    • ContrastTolerance: Contrastがオンの場合、contrastToleranceは、ピクセルがコントラストカラーとして見えるために許容される最大のチャンネルあたりの色差を設定します。
  • ValidCharacters: validCharactersプロパティは、OCRテキストエンジンが見つけることができる文字を制限します。OCRが定義された領域に文字が存在すると判断し、それらの文字がvalidCharacters文字列に提供された文字と一致しない場合、"^"を返します。
  • ValidWords: OCRが一致と見なすことができる単語を制限することで、OCRエンジンを成功する一致に向ける、またはエンジンがテキスト文字列を正しく認識するように強制できます。このプロパティは、OCRテキストエンジンが見つけることができる単語を制限します。詳細については、OCRエンジンの辞書をカスタマイズするを参照してください。validWordsプロパティはLanguageプロパティをオーバーライドします。このオーバーライドは、validWordsプロパティの一部ではない単語は返されないことを意味します。
  • IgnoreSpaces: ignoreSpacesプロパティは、OCRテキスト検索によってテキスト文字列中のスペースが無視されるようにします。たとえば、文字列 "My Computer" は "MyComputer" または "M y C o m p u t e r" と一致します。ignoreSpaces プロパティはデフォルトでオンになっています。これは、OCRが意図しないスペースを時々読み取るため、特に離散的な単語ではない文字列や、通常とは異なる字間隔のテキストで顕著です。
  • IgnoreUnderscores: ignoreUnderscoresプロパティは、OCRテキスト検索が検索中にアンダースコアをスペースとして扱うようにします。例えば、文字列 "My_Computer" は "My_Computer" または "My Computer" と一致します。ignoreUnderscores プロパティはデフォルトでオンになっています。これは、OCRが時々アンダースコアを認識しないためです。
  • Enhance Local Contrast: OCRに送信されるテキスト画像のローカルコントラストを自動的に高めるようにOCRに指示する場合は、このプロパティを有効にします。このプロパティは、読み取られているテキストの一部または全部が比較的低コントラストである場合、例えば暗い背景上の青いテキストのような場合、認識を助ける可能性があります。コントラストがオンの時、このプロパティは効果がないので、Contrastがオフの時にのみ有用です。
  • Language: 探しているテキストの自然な言語。(サポートされている言語のリストは、OCR Language Supportを参照してください。)OCRはこれをガイドとして、使用している辞書に指定された単語を優先します。複数の言語を指定することができます。Eggplant Functionalはデフォルトで数多くの言語を搭載しており、追加の言語は購入可能です。言語が指定されていない場合でもOCRはテキストを読み取りますが、その結果を比較する辞書は持っていません。また、Custom OCR Dictionaryを作成することもできます。
  • ValidPattern: このプロパティは、正規表現の値を取り、指定したパターンと一致する文字または単語のみを返します。SenseTalkで使用できる正規表現文字については、Using Patterns in SenseTalkを参照してください。パターンを好むが必須としない場合、PreferredPatternを参照してください。

これらの一般的なテキストプロパティの使用についての詳細は、Using OCR Properties in Searchesを参照してください。

ReadText()で使用できるすべてのプロパティの完全なリストについては、Text Propertiesを参照してください。テキスト検索で最良の結果を得るためには、これらのプロパティを特定の環境で試してみることが必要かもしれません。

例:

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が画面から読み取るための正規表現を使用し、出力からすべての空白(タブやキャリッジリターンなど)を削除します。

例:

ラベルの左を読み取るために、このようなコードを使用します:

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

end repeat

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

例:

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を設定します。同じset of readTextSettingsを必要とする複数のreadTextまたはreadTable関数を実行する場合、readTextSettingsの使用が適切です
put [2,4,7] into Weeks // 興味がある行の識別子のリストを変数に格納します
put imageRectangle("WeekHeader") into WeekHeader // "WeekHeader"という名前の画像の矩形を格納します
put imageRectangle("ReadingAssignmentHeader") into ReadingHeader // "ReadingAssignmentHeader"という名前の画像の矩形を格納します
repeat with each Week of Weeks // Weeksの各行識別子について一度繰り返します
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 Reading is not empty then // readText関数の戻り値が空でないかどうかを確認します
Log Reading
else
Log "No chapter."
end if
end repeat
set the ReadTextSettings to RTS // ReadTextSettingsを元のプロパティリストに設定します

ReadTable 関数

振る舞い: テーブルのテキストをリストとして返します。返されるリストには、その行内で検出されたセルごとに1つの値を含む、値の行ごとに1つのサブリストが含まれます。行のサブリストには、同じ数の値が含まれるかもしれないし、含まれないかもしれません。

パラメータ: テキストを読みたい一つの長方形。OCRを使用してテキストを読み取る際に使用可能なOCRプロパティの任意の数を含むオプションのプロパティリスト。これらのプロパティの全リストについては、テキストプロパティを参照してください。

例:

Log ReadTable("TableUpperLeft","TableLowerRight")

練習:

readTable() Functionの下にあるクラススケジュールを使用して、次の例を練習してください。

ReadTable()とReadText()の例のための表イメージ

repeat 7 times // 読む行の数を示します

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()関数をキャプチャした文字コレクションと一緒に使用します。スクリプトにこの関数を使用して、文字コレクションから(与えられたスクリーン長方形内の)文字を文字列または複数行の文字列として返します。

パラメータ: スクリーンを読む領域を示す一対のイメージ、単一のイメージ、長方形、または点が必要です。一対のイメージを使用すると、通常最も良い結果が得られます。領域パラメータは追加のパラメータに続きます。これは、スクリーン上のテキストを読み取るために使用する文字コレクションの名前です。CurrentCharacterCollectionのグローバルプロパティを設定した場合、文字コレクションの名前を省略することができます。

  • asList: asListがオンのとき(asList:Yes)、ReadCharacters()関数は認識された文字のグループごとに一つの文字列を含むリストを返します。
  • characterPriority: この文字列には、高から低の順序で優先文字が含まれています。デフォルトの設定は";:."です。この設定は、同じ位置に2つの文字画像が見つかった場合にどの文字が認識されるかを制御します。たとえば、characterPriority:"OC"を使用すると、"O"文字画像が"C"文字画像よりも優先度が高くなります。その結果、ReadCharacters関数は、OとCの画像がスクリーン上の同じ位置に見つかった場合、文字"C"ではなく文字"O"を使用します。
  • minimumVerticalOverlap: この値は、2つの文字が同じ行にあると見なされる最小のオーバーラップ(ピクセル単位)を設定します。2つの文字がminimumVerticalOverlap値以上に重なると、関数はこれらの文字が同じ行にあると見なします。
  • maximumHorizontalOverlap: この値は、隣接する文字が同じスペースを占めていると見なされる最大のオーバーラップ(ピクセル単位)を設定します。2つの隣接する文字がこの設定以上に重なると、ReadCharacters関数はこれらの文字が同じスペースを占めていると見なします。
  • maximumAdjacentGap: この値は、2つの隣接する文字の間の最大のギャップ(ピクセル単位)を設定します。この設定は、文字の間にスペースがないことを前提としています。2つの隣接する文字がこの設定よりも遠くに位置する場合、ReadCharacters関数はこれらの文字を非隣接文字と見なします。
  • maximumSpaceGap: この値は、2つの文字の間に暗黙のスペースが存在する最大のギャップ(ピクセル単位)を設定します。2つの文字がこの設定よりも近くに位置する場合、ReadCharacters関数はこれらの文字がスペースで区切られているとは見なしません。
  • spaceWidth: この値は、スペース文字の名目幅(ピクセル単位)を設定します。ReadCharacters関数はこの設定を使用して、広いスペースのギャップに対して返されるスペースの数を決定します。

ここに記載されているプロパティに加えて、画像検索プロパティの任意のものを指定することができます。これらの特殊プロパティは、コレクション内のすべての文字画像の対応する検索プロパティを上書きします。例えば、tolerance:60を指定すると、ReadCharacters関数は各画像ごとに設定された個別のトレランスではなく、すべての文字画像を検索するときに60のトレランス値を使用します。詳細については、画像プロパティリストを参照してください。

Syntax:
ReadCharacters( rectangle {, options} )

例:

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

例:

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

例:

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関数はこの値を使用して、広いスペースの間隔を占めるスペースの数を決定します

関連:

詳細は、文字コレクションの使用を参照してください。