質の高い/低い認識の後の日付検索
質の低い画像で日付フィールドを探すFlexiLayoutsの、一般的な作成方法です。このような画像はかなり一般的で、異なるスキャン異常の主な原因は、間違ったスキャン設定です。例えば、明るさの設定が正しくないと、画像が明るすぎたり暗すぎたりします。結果として、画像の一部情報が失われたり、画像の一部にノイズが出たりします。
FlexiLayout Studioには、日付の検出に使用する特別な日付要素があります。ただし、FlexiLayoutを作成する時、この要素が不十分だと感じるかもしれません。これは、文書の日付が日付要素の形式と合致しない時に起こったりします。例えば、FlexiLayout Studioでは、英語、チェコ語、デンマーク語、オランダ語、エストニア語、フィンランド語、フランス語、ドイツ語、ギリシャ語、ハンガリー語、イタリア語、ラトビア語、リトアニア語、ノルウェー語、ポーランド語、ポルトガル語、ロシア語、スペイン語、スウェーデン語、 トルコ語が、日付フィールドでの月の指定に使用されます。そのため、月を指定された言語以外の言語で単語として記載した場合、その日付は使用可能な形式に一致しないため、日付要素で日付を検出することはできません。
画像に削除できない要素がある場合でも、日付検索エラーが発生します。例えば、日付に下線があって日付と下線の間に目に見える隙間がない、取り消されている、または文字セルにおいて黒色の区切り(枠、クシ形)で書かれている、です。日付の検索に日付要素を使用できない原因には、検索領域の斑点、または日付がタイピングではなく手書きされていること、があります。
日付フィールドの検索を組織化する最適な方法は、サンプルプロジェクトSearchOfDate.fspに記載されています(フォルダ%public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Date)。
プロジェクトには5ページあります:
- ページ1 - 日付形式は日付要素で記述可能;
- ページ2 - 日付の月はフランス語で記載;
- ページ3 - 日付に下線;
- ページ4 - 日付フィールドに多くのノイズ;
- ページ5 - 日付が手書き。
日付形式が種類日付の要素でサポートされていない画像を含め、すべての画像で日付を探してみましょう。
日付フィールドを記述するすべての要素は、DateGroup要素に結合されます。まず、このグループには日付フィールドの名前を探す要素があります。プロジェクトでは、これは種類静的テキストの要素で、名前はDateHeader、唯一の値は「Date:」です。
注意:関係セクションのすべての要素で検索制限を設定することは簡単なので、ここでは触れません。プロジェクトで調べることができます。
次に、名前DateFieldの種類日付の要素を作成します。この要素は、日付要素でサポートされる形式の日付フィールドを検索します。
プロジェクトの通り、日付要素は最初のページでしか日付を検出できません。
他のページの日付を検索するには、種類文字列の要素が作成されます。プロジェクトでは、この要素はDateAsStringと名付けられています。画像で発生しそうなすべての文字は、アルファベットによってこの要素で表現されます。
注意:データフィールドのコンテンツを構造化可能で、日付要素でサポートされていない形式の場合、アルファベットを指定する代わりに、正規表現でこの形式を記述することをおすすめします。ただし、正規表現はフィールドと記述された構造の100%一致を前提としているため、処理された画像の質が高いことを確認する必要があります(一方で、アルファベットは一定割合のエラーを許容し、 要素のプロパティで指定されています)。よって、アルファベットは、認識の正確さが保証されない場合に、より柔軟なツールです。日付の月が事前認識言語と同じ言語の単語として書かれていることがわかっている場合は、日付フィールドを3つのセクション(日、月、年)に分割すること、種類静的テキストの要素を使用して個別に月のフィールドを検索することをおすすめします。このような静的テキスト要素は、月の可能なすべてのバリエーションを記述する必要があります(所定の言語の完全な月の名前および略語名など)。そうなると、日フィールドと年フィールドは、種類文字列の要素で月の左右に求められます。
FlexiLayoutの合致を最適化するため、以下の条件がDateAsString要素の高度な検索前関係フィールドに入力されます:
if (DateField.IsNull == FALSE) then Dontfind();
これは以下と同じです:
if not DateField.IsNull then Dontfind();
この条件の意味は、日付要素を使用しても日付を検出できない場合に限り、文字列としての日付検索が始まることを意味します。
プロジェクトの通り、要素DateAsStringは、種類日付の要素で検出できなかったプロジェクトの残りのページの日付を探します。
ただ、ページ4では、検出文字列にはデータフィールドの一部しか含まれていません。日付フィールドの事前認識結果を見ると(ツールバーの生オブジェクトを表示をクリックして)、部分的な検出の理由が明らかになります: 検索領域にはテキストオブジェクトだけでなく、他の種類のオブジェクトも含まれます:画像および句読点。このような状況は質の低い画像では典型的であり、テキストオブジェクトは必ずしも事前認識中に認識されるわけではありません。
日付フィールドに関連付けられたオブジェクトすべてを検索するには、種類オブジェクト収集の要素を作成して名前をDateAsObjectCollectionと付けます。事前認識中に日付フィールドで検出されたすべてのオブジェクト種類は、要素のプロパティで指定されます。FlexiLayoutの合致を最適化するため、以下の条件がDateAsObjectCollectionおよびDateAsString要素の高度な検索前関係フィールドに入力されます:
if (DateField.IsNull == FALSE) then Dontfind();
注意:条件if (DateAsString.IsNull == FALSE) then Dontfind() はDateAsObjectCollection要素の高度プロパティには追加できません。例から明らかなように、検出された文字列に日付の一部しか含まれない状況があるためです。
この段階で、日付フィールドの検索制限を記述する要素の作成が完了したと見なされることもあります。 DateField、DateAsString、DateAsObjectCollection要素からなるグループ要素SearchElements.DateGroup.AlternativeDateGroupは、プロジェクトツリーで、日付ブロックのソース要素として指定されます。Dontfind()方法がDateAsStringおよびDateAsObjectCollection要素のプロパティの記述で使用されたため、検出ブロックの実際の区域は日付要素の仮説で発見された区域か、DateAsObjectCollectionとDateAsString要素の組み合わせ区域に合致します。後者では、DateAsString要素の区域がDateAsObjectCollection要素の区域の一部と予期されるため、結果として生じる区域はDateAsObjectCollection要素の区域になります。
注意:この場合、グループ要素SearchElements.DateGroup.AlternativeDateGroupをソース要素として指定できます。状況が比較的シンプルであるためです。グループの区域は、検出されたサブ要素の区域の組み合わせです。Dontfind()方法により、サブ要素の一部の検索をスキップできます。従って、グループ要素SearchElements.DateGroup.AlternativeDateGroupの区域はサブ要素の区域に合致します。例では、Dontfind()方法はFlexiLayout合致の最適化に役立ち、またブロックの記述をシンプルにします。
または、表現セクションで指定されたコードを使うことができます。
Rect OutputRect;
let dateGroup = SearchElements.DateGroup.AlternativeDateGroup;
if (dateGroup.DateField.IsNull == FALSE) then
outputRect = dateGroup.DateField.Rect;
else
outputRect = dateGroup.DateAsObjectCollection.Rect;
OutputRegion = outputRect;
表現の使用は、追加のオプションになります。例えば、DateAsString要素の区域が本当にDateAsObjectCollectionの区域の一部かを確認することができます。
注意:例の通り、日付フィールドを検索するために文字列形式を定義せずに文字列要素を使用すること、種類オブジェクト収集の要素を使用することは、日付フィールドの検索領域を明確に定義できる場合に、良い結果につながります。ですが、検索領域に複数の文字列がある場合、文字列形式は正規表現またはより狭いアルファベットで記述する必要があります。さもないと、最終的な仮説は満足するものになりません。種類文字列の要素を使用して、文字列の文字数、語尾数、スペースの長さを制限し間違った仮説を除外することができます。種類オブジェクト収集の要素が使用される場合、仮説には検索領域内に位置し、オブジェクトサイズの制限を満たす画像のすべてのオブジェクトが含まれます。
12.04.2024 18:16:07