質問
表: Table の使い方を教えてください。
回答
表: Table の使い方
表: Table は名前の通り、テーブル、表形式の印刷要素をOCR 取得する際に使用します。複数ページに渡って続く表でも、読み取ることが可能*です。
*詳しくは下のリンクからご入手できるサンプルプロジェクトをご覧ください。
基本的な設定方法
FlexiLayout Studio においての表の設定のおおまかな流れは
- 読み取りたい表の形式を知る
- Blocks に 表: Table を追加する
- 読み取りたい表に合わせ、列数と列名、種類を設定する
- 1で作成した表に対応する表を 検索要素: Search Elements に追加
- 1で作成したBlocks の表と検索要素の表を紐づける
- 必要であれば、表の列の設定を行う
- 必要であれば、行の取り方を設定する
- 必要であれば、表のフッター(終了位置)を設定する
- 意図した通りに、行、列を取得しているかを確認する
1. 読み取りたい表の形式を知る
本記事のサンプル帳票では、表は、6列有り、列名は、SKU、PRIMARY UPC, SKU 製品名、注文数(ETA)、単価、金額 となっています。
複数ページに渡って続く表
また、複数ページに渡って同じ形式で、続いていることが確認できます。
このような表を読み取るには、まず、文書の ヘッダーとフッター の設定が必要です*。
*詳しくは こちら の記事をご覧ください。
FlexiLayout Studio:ヘッダー・フッター(Header/Footer)の使い方。複数ページの文書を定義したい。
2. Blocksに表: Table を追加する
Blocksに表: Table を追加します。Blocks は読み取った結果を格納する受け皿、器です。それに対して、検索要素: Search Elements は文字通り、検索要素で、検索結果が、Blocks に格納され、最終的にFlexiCapture で読み取ります。
3. 読み取りたい表に合わせ、列数と列名、種類を設定する
読み取りたい表の列の数だけ、列を追加します。
列の要素の「種類」を指定します。多くの場合、「テキスト」を使用します。
*列の名前には英語名のみが使用できます。列の名前は 検索要素の「名前」であり、プログラム言語であれば変数名ですので、英語を使用します。列名の文字列などは別途指定できます*。後述。
4. 1で作成した表に対応する表を 検索要素: Search Elements に追加
検索要素: Search Elements は名前の通り、印刷画像上で検索する要素を指定します。画像上に「表」を探す、ということです。
5. 1で作成したBlocks の表と検索要素の表を紐づける
検索要素: Search Elements の 表: Table のプロパティ の「列」の「表ブロック」の[選択]ボタンから、Blocks にある作成した 表: Table を指定します。
検索要素: Search Elements の 表: Table と 設定しますと、Blocks にある 表: Table に設定した列が 検索要素: Search Elements 側に反映されます。これで、検索結果を格納する Blocks と 検索要素、両者が紐づけられました。
6. 必要であれば、表の列の設定を行う
主に使うのは次の2つです。
名前のキーワードで検出
ここに記述した文字列で列をさがします。
発見要素を列名として使用
検索要素: Search Elements の 要素: Element を設定できます。要素は 静的テキスト: Static Text 以外にも区域: Region など様々な種類のものが設定できます*。
*この性質を利用して、 静的テキスト: Static Text では、列が上手く取得できない場合に、他の要素を使うと、列を高い確率で、意図する形で取得するように出来ます。特におすすめの要素は、区域: Region です。詳しくは こちら の記事をご覧ください。
7. 必要であれば、行の取り方を設定する
主に使用する設定は次の2つです。
行を自動的に検出する
文字通り、FlexiLayout のAIで、列、行間隔、罫線などから自動的に行を判断させ、取得します。これで上手く行が取得できる場合もあります。
設定された行検出にマスター列を使用
「マスター列」とは、取得したい行単位で、列に値が展開されている列です。
表をもう一度眺めてみると、少なくとも、「SKU 製品名」の列をマスター列とした場合、下図のように、文字列の行単位で、表の行が区切られてしまいますので、このような列は「マスター列」ではありません。
他の Price など、各行単位で、要素が1行ずつ存在する行が「マスター列」として、適切です。「マスター列」は複数列設定する事が可能で、複数にした方が、 FlexiLayout が行を探す手がかりが複数になるので、意図する行を探し易い場合があります。逆に数が少ない方が良い場合もあります。
8. 必要であれば、表のフッター (終了位置) を設定する
表の展開がどこで終了するのかを必要であれば、設定します。表: Table のフッターと呼びます。
大きくは2つの方法があります。
キーワードで検索
文字通り、キーワードで表の終わりのすぐ下にある文字列を指定します。最も簡単な設定ですが、発見要素、つまり、検索要素: Search Element を使用した場合と異なり、読み間違いの割合などが指定できない為、印刷品質の良い帳票で、表の終わる位置に確実に誤読しないキーワードがある必要があります。
発見要素をフッターとして使用
検索要素: Search Elements の 要素: Element を設定できます。要素は 静的テキスト: Static Text 以外にも区域: Region、白ギャップ: WhiteGap、区切り線: Separator など様々な種類のものが設定できます。こちらの方がより実用的な設定と言えるでしょう。
フッターは各ページにあります
チェックしておくと、複数ページに渡って表が展開されており、各ページ毎に表のヘッダ、つまり列名の行がある場合、これを検索し、ある程度*読み飛ばしてくれます。
*上手くいかない場合もあります。その場合、他に検索除外の設定を行ったり、Repeating Group: 繰り返しグループ で表を読み取ることを検討する必要があるかもしれません。Repeating Group: 繰り返しグループ での方法について、詳しくは こちら をご覧ください。
Repeating Group の基本的な使い方: 表をRepeating Group: 繰り返しグループを使って読み取る。
9. 意図した通りに、行、列を取得しているかを確認する
設定が終わりましたら、一致: Match させて、意図した通りに表が取得できるかを確認しましょう。
注意
- 表: Table は基本的に四角い格子状、 碁盤の目のような形式の表にのみ使用可能です*。
- 途中に大き目の空白行があると、表: Table では、どのように設定しても読み取れない場合があります*。
- 他、表: Table でどう設定しても上手く列と表が意図通りに取得できない場合があります*。
*複雑な表の OCR 読み取りには Repeating Group: 繰り返しグループを使用します。
Repeating Group の基本的な使い方: 表をRepeating Group: 繰り返しグループを使って読み取る。
本記事には、上のサンプル帳票 を元に 表: Table を実際に使用したサンプルプロジェクトが添付されています。
詳しくは下のリンクからご入手できるサンプルプロジェクトをご覧ください。
*ご覧になるには、バージョン12.0.2.3118以上のFlexiCaptureが必要です。
追加情報
- Table: 表の列を分割して読み取りたい
- Repeating Group の基本的な使い方: 表をRepeating Group: 繰り返しグループを使って読み取る。
- FlexiLayout Studio: 白ギャップ: WhiteGap+繰り返しグループ: RepeatingGroup + Table: 表 の使い方:基本:空白・空欄・空間・空きスペース を スキップ・読み飛ばす
- Table: 表の列の値に Table: 表 以外のフィールド値をコピーしたい - FlexiCapture 12
- 画像上にある表を読み取った Table: 表, Repeating Group: 繰り返しグループ の行数、列数、内容を変更した表を別途検証時に表示したい。また、エクスポートしたい。
- RepeatingGroup: 繰り返しグループ - 格子状の形でない一定の繰り返しパターンがある表を読みたい。
- Table: 表 または Repeating Group: 繰り返し グループ の 要素(行、列)にスクリプトでアクセスしたい。
- Table: 表 の行の読み取りが途中で途切れてしまう。テーブルの末尾まで読み取れない。行を読み飛ばす。
コメント
0件のコメント
サインインしてコメントを残してください。