ブロック
FlexiLayoutブロックは、データをキャプチャする文書のフィールドに対応します。ブロックは、フィールドに含まれる可能性のあるデータの種類と、フィールドが見つかりそうな画像領域の座標を指定します。
ブロック枝はFlexiLayoutツリーででマークされます。
ABBYY FlexiLayout™ Studioでは以下のブロック種類がサポートされています:
- テキスト(アイコンでマーク)はテキストデータを抽出するために使用されます
テキストブロックの区域を拡張すると、認識の質が向上します。区域を拡張するには、ブロック要素をダブルクリックしてそのプロパティダイアログボックスを開き、ブロックで区域膨張プロパティの縦値および横値を指定します。 - バーコード(アイコンでマーク)はバーコードの読み取りに使用されます
- チェックマーク(アイコンでマーク)はチェックマークの認識に使用されます
- 画像(アイコンでマーク)は事前認識中にテキストとして識別されなかったオブジェクトを処理するために使用されます
- 表(アイコンでマーク)は表からデータを抽出するために使用されます
- グループ(アイコンでマーク)はブロックを論理的にグループ化するために使用されます
- チェックマークグループ(アイコンでマーク)はチェックマークグループを作成するために使用されます。チェックマークブロックしかこの種類のグループに追加できません。ここで他の種類のブロックを作成または移動することはできません。
- 繰り返しグループ(アイコンでマーク)はブロックの繰り返しグループを作成するために使用されます
- 非認識(アイコンでマーク)は領域を認識から除外するために使用されます
少なくとも1つのレイアウト代替で画像領域が指定されていないブロックでは、アイコンの右上に空の四角形があります:。1つのFlexiLayoutしか選択されていない場合(要素のショートカットメニューのレイアウトを選択項目を介して、FlexiLayoutセクションの同じ項目を介して、またはFlexiLayoutのショートカットメニューの代替レイアウトを選択項目を介して)、このFlexiLayoutでしか画像領域の確認が行われません。
注意:ブロックからのデータは、ABBYY FlexiCaptureなどのデータキャプチャアプリケーションで抽出されます。
ブロックプロパティ
- 名前- ブロック名。ブロック名には、文字(ローマ字、発音区別符号付きローマ字、キリル文字)、数字、アンダーバーが含まれます。ブロック名は文字またはアンダーバーで始める必要があります。ブロック名にはスペースや特殊記号を含められません。
- 種類- ブロックの種類(作成時に選択)。ブロックの種類は、ブロックで囲まれた領域にあるオブジェクトの種類に対応する必要があります。
- コメント- ユーザーのコメント(オプション)。
- 繰り返しインスタンスあり- ブロックがいくつかのインスタンスで構成されることを示します。例えば、繰り返しグループ要素のすべてのインスタンスがブロック区域として使用される場合に、このプロパティを選択します。
- インスタンスの並べ替え順- グループインスタンスをブロックにまとめる順序を設定します。繰り返しインスタンスありが選択されている場合にのみ、このプロパティは使用可能です。可能な値:
- 上から下- インスタンスは画像の位置に従って上から下へブロックに統合されます
- 左から右- インスタンスは画像の位置に従って左から右へブロックに統合されます
- 右から左- インスタンスは画像の位置に従って右から左へブロックに統合されます
- 発見順- インスタンスは仮説生成順序でブロックに統合されます。仮説は質の高い方から低い方へ生成されます。ユーザーがインスタンスで追加条件を指定した場合、仮説はユーザー定義の順序で生成されます。つまり、標準の順序とは異なる順序が必要な場合に、追加条件によって所望の順序を指定することができます。
以下のプロパティは、データを抽出する必要のある画像の領域を指定します。
- レイアウト用は検索領域が指定されたレイアウト代替を選択します。
- ソース要素- 画像のブロックを探すのに使用される要素の区域と同じ画像の領域を指定します。FlexiLayoutが画像に適用されると、要素で記述されたオブジェクトが検索されます。これがデータがキャプチャされるオブジェクトです。繰り返しグループでは、インスタンスの1つを選択することもできますし、すべてのインスタンスを使用することもできます(AllInstances)。詳細は繰り返しグループのインスタンスを参照、除外またはソース要素として使用をご覧ください。
- 表現- 画像でどの要素区域とも一致しない領域を設定します。例えば、要素の区域とそれらの間のスペースを1つのブロックに結合する、要素の区域を特定の値で拡張する、要素を頼らずにブロックの座標を指定することができます。この場合、ブロックの区域はFlexiLayout言語で記述することができます。
注意:ブロックの区域は連続しています。つまり、孤立している矩形から区域を作成すると、それらの間のスペースには、区域を連続にする追加的な細い矩形が入ります。
ですが、繰り返しグループのすべてのインスタンスが参照要素として使用される場合は、ブロックは複数の区域で構成されることがあります。グループブロックの区域は、仮説区域と同様、子ブロックの区域に基づいて算出されます。結果として生じる区域は、見やすいように若干拡張されています。
チェックマークグループとブロックの共通グループには、名前やコメント以外のパラメータはありません。
ブロックの繰り返しグループのパラメータは、非グループブロックのパラメータと同じです。繰り返しインスタンスありオプションは常に有効になっています。子ブロックには繰り返しインスタンスありオプションがあったりなかったりしますが、「出力インスタンス」変数は常に作成されます。ブロックの繰り返しグループ内のブロックにオプション繰り返しインスタンスありがある場合、親ブロックの各インスタンス内で繰り返し可能であることを意味します。
繰り返しグループのインスタンスによるブロック区域の指定
ブロックが複数のインスタンスを使用して定義されている場合、ブロック区域は別々の区域で構成されます。繰り返しグループの特定のインスタンス(LastFoundなど)を使用する場合、ブロック区域は他の要素と同様に定義されます。それでも、検出されたすべてのインスタンス(AllInstances)を使用できます。複数のインスタンスを使用するには、繰り返しインスタンスありオプションを選択します。
事前定義されたOutputInstances変数を使用して、ブロックのコードを書くこともできます。例:
OutputInstances = SearchElements.PageHeader.AllInstances.UnionRect;
ABBYY FlexiCaptureでは、以下の通り、有効な繰り返しインスタンスありオプションでブロックが処理されます:
- 表以外のブロックでは、指定されたインスタンスは対応するフィールドのインスタンスになります
- 表のブロックでは、指定されたインスタンスはフィールドの1つのインスタンスとして扱われます。つまり、ABBYY FlexiCaptureでは、このようなブロックが不連続区域のある種類表のフィールドとして処理されます。
ブロックの繰り返しグループの要素への参照作成規則
ブロックの繰り返しグループは繰り返し要素を参照しています。ブロックの繰り返しグループのインスタンスを作成するには、複数の要素インスタンスが必要です。そのため、IDの1つはAllInstancesでなければいけません。AllInstancesの要素の下にある要素には他のIDがないかもしれないので、この条件は一番下の繰り返し要素にAllInstancesがあることも意味します。
ブロックの繰り返しグループの子ブロックは、親ブロックが参照する要素の繰り返しグループの子要素を参照します。参照にはインスタンスで同じIDがなくてはいけません。
例:繰り返しグループブロックに以下の参照がある場合:SearchElements..RepGr1.Instance(1).RepGr2.AllInstances, エレメントRepGr1..RepGr2を参照する子ブロックです。要素に該当するのは次のものだけです::
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.Element.
HasRepeatingInstances属性がない場合は、その内部に繰り返しのない基本グループのサブ要素のみを参照することができ、反対に、HasRepeatingInstances属性がある場合は、基本グループ内部に繰り返しのある要素を参照できます(および一度にすべてのインスタンスを参照することだけできます)。
例:
HasRepeatingInstances属性あり
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.RepGr3.AllInstaces.Element
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.RepGr3.AllInstaces.RepGr4.AllInstances.Element
HasRepeatingInstances属性なし
SearchElements.RepGr1.Instance(1).RepGr2.AllInstancess.Gr3.SubElement(where Gr3 is a simple group)
SearchElements.RepGr1.Instance(1).RepGr2.AllInstances.SubElement
注意:参照がソース要素を介して作成された場合、確認はFlexiLayoutが構築された時に行われ、参照が高度コードを使用して作成された場合、エラーはFlexiLayoutを合致させる時に検出されます。
ブロックの位置の記述にFlexiLayout言語を使用
ブロックの区域を指定するには、表現フィールドを使用します。ブロックの種類によっておよび繰り返しインスタンスありオプションが選択されているかによって、以下の事前定義変数の1つが使用されます:OutputRegion (種類のRegion), OutputTable (種類のTableHypothesis), とOutputInstances (種類のHypothesisInstancesまたは種類のTableHypothesisInstances).表現フィールドで使用可能な事前定義変数の詳細は、事前定義変数をご覧ください。
要素の区域を取得および幅3mm、長さ5mm拡張 | OutputRegion = SomeElement.Rect; OutputRegion.Inflate( 3*mm, 5*mm ); |
2つの要素の区域矩形を結合し、結合された矩形に外接する矩形を取得 | Rect outputRect; outputRect = Element1.Rect Or Element2.Rect; OutputRegion = outputRect; |
2つの要素の区域に外接する矩形を1つの区域に結合 | RectArray outputRects; outputRects = RectArray( Element1.Rect ); outputRects.Add: Element2.Rect; OutputRegion = Region( outputRects ); |
2つの異なる要素に対応するオブジェクトの区域を1つの区域に結合 | RectArray outputRects; outputRects = Element1.Rects; outputRects.Add( Element2.Rects ); OutputRegion = outputRects.Region; |
Element1の区域に属するオブジェクトの区域を結合してElement2の区域に属するオブジェクトの区域を削除 | OutputRegion = FormRegion( Element1.Rects, Element2.Rects ); |
表要素を使用して表ブロックを指定 | OutputTable = SearchElements.TableElement; |
特定の要素に仮説のインスタンスを使用して表ブロックを指定 | OutputInstances = SearchElements.RepeatingGroup.AllInstances.TemplateElement; |
事前定義IsNull変数を使用して、ブロックの区域を記述することもできます。この変数は、FlexiLayoutを合致させる時にブロックの区域が見つかったか示します。値偽とは区域が見つかったことを意味し、値真は区域が見つからなかったことを意味します。
IsNull変数は値偽で初期化されます。つまり、ブロックの区域は見つかったと見なされます。ですが、結論を出す前に特定の条件を確認したいと思うかもしれません。
Using the IsNull変数
12.04.2024 18:16:07