メインコンテンツへスキップ
FlexiLayout のブロックは、データを抽出する必要があるドキュメント上の field に対応します。ブロックでは、その field に含まれる可能性があるデータの種類と、その field が見つかる可能性が高い画像Regionの座標を指定します。 ブロックのブランチは、FlexiLayout ツリー内で で示されます。 ABBYY FlexiLayout™ Studio では、次のブロック型がサポートされています。
  • Text ( アイコンで表示) は、テキストデータの抽出に使用します テキストブロックのRegionを拡張すると、認識精度が向上する場合があります。Regionを拡張するには、Blocks 要素をダブルクリックしてそのプロパティダイアログを開き、Blocks result region inflate プロパティの垂直方向と水平方向の値を指定します。
  • Barcode ( アイコンで表示) は、バーコードの読み取りに使用します
  • Checkmark ( アイコンで表示) は、チェックマークの認識に使用します
  • Picture ( アイコンで表示) は、事前認識でテキストとして識別されなかったオブジェクトの処理に使用します
  • Table ( アイコンで表示) は、テーブルからのデータ抽出に使用します
  • Group ( アイコンで表示) は、ブロックを論理的にグループ化するために使用します
  • Checkmark Group ( アイコンで表示) は、チェックマークグループの作成に使用します。この種類のグループに追加できるのはチェックマークブロックだけで、他の型のブロックをここで作成したり移動したりすることはできません。
  • Repeating Group ( アイコンで表示) は、ブロックの繰り返しグループを作成するために使用します
  • Non-Recognized ( アイコンで表示) は、Regionを認識対象から除外するために使用します
少なくとも 1 つの代替レイアウトで画像Regionが指定されていないブロックでは、アイコンの右上隅に空の四角が表示されます: 。1 つの FlexiLayout だけが選択されている場合 (要素のショートカットメニューの Select Layout アイテム、FlexiLayout セクション内の同じアイテム、または FlexiLayout のショートカットメニューの Select Alternative Layout アイテムから選択) 、プログラムはこの FlexiLayout についてのみ画像Regionを確認します。
ブロックのデータは、ABBYY FlexiCapture などのデータ抽出アプリケーションで抽出されます。

ブロックのプロパティ

  • Name - ブロックの名前です。ブロック名には、文字 (ローマ字、ダイアクリティカルマーク付きローマ字、キリル文字) 、数字、アンダースコアを使用できます。ブロック名は、文字またはアンダースコアで始める必要があります。空白や特殊記号を含めることはできません。
  • Type - ブロックの型です (作成時に選択) 。ブロックの型は、ブロックで囲まれたRegion内にあるオブジェクトの型に対応している必要があります。
  • Comment - ユーザーが指定するコメントです (任意) 。
  • Has repeating instances - ブロックが複数のインスタンスで構成されることを示します。たとえば、繰り返しグループ要素のすべてのインスタンスをブロック領域として使用する場合は、このプロパティを選択します。
  • Instance sort order - グループインスタンスをどの順序で結合して1つのブロックにするかを設定します。このプロパティは、Has repeating instances が選択されている場合にのみ使用できます。指定できる値は次のとおりです。
    • Top to bottom - インスタンスは、画像上の位置に従って上から下の順にブロックへ結合されます
    • Left to right - インスタンスは、画像上の位置に従って左から右の順にブロックへ結合されます
    • Right to left - インスタンスは、画像上の位置に従って右から左の順にブロックへ結合されます
    • In order of finding - インスタンスは、仮説が生成された順にブロックへ結合されます。仮説は、品質の高い順に生成されます。ユーザーがインスタンスに追加条件を指定した場合、仮説はユーザー定義の順序で生成されます。したがって、プログラムで使用される標準の順序とは異なる順序が必要な場合は、追加条件を使用して希望する順序を指定できます。
以下のプロパティは、データを抽出する画像上のRegionを指定します。
  • For Layout は、検索Regionを指定する代替レイアウトを選択します。
  • Source element - ブロックを画像上で見つけるために使用する要素のRegionと同一の、画像上のRegionを指定します。FlexiLayout を画像に適用すると、プログラムはその要素で記述されたオブジェクトを検索します。データはそれらのオブジェクトから抽出されます。繰り返しグループの場合は、いずれか1つのインスタンスを選択することも、すべてのインスタンス (AllInstances) を使用することもできます。詳細については、Using instances of a Repeating Group as reference, excluded or source elementsを参照してください。
  • Expression - どの要素のRegionとも一致しない画像上のRegionを設定します。たとえば、複数の要素のRegionとその間の空間を1つのブロックに結合したり、要素のRegionを一定値だけ拡張したり、どの要素にも依存せずにブロックの座標を指定したりできます。この場合、ブロックのRegionは FlexiLayout language で記述できます。
ブロックのRegionは連続しています。つまり、離れて配置された矩形からRegionを作成すると、その間の空間は細い追加の矩形で埋められ、Regionが連続するようになります。
ただし、繰り返しグループのすべてのインスタンスを参照要素として使用する場合、ブロックは複数のRegionで構成されることがあります。グループブロックのRegionは、仮説のRegionと同様に、子ブロックのRegionに基づいて計算されます。見やすくするため、結果のRegionはわずかに拡張されます。 チェックマークグループと通常のブロックグループには、名前とコメント以外のパラメーターはありません。 ブロックの繰り返しグループのパラメーターは、グループではないブロックのパラメーターと同じです。Has repeating instances オプションは常に有効です。子ブロックでは Has repeating instances オプションの有無を選択できますが、常に “Output instances” 変数が作成されます。ブロックの繰り返しグループ内のブロックで Has repeating instances オプションが指定されている場合、これはそのブロックが親ブロックの各インスタンス内で繰り返されることを意味します。

