C# サンプルは、Windows 版 FRE でのみ使用できます。
checkmark と checkmark group) がサポートされています。チェックマークグループブロックは、複数のチェックマークブロックをまとめたものです。これらのブロックタイプには、BlockTypeEnum 列挙体でそれぞれ対応する定数 BT_Checkmark および BT_CheckmarkGroup が定義されています。CheckmarkBlock オブジェクトおよび CheckmarkGroup オブジェクトを使用すると、これらのタイプのブロックにアクセスできます。これらのオブジェクトを取得するには、Block オブジェクトの対応するメソッドを使用します。
単一のチェックマークだけでなく、チェックマークグループも認識できます。
1 つのチェックボックスは 1 つの CheckmarkBlock オブジェクトに対応します。チェックボックスの状態には、checked、not checked、corrected があります。これらは CheckmarkCheckStateEnum に対応しています。corrected のチェックマークとは、チェックボックス内に記入された後、ユーザーによって取り消されたチェックマークのことです。
画像上のチェックマークの検出
C# コード
C# コード
チェックマーク グループの認識
- チェックマークの種類を正しく設定すること。CMT_Circle 型と CMT_Square 型のチェックマークには黒い枠があるため、割合を計算する際にこれを考慮する必要があります。
- チェックマークの領域を正確に指定すること。黒の割合は領域全体に対して計算されるため、無関係な領域が含まれていると、推定精度が低下する可能性があります。
- チェックマーク グループを含む画像から FRDocument オブジェクトを作成します。たとえば、Engine オブジェクトの CreateFRDocumentFromImage メソッドを使用できます。
- ドキュメントのページ コレクション (IFRDocument::Pages) から、チェックマーク画像を含むページを取得します。これには FRPages コレクションのプロパティとメソッドを使用します。
- IFRPage::Layout プロパティを介して、このページに対応する Layout オブジェクトを取得します。
- 各チェックマーク グループについて:
- IEngine::CreateRegion メソッドを使用して Region オブジェクトを作成し、IRegion::AddRect メソッドを使用して Rectangle を追加します。
- チェックマーク グループ型の Block オブジェクトを作成し、ILayoutBlocks::AddNew メソッドを使用してレイアウト ブロックのコレクション (ILayout::Blocks) に追加します (入力パラメーターとして BT_CheckmarkGroup 定数と作成した Region オブジェクトを使用します。また、このメソッドでは 3 番目の入力パラメーターとしてレイアウト内のブロック インデックスも必要です) 。
- CheckmarkGroup オブジェクトを取得します (IBlock::GetAsCheckmarkGroup メソッドを使用します) 。
- グループ内の各チェックマークについて、次の操作を行います。
- IEngine::CreateRegion メソッドを使用して Region オブジェクト を作成し、IRegion::AddRect メソッドを使用して四角形を追加します。
- ICheckmarkGroup::AddNew メソッドを使用して、グループ内に新しいチェックマークブロックを作成します (作成した Region オブジェクト を入力パラメーターとして使用します) 。
- CheckmarkBlock オブジェクト を取得し (IBlock::GetAsCheckmarkBlock メソッドを使用) 、必要なパラメーター (CheckmarkType、IsCorrectionEnabled) を設定します。
- チェックマークグループに必要なパラメーター (MinimumCheckedInGroup、MaximumCheckedInGroup) を設定します。
- チェックマークを認識するには、IFRPage::Recognize、IFRPage::RecognizeBlocks、IFRDocument::Recognize、IFRDocument::RecognizePages など、認識を実行できる任意のメソッドを使用します。
C# コード
C# コード
1つのチェックマークを認識する
- チェックマークのある画像から FRDocument オブジェクトを作成します。たとえば、Engine オブジェクトの CreateFRDocumentFromImage メソッドを使用できます。
- ドキュメントのページコレクション (IFRDocument::Pages) から、チェックマークの画像を含むページを取得します。この操作には、FRPages コレクションのプロパティとメソッドを使用します。
- IFRPage::Layout プロパティを通じて、このページに対応する Layout オブジェクトを取得します。
- IEngine::CreateRegion メソッドを使用して Region オブジェクトを作成し、IRegion::AddRect メソッドを使用して矩形を追加します。
- チェックマーク型の Block オブジェクトを作成し、ILayoutBlocks::AddNew メソッドを使用してレイアウトブロックのコレクション (ILayout::Blocks) に追加します (入力パラメーターとして BT_Checkmark 定数と作成した Region オブジェクトを使用します) 。
- CheckmarkBlock オブジェクトを取得し (IBlock::GetAsCheckmarkBlock メソッドを使用) 、必要なパラメーター (CheckmarkType、IsCorrectionEnabled) を設定します。
- チェックマークを認識するには、IFRPage::Recognize、IFRPage::RecognizeBlocks、IFRDocument::Recognize、IFRDocument::RecognizePages など、利用可能な任意の認識メソッドを使用します。
C# コード
C# コード
カスタム型のチェックマークを認識する方法
- 認識したい型の、未チェックのチェックマークがいくつか含まれている画像を用意します。チェックマークを含む空のフォームの画像でもかまいません。
- この画像から FRDocument オブジェクトを作成します。たとえば、Engine オブジェクトの CreateFRDocumentFromImage メソッドを使用できます。
- 文書のページコレクション (IFRDocument::Pages) から、チェックマーク画像を含むページを取得します。これには、FRPages コレクションのプロパティとメソッドを使用します。
- IFRPage::Layout プロパティを使用して、このページに対応する Layout オブジェクトを取得します。
- ページ上の各チェックマークブロックについて、領域と型を指定します。
- IEngine::CreateRegion メソッドを使用して Region オブジェクトを作成し、IRegion::AddRect メソッドを使用してチェックマーク領域の矩形を追加します。
- チェックマーク型の Block オブジェクトを作成し、ILayoutBlocks::AddNew メソッドを使用して、レイアウトブロックのコレクション (ILayout::Blocks) に追加します (入力パラメーターとして BT_Checkmark 定数と、作成した Region オブジェクトを使用します) 。
- CheckmarkBlock オブジェクトを取得し (IBlock::GetAsCheckmarkBlock メソッドを使用) 、その CheckmarkType プロパティを CMT_Custom に設定します。
- FineReader Engine にこの種類のチェックマークを認識できるよう学習させます。FRPage オブジェクトの LearnCheckmarks メソッドを呼び出します。
- その結果、学習前に作成した CheckmarkBlock オブジェクトの TrainingData プロパティに、カスタムチェックマークの種類に関する情報が格納されます。この情報は、同じ種類のほかのチェックマークを認識する際に使用できます。CheckmarkTrainingData オブジェクトの SaveToMemory メソッド (Windows のみ) または SaveToFile メソッドを使用して、これをファイルまたはメモリに保存できます。
- この種類のチェックマークを含む画像から FRDocument オブジェクトを作成し、ページ上でチェックマークのブロックを指定して、チェックマークの種類を CMT_Custom に設定します。手順については、ステップ 2 ~ 5 を参照してください。
- 各 CheckmarkBlock オブジェクトの TrainingData プロパティを、学習時に取得した CheckmarkTrainingData オブジェクトで初期化します。たとえば、CopyFrom メソッドを使用してオブジェクトをコピーするか、CheckmarkTrainingData オブジェクトの LoadFromMemory メソッド (Windows のみ) または LoadFromFile メソッドを使用して、ファイルまたはメモリから読み込むことができます。
- FRDocument または FRPage オブジェクトの認識メソッドのいずれかを呼び出します。たとえば、IFRDocument::Recognize メソッドです。
- 認識結果に満足できない場合は、CheckmarkBlock オブジェクトの BlackThreshold プロパティと SuspiciousDistance プロパティを使用して、設定をさらに調整できます。学習後は、これらのプロパティの既定値が、多くのケースで機能すると想定される値に置き換えられます。チェックマークブロック用の CheckmarkTrainingData オブジェクトを読み込むと、これらのプロパティの値もあわせて読み込まれます。これらのプロパティ値を変更してチェックマークを再認識し (ステップ 10 を繰り返す) 、最適な構成が見つかったら、CheckmarkTrainingData オブジェクトを再度保存し、その新しいオブジェクトを使用してカスタム種類のチェックマークを認識できます。
