> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# チェックマークの認識

> BT_Checkmark / BT_CheckmarkGroup ブロック型と OMR ライセンスモジュールを使用して、ABBYY FineReader Engine で単一のチェックマークおよびチェックマークグループを認識します。

<Note>
  C# サンプルは、Windows 版 FRE でのみ使用できます。
</Note>

ABBYY FineReader Engine 12 では、チェックマーク用に 2 種類のブロックタイプ (`checkmark` と `checkmark group`) がサポートされています。チェックマークグループブロックは、複数のチェックマークブロックをまとめたものです。これらのブロックタイプには、[BlockTypeEnum](/ja/fine-reader/engine/api-reference/enumerations/blocktypeenum) 列挙体でそれぞれ対応する定数 BT\_Checkmark および BT\_CheckmarkGroup が定義されています。[CheckmarkBlock](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock) オブジェクトおよび [CheckmarkGroup](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup) オブジェクトを使用すると、これらのタイプのブロックにアクセスできます。これらのオブジェクトを取得するには、[Block](/ja/fine-reader/engine/api-reference/layout-related-objects/block) オブジェクトの対応するメソッドを使用します。

<Warning>
  チェックマークを認識するには、[OMR](/ja/fine-reader/engine/licensing/modules#omr) モジュールに対応した ABBYY FineReader Engine ライセンスが必要です。
</Warning>

単一のチェックマークだけでなく、チェックマークグループも認識できます。

1 つのチェックボックスは 1 つの CheckmarkBlock オブジェクトに対応します。チェックボックスの状態には、checked、not checked、corrected があります。これらは [CheckmarkCheckStateEnum](/ja/fine-reader/engine/api-reference/enumerations/checkmarkcheckstateenum) に対応しています。corrected のチェックマークとは、チェックボックス内に記入された後、ユーザーによって取り消されたチェックマークのことです。

<div id="detecting-checkmarks-on-the-image">
  ## 画像上のチェックマークの検出
</div>

チェックマークは、レイアウト解析中に画像上で検出できます。チェックマークの検出を有効にするには、[IPageAnalysisParams::DetectCheckmarks](/ja/fine-reader/engine/api-reference/parameter-objects/preprocessing-analysis-recognition-and-synthesis-parameters/pageanalysisparams#detectcheckmarks) プロパティを TRUE に設定します。

解析が完了すると、レイアウトには画像上で見つかったチェックマークごとに [CheckmarkBlock](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock) オブジェクトが含まれます。これらが [CheckmarkGroup](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup) にグループ化されることはありません。チェックマークの種類は自動的に検出されます。

認識を実行するメソッド (たとえば [IFRDocument::Recognize](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument/recognize-method)) を呼び出した後、または一括処理用のメソッド (たとえば [IFRDocument::Process](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument/process-method)) を使用した場合は、チェックマーク認識の結果が設定されます。

<Accordion title="C# コード">
  ```csharp theme={null}
  FREngine.IEngine engine;
  FREngine.IFRDocument frdoc;
  // ドキュメントはすでに作成されており、画像が追加されているものとします
  // DocumentProcessingParams を作成してパラメーターを設定します
  FREngine.IDocumentProcessingParams dpp = engine.CreateDocumentProcessingParams();
  FREngine.IPageProcessingParams ppp = dpp.PageProcessingParams;
  ppp.PageAnalysisParams.DetectCheckmarks = true;
  // 処理にこれらのパラメーターを使用します
  frDoc.Process( dpp );
  ```
</Accordion>

自動チェックマーク検出の結果に満足できない場合や、チェックマークグループまたはカスタムのチェックマークを認識する必要がある場合は、チェックマーク領域を手動で指定します。以下のセクションでは、さまざまなシナリオについて説明します。

* [チェックマークグループを認識する](/ja/fine-reader/engine/guided-tour/advanced-techniques/recognizing-checkmarks#group)
* [単一のチェックマークを認識する](/ja/fine-reader/engine/guided-tour/advanced-techniques/recognizing-checkmarks#single)
* [カスタムタイプのチェックマークを認識するように学習させる](/ja/fine-reader/engine/guided-tour/advanced-techniques/recognizing-checkmarks#custom)

<div id="recognizing-a-group-of-checkmarks">
  ## チェックマーク グループの認識
</div>

チェックマーク グループでは、グループ内でチェックされるチェックボックスの最小数と最大数を指定できます (それぞれ [MinimumCheckedInGroup](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup#minimumcheckedingroup) と [MaximumCheckedInGroup](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup#maximumcheckedingroup)) 。これらの値は CheckmarkGroup オブジェクトで設定でき、認識時に使用されます。

チェックマーク グループ内のすべてのチェックマークでは、[IsCorrectionEnabled](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock#iscorrectionenabled) プロパティと [CheckmarkType](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock#checkmarktype) プロパティの値が同じでなければなりません。

チェックマークの状態は、領域内に占める黒いピクセルの割合に基づいて判定されます。この割合は、未チェックのチェックマークで最も小さく、チェック済みのチェックマークではそれより大きく、修正済みのチェックマークで最も大きくなります。したがって、正しい認識結果を得るには、次の点が重要です。

* チェックマークの種類を正しく設定すること。CMT\_Circle 型と CMT\_Square 型のチェックマークには黒い枠があるため、割合を計算する際にこれを考慮する必要があります。
* チェックマークの領域を正確に指定すること。黒の割合は領域全体に対して計算されるため、無関係な領域が含まれていると、推定精度が低下する可能性があります。

チェックマーク グループを認識するには、次の手順を実行します。

1. チェックマーク グループを含む画像から [FRDocument](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument) オブジェクトを作成します。たとえば、[Engine](/ja/fine-reader/engine/api-reference/engine-object-iengine-interface) オブジェクトの [CreateFRDocumentFromImage](/ja/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createfrdocumentfromimage-method) メソッドを使用できます。

2. ドキュメントのページ コレクション ([IFRDocument::Pages](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument#pages)) から、チェックマーク画像を含むページを取得します。これには [FRPages](/ja/fine-reader/engine/api-reference/document-related-objects/frpages) コレクションのプロパティとメソッドを使用します。

3. [IFRPage::Layout](/ja/fine-reader/engine/api-reference/document-related-objects/frpage#layout) プロパティを介して、このページに対応する [Layout](/ja/fine-reader/engine/api-reference/layout-related-objects/layout) オブジェクトを取得します。

4. 各チェックマーク グループについて:

5. [IEngine::CreateRegion](/ja/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods) メソッドを使用して [Region](/ja/fine-reader/engine/api-reference/supplementary-objects-and-methods/region) オブジェクトを作成し、[IRegion::AddRect](/ja/fine-reader/engine/api-reference/supplementary-objects-and-methods/region/addrect-method) メソッドを使用して Rectangle を追加します。

6. チェックマーク グループ型の [Block](/ja/fine-reader/engine/api-reference/layout-related-objects/block) オブジェクトを作成し、[ILayoutBlocks::AddNew](/ja/fine-reader/engine/api-reference/layout-related-objects/layoutblocks/addnew-method) メソッドを使用してレイアウト ブロックのコレクション (ILayout::Blocks) に追加します (入力パラメーターとして BT\_CheckmarkGroup 定数と作成した Region オブジェクトを使用します。また、このメソッドでは 3 番目の入力パラメーターとしてレイアウト内のブロック インデックスも必要です) 。

7. CheckmarkGroup オブジェクトを取得します ([IBlock::GetAsCheckmarkGroup](/ja/fine-reader/engine/api-reference/layout-related-objects/block/getascheckmarkgroup-method) メソッドを使用します) 。

<Warning>
  正しい認識結果を得るには、チェックマークの種類と領域を正しく設定することが重要です。
</Warning>

5. グループ内の各チェックマークについて、次の操作を行います。

6. IEngine::CreateRegion メソッドを使用して Region オブジェクト を作成し、IRegion::AddRect メソッドを使用して四角形を追加します。

7. [ICheckmarkGroup::AddNew](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup/addnew-method) メソッドを使用して、グループ内に新しいチェックマークブロックを作成します (作成した Region オブジェクト を入力パラメーターとして使用します) 。

8. CheckmarkBlock オブジェクト を取得し ([IBlock::GetAsCheckmarkBlock](/ja/fine-reader/engine/api-reference/layout-related-objects/block/getascheckmarkblock-method) メソッドを使用) 、必要なパラメーター (CheckmarkType、IsCorrectionEnabled) を設定します。

9. チェックマークグループに必要なパラメーター (MinimumCheckedInGroup、MaximumCheckedInGroup) を設定します。

10. チェックマークを認識するには、[IFRPage::Recognize](/ja/fine-reader/engine/api-reference/document-related-objects/frpage/recognize-method)、[IFRPage::RecognizeBlocks](/ja/fine-reader/engine/api-reference/document-related-objects/frpage/recognizeblocks-method)、[IFRDocument::Recognize](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument/recognize-method)、[IFRDocument::RecognizePages](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument/recognizepages-method) など、認識を実行できる任意のメソッドを使用します。

<Accordion title="C# コード">
  ```csharp theme={null}
  ...
  // Layout オブジェクト を取得
  FREngine.IFRDocument document = Engine.CreateFRDocumentFromImage("D:\\Sample.tiff", null);
  FREngine.ILayout layout = document.Pages[0].Layout;
  // ブロック領域を設定
  FREngine.IRegion region = Engine.CreateRegion();
  region.AddRect(0, 0, 100, 50);
  // チェックマークグループ型のブロックを作成し、コレクションの末尾にレイアウトへ追加
  FREngine.IBlock block = layout.Blocks.AddNew(FREngine.BlockTypeEnum.BT_CheckmarkGroup, region, layout.Blocks.Count);
  FREngine.ICheckmarkGroup checkmarkGroup = block.GetAsCheckmarkGroup();
  // チェックマーク型のブロックを作成して、
  // チェックマークグループに追加
  for (int i = 0; i < 5; i++)
  {
    FREngine.IRegion checkmarkRegion = Engine.CreateRegion();
    checkmarkRegion.AddRect(10, 10 + i * 20, 90, 10 + (i + 1) * 20);
    FREngine.ICheckmarkBlock checkmark = checkmarkGroup.AddNew(0, checkmarkRegion);
  }
  ...
  ```
</Accordion>

<div id="recognizing-a-single-checkmark">
  ## 1つのチェックマークを認識する
</div>

1. チェックマークのある画像から [FRDocument](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument) オブジェクトを作成します。たとえば、[Engine](/ja/fine-reader/engine/api-reference/engine-object-iengine-interface) オブジェクトの [CreateFRDocumentFromImage](/ja/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createfrdocumentfromimage-method) メソッドを使用できます。
2. ドキュメントのページコレクション ([IFRDocument::Pages](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument#pages)) から、チェックマークの画像を含むページを取得します。この操作には、[FRPages](/ja/fine-reader/engine/api-reference/document-related-objects/frpages) コレクションのプロパティとメソッドを使用します。
3. [IFRPage::Layout](/ja/fine-reader/engine/api-reference/document-related-objects/frpage#layout) プロパティを通じて、このページに対応する [Layout](/ja/fine-reader/engine/api-reference/layout-related-objects/layout) オブジェクトを取得します。
4. [IEngine::CreateRegion](/ja/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods) メソッドを使用して [Region](/ja/fine-reader/engine/api-reference/supplementary-objects-and-methods/region) オブジェクトを作成し、[IRegion::AddRect](/ja/fine-reader/engine/api-reference/supplementary-objects-and-methods/region/addrect-method) メソッドを使用して矩形を追加します。
5. チェックマーク型の [Block](/ja/fine-reader/engine/api-reference/layout-related-objects/block) オブジェクトを作成し、[ILayoutBlocks::AddNew](/ja/fine-reader/engine/api-reference/layout-related-objects/layoutblocks/addnew-method) メソッドを使用してレイアウトブロックのコレクション (ILayout::Blocks) に追加します (入力パラメーターとして BT\_Checkmark 定数と作成した Region オブジェクトを使用します) 。
6. CheckmarkBlock オブジェクトを取得し ([IBlock::GetAsCheckmarkBlock](/ja/fine-reader/engine/api-reference/layout-related-objects/block/getascheckmarkblock-method) メソッドを使用) 、必要なパラメーター (CheckmarkType、IsCorrectionEnabled) を設定します。

<Warning>
  正しい認識結果を得るには、チェックマークの種類と領域を正しく設定することが重要です。
</Warning>

7. チェックマークを認識するには、[IFRPage::Recognize](/ja/fine-reader/engine/api-reference/document-related-objects/frpage/recognize-method)、[IFRPage::RecognizeBlocks](/ja/fine-reader/engine/api-reference/document-related-objects/frpage/recognizeblocks-method)、[IFRDocument::Recognize](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument/recognize-method)、[IFRDocument::RecognizePages](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument/recognizepages-method) など、利用可能な任意の認識メソッドを使用します。

<Accordion title="C# コード">
  ```csharp theme={null}
  ...
  // Layout オブジェクトを取得
  FREngine.IFRDocument document = Engine.CreateFRDocumentFromImage("D:\\Sample.tiff", null);
  FREngine.ILayout layout = document.Pages[0].Layout;
  // ブロックの領域を設定
  FREngine.IRegion region = Engine.CreateRegion();
  region.AddRect(0, 0, 100, 50);
  // チェックマーク型のブロックを作成し、コレクションの末尾にレイアウトへ追加
  FREngine.IBlock block = layout.Blocks.AddNew(FREngine.BlockTypeEnum.BT_Checkmark, region, layout.Blocks.Count);
  FREngine.ICheckmarkBlock checkmark = block.GetAsCheckmarkBlock();
  ...
  ```
</Accordion>

<div id="learning-to-recognize-checkmarks-of-custom-type">
  ## カスタム型のチェックマークを認識する方法
</div>

ABBYY FineReader Engine では、標準的な形式のチェックマーク (四角内のチェックマーク、空白の背景上のチェックマーク、円内のチェックマーク) を認識できます ([CheckmarkTypeEnum](/ja/fine-reader/engine/api-reference/enumerations/checkmarktypeenum) 定数を参照) 。[CheckmarkTypeEnum](/ja/fine-reader/engine/api-reference/enumerations/checkmarktypeenum) 列挙定数の説明にあるとおり、認識可能なチェックマーク型はもう 1 つあり、それが CMT\_Custom です。これは非標準型のチェックマーク用です。認識対象の画像に非標準型のチェックマークが含まれている場合は、FineReader Engine にこの種類のチェックマークを認識するよう学習させることができます。

非標準型のチェックマークを認識するには:

1. 認識したい型の、未チェックのチェックマークがいくつか含まれている画像を用意します。チェックマークを含む空のフォームの画像でもかまいません。

2. この画像から [FRDocument](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument) オブジェクトを作成します。たとえば、[Engine](/ja/fine-reader/engine/api-reference/engine-object-iengine-interface) オブジェクトの [CreateFRDocumentFromImage](/ja/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createfrdocumentfromimage-method) メソッドを使用できます。

3. 文書のページコレクション ([IFRDocument::Pages](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument#pages)) から、チェックマーク画像を含むページを取得します。これには、[FRPages](/ja/fine-reader/engine/api-reference/document-related-objects/frpages) コレクションのプロパティとメソッドを使用します。

4. [IFRPage::Layout](/ja/fine-reader/engine/api-reference/document-related-objects/frpage#layout) プロパティを使用して、このページに対応する [Layout](/ja/fine-reader/engine/api-reference/layout-related-objects/layout) オブジェクトを取得します。

5. ページ上の各チェックマークブロックについて、領域と型を指定します。

6. [IEngine::CreateRegion](/ja/fine-reader/engine/api-reference/engine-object-iengine-interface/creation-methods/createlessobjectgreater-methods) メソッドを使用して [Region](/ja/fine-reader/engine/api-reference/supplementary-objects-and-methods/region) オブジェクトを作成し、[IRegion::AddRect](/ja/fine-reader/engine/api-reference/supplementary-objects-and-methods/region/addrect-method) メソッドを使用してチェックマーク領域の矩形を追加します。

7. チェックマーク型の [Block](/ja/fine-reader/engine/api-reference/layout-related-objects/block) オブジェクトを作成し、[ILayoutBlocks::AddNew](/ja/fine-reader/engine/api-reference/layout-related-objects/layoutblocks/addnew-method) メソッドを使用して、レイアウトブロックのコレクション (ILayout::Blocks) に追加します (入力パラメーターとして BT\_Checkmark 定数と、作成した Region オブジェクトを使用します) 。

8. CheckmarkBlock オブジェクトを取得し ([IBlock::GetAsCheckmarkBlock](/ja/fine-reader/engine/api-reference/layout-related-objects/block/getascheckmarkblock-method) メソッドを使用) 、その [CheckmarkType](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock#checkmarktype) プロパティを CMT\_Custom に設定します。

<Warning>
  正しい認識結果を得るには、チェックマークの型と領域を正しく設定することが重要です。
</Warning>

6. FineReader Engine にこの種類のチェックマークを認識できるよう学習させます。FRPage オブジェクトの [LearnCheckmarks](/ja/fine-reader/engine/api-reference/document-related-objects/frpage/learncheckmarks-method) メソッドを呼び出します。
7. その結果、学習前に作成した CheckmarkBlock オブジェクトの [TrainingData](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock#trainingdata) プロパティに、カスタムチェックマークの種類に関する情報が格納されます。この情報は、同じ種類のほかのチェックマークを認識する際に使用できます。[CheckmarkTrainingData](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarktrainingdata) オブジェクトの [SaveToMemory](/ja/fine-reader/engine/api-reference/supplementary-objects-and-methods/savetomemory-method) メソッド (Windows のみ) または [SaveToFile](/ja/fine-reader/engine/api-reference/supplementary-objects-and-methods/savetofile-method) メソッドを使用して、これをファイルまたはメモリに保存できます。
8. この種類のチェックマークを含む画像から FRDocument オブジェクトを作成し、ページ上でチェックマークのブロックを指定して、チェックマークの種類を CMT\_Custom に設定します。手順については、ステップ 2 ～ 5 を参照してください。
9. 各 CheckmarkBlock オブジェクトの TrainingData プロパティを、学習時に取得した CheckmarkTrainingData オブジェクトで初期化します。たとえば、[CopyFrom](/ja/fine-reader/engine/visual-components-reference/supplementary-objects/spellwordcollection/copyfrom-method) メソッドを使用してオブジェクトをコピーするか、CheckmarkTrainingData オブジェクトの [LoadFromMemory](/ja/fine-reader/engine/api-reference/supplementary-objects-and-methods/loadfrommemory-method) メソッド (Windows のみ) または [LoadFromFile](/ja/fine-reader/engine/api-reference/supplementary-objects-and-methods/loadfromfile-method) メソッドを使用して、ファイルまたはメモリから読み込むことができます。
10. FRDocument または FRPage オブジェクトの認識メソッドのいずれかを呼び出します。たとえば、[IFRDocument::Recognize](/ja/fine-reader/engine/api-reference/document-related-objects/frdocument/recognize-method) メソッドです。
11. 認識結果に満足できない場合は、CheckmarkBlock オブジェクトの [BlackThreshold](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock#blackthreshold) プロパティと [SuspiciousDistance](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock#suspiciousdistance) プロパティを使用して、設定をさらに調整できます。学習後は、これらのプロパティの既定値が、多くのケースで機能すると想定される値に置き換えられます。チェックマークブロック用の CheckmarkTrainingData オブジェクトを読み込むと、これらのプロパティの値もあわせて読み込まれます。これらのプロパティ値を変更してチェックマークを再認識し (ステップ 10 を繰り返す) 、最適な構成が見つかったら、CheckmarkTrainingData オブジェクトを再度保存し、その新しいオブジェクトを使用してカスタム種類のチェックマークを認識できます。

<div id="see-also">
  ## 関連項目
</div>

[CheckmarkBlock](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkblock)

[CheckmarkGroup](/ja/fine-reader/engine/api-reference/layout-related-objects/checkmarkgroup)

[レイアウトとブロックの操作](/ja/fine-reader/engine/guided-tour/advanced-techniques/working-with-layout-and-blocks)