繰り返しグループのインスタンスを使用してブロックRegionを指定する

ブロックが複数のインスタンスを使って定義されている場合、ブロックRegionは複数の独立したRegionで構成されます。繰り返しグループの特定のインスタンス (例: LastFound) を使用する場合、ブロックRegionは他の要素と同様に定義されます。ただし、検出されたすべてのインスタンス (AllInstances) を使用することもできます。複数のインスタンスを使用するには、Has repeating instances オプションを選択します。 また、事前定義された OutputInstances 変数を使用して、ブロック用のコードを記述することもできます。例:
OutputInstances = SearchElements.PageHeader.AllInstances.UnionRect;
ABBYY FlexiCapture は、Has repeating instances オプションが有効になっているブロックを次のように処理します。
  • テーブル以外のブロックでは、指定されたインスタンスは対応する Field のインスタンスになります
  • テーブルブロックでは、指定されたインスタンスは Field の 1 つのインスタンスとして扱われます。つまり、ABBYY FlexiCapture はこのようなブロックを、不連続な Region を持つ Table 型の Field として処理します。

ブロックの繰り返しグループに対する要素参照を作成する際のルール

ブロックの繰り返しグループは、繰り返し要素を参照します。ブロックの繰り返しグループのインスタンスを作成するには、少なくとも複数の要素インスタンスが必要です。そのため、いずれか 1 つの Id は AllInstances である必要があります。また、AllInstances を持つ要素の下にある要素は別の Id を持てないため、この条件は最下位の繰り返し要素が AllInstances を持つことも意味します。 ブロックの繰り返しグループの子ブロックは、親ブロックが参照している要素の繰り返しグループの子要素を参照します。参照では、インスタンスに対して同じ Id を使用する必要があります。 : 繰り返しグループブロックが次の参照を持つ場合: SearchElements..RepGr1.Instance(1).RepGr2.AllInstances、子ブロックが要素 RepGr1..RepGr2.Element を参照できるのは、次の場合のみです。 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
参照を Source 要素経由で作成した場合、チェックは FlexiLayout の構築時に実行されます。参照を Advanced code を使用して作成した場合、エラーは FlexiLayout のマッチング時に検出されます。

FlexiLayout language を使用してブロックの位置を記述する

ブロックの Region を指定するには、Expression field を使用します。ブロックの型と、そのブロックで Has repeating instances オプションが選択されているかどうかに応じて、次のいずれかの事前定義変数を使用します: OutputRegion (型 Region) 、OutputTable (型 TableHypothesis) 、OutputInstances (型 HypothesisInstances または TableHypothesisInstances) 。Expression field で使用できる事前定義変数の詳細については、事前定義変数を参照してください。
要素の Region を取得し、幅を 3mm、長さを 5mm 拡張するOutputRegion = SomeElement.Rect; OutputRegion.Inflate( 3mm, 5mm );
2 つの要素の Region の矩形を結合し、その結合結果を外接する矩形を取得するRect outputRect; outputRect = Element1.Rect Or Element2.Rect; OutputRegion = outputRect;
2 つの要素の Region を外接する矩形を 1 つの Region に結合するRectArray outputRects; outputRects = RectArray( Element1.Rect ); outputRects.Add: Element2.Rect; OutputRegion = Region( outputRects );
2 つの異なる要素に対応する object の Region を 1 つの Region に結合するRectArray outputRects; outputRects = Element1.Rects; outputRects.Add( Element2.Rects ); OutputRegion = outputRects.Region;
Element1 の Region に属する object の Region を結合し、Element2 の Region に属する object の Region を削除するOutputRegion = FormRegion( Element1.Rects, Element2.Rects );
Table 要素を使用して Table ブロックを指定するOutputTable = SearchElements.TableElement;
特定の要素の仮説のインスタンスを使用して Table ブロックを指定するOutputInstances = SearchElements.RepeatingGroup.AllInstances.TemplateElement;
ブロックの Region を記述するために、事前定義された IsNull 変数を使用することもできます。この変数は、FlexiLayout のマッチング時にブロックの Region が見つかったかどうかを示します。値 false は Region が見つかったことを、値 true は Region が見つからなかったことを意味します。 IsNull 変数は値 false で初期化されます。つまり、ブロックの Region は見つかったものと見なされます。ただし、場合によっては、判定を下す前に特定の条件を確認したいことがあります。
  1. ソース要素の Region の幅が 50 ドットを超える場合に、ブロックの Region が見つかったと見なさないようプログラムに指示するには、Region Expression field に次のコードを入力します。 if Element1.Width < 50dt then IsNull = true;
  2. Element1 のブロックの Region が見つかったかどうかをそのまま反映させるには、Region Expression field に次のコードを入力します。 IsNull = Element1.IsNull
  3. Element1 と Element2 を使用してブロックを検索する必要があるとします。いずれか 1 つでも要素が見つからない場合、そのブロックは見つからなかったものと見なされます。 Rect outputRect; Let FieldLeft = Element1.Rect.Left; Let FieldRight = Element2.Rect.Right; Let FieldTop = Element1.Rect.Top; Let FieldBottom = Element2.Rect.Bottom; outputRect = Rect( FieldLeft, FieldTop, FieldRight, FieldBottom); if ((Element1.IsNull == True) or (Element2.IsNull == True) ) then {IsNull = true;} OutputRegion = outputRect;
注。 このコードが正しく機能するのは、Element1 の search area が Element2 の search area の上かつ左にある場合に限られます。上記の例では、簡単にするためこの条件の確認は省略しています。実際のコードでは、この確認が必要であり、FieldLeft、FieldRight、FieldTop、FieldBottom 変数の値も調整しなければなりません。そうしないと、Rect 関数を呼び出したときにエラーが返されます。