Chinese Simplified (简体中文)

识别复选标记

ABBYY FineReader Engine 12 支持两种复选标记块类型:复选标记和复选标记组。复选标记组块是一个复选标记块的集合。这些块类型在 BlockTypeEnum 枚举中有相应的常数 BT_Checkmark 和 BT_CheckmarkGroup。CheckmarkBlockCheckmarkGroup 对象可提供对这些类型的块的访问。若要接收这些对象,您应该使用 Block 对象的相应方法。

重要事项!如要识别复选标记,您必须有支持 OMR 模块的 ABBYY FineReader Engine 许可证。

您可以识别单个复选标记和复选标记组。

一个复选框对应一个 CheckmarkBlock 对象。复选框可呈现状态:已勾选、未勾选、已纠正。这些状态对应 CheckmarkCheckStateEnum。已纠正的复选标记是在复选框中被用户划去的复选标记。

对于某复选标记组,您可以分别指定组中所勾选复选框的最小和最大数量(MinimumCheckedInGroupMaximumCheckedInGroup)。这些值可以通过 CheckmarkGroup 对象进行设置,并且会用于识别过程。

一个复选标记组内所有复选标记的 IsCorrectionEnabledCheckmarkType 属性值必须相同。

复选标记状态是根据区域中的黑色像素百分比来计算的。未勾选复选标记的该值最小,已勾选复选标记较大,已纠正复选标记最大。因此,若要得到合适的识别效果,做到以下几点至关重要:

  • 正确设置复选标记类型,因为 CMT_Circle 和 CMT_Square 类型的复选标记有一个黑框,需要在计算百分比时考虑到这一点;
  • 指定复选标记的确切区域,因为黑色百分比计算将涵盖整个区域,如果区域中包括一些不相关区域,估算质量将下降。

识别复选标记组

  1. 使用含复选标记组的图像创建 FRDocument 对象。例如,您可以使用 Engine 对象的 CreateFRDocumentFromImage 方法。
  2. 从文档页面集合获取带有复选标记图像的页面(IFRDocument::Pages)— 使用 FRPages 集合的属性和方法。
  3. 通过 IFRPage::Layout 属性获取与该页面相应的 Layout 对象。
  4. 对于每个复选标记组:
    1. 通过 IEngine::CreateRegion 方法创建 Region 对象,然后通过 IRegion::AddRect 方法向其添加矩形。
    2. 创建一个复选标记组类型的 Block 对象,将其添加到布局块集合 (ILayout::Blocks)中,通过 ILayoutBlocks::AddNew 方法(使用 BT_CheckmarkGroup 常数和创建的 Region 对象作为输入参数。该方法也要求将布局中的块索引作为第三个输入参数)。
    3. 获取 CheckmarkGroup 对象(通过 IBlock::GetAsCheckmarkGroup 方法)。

重要事项!若要获得正确的识别结果,正确设置复选标记的类型和区域至关重要。

  1. 对于组中的每个复选标记:
    1. 通过 IEngine::CreateRegion 方法创建 Region 对象,然后通过 IRegion::AddRect 方法向其添加矩形。
    2. 通过 ICheckmarkGroup::AddNew 方法在组中创建一个新的复选标记块 (使用创建的 Region 对象作为输入参数)。
    3. 获取 CheckmarkBlock 对象(通过 IBlock::GetAsCheckmarkBlock 方法)然后设置所需参数(CheckmarkType, IsCorrectionEnabled)。
  2. 设置必要的复选标记组参数(MinimumCheckedInGroupMaximumCheckedInGroup)。
  3. 若要识别复选标记,请使用可执行识别的任何可用方法,比如 IFRPage::RecognizeIFRPage::RecognizeBlocksIFRDocument::RecognizeIFRDocument::RecognizePages 等等。

C# 代码

识别单个复选标记

  1. 使用含复选标记的图像创建 FRDocument 对象。例如,您可以使用 Engine 对象的 CreateFRDocumentFromImage 方法。
  2. 从文档页面集合获取带有复选标记图像的页面(IFRDocument::Pages)— 使用 FRPages 集合的属性和方法。
  3. 通过 IFRPage::Layout 属性获取与该页面相应的 Layout 对象。
  4. 通过 IEngine::CreateRegion 方法创建 Region 对象,然后通过 IRegion::AddRect 方法向其添加矩形。
  5. 创建一个复选标记类型的 Block 对象,将其添加到布局块集合 (ILayout::Blocks)中,通过 ILayoutBlocks::AddNew 方法(使用 BT_Checkmark 常数和创建的 Region 对象作为输入参数)。
  6. 接收CheckmarkBlock 对象(通过 IBlock::GetAsCheckmarkBlock 方法)然后设置所需参数(CheckmarkType, IsCorrectionEnabled)。

重要事项!若要获得正确的识别结果,正确设置复选标记的类型和区域至关重要。

  1. 若要识别复选标记,请使用任何可用的识别方法,诸如 IFRPage::Recognize, IFRPage::RecognizeBlocks, IFRDocument::Recognize, IFRDocument::RecognizePages 等等。

C# 代码

识别自定义类型的复选标记

FineReader Engine 可识别标准形式的复选标记:正方形复选标记,空白背景下的复选标记,圆形复选标记(请参见 CheckmarkTypeEnum 常数)。如 CheckmarkTypeEnum 枚举常数说明所述,还有一个可以识别的复选标记类型:CMT_Custom。它用于非标准类型的复选标记。如果要识别的图像包含非标准类型的复选标记,您可以训练 FineReader Engine 识别这种类型的复选标记。

要识别非标准类型的复选标记:

  1. 找一个含有一些您想要识别的类型的未勾选复选标记的图像。它可以是一个包含复选标记的空白表单的图像。
  2. 从这个图像创建一个 FRDocument 对象。例如,您可以使用 Engine 对象的 CreateFRDocumentFromImage 方法。
  3. 从文档页面集合获取带有复选标记图像的页面(IFRDocument::Pages)— 使用 FRPages 集合的属性和方法。
  4. 通过 IFRPage::Layout 属性获取与该页面相应的 Layout 对象。
  5. 指定页面上每个复选标记块的区域和类型:
    1. 使用 IEngine::CreateRegion 方法创建 Region 对象,然后使用 IRegion::AddRect 方法向其添加复选标记区域的矩形。
    2. 创建一个复选标记类型的 Block 对象,将其添加到布局块集合 (ILayout::Blocks)中,使用 ILayoutBlocks::AddNew 方法(使用 BT_Checkmark 常数和创建的 Region 对象作为输入参数)。
    3. 获取 CheckmarkBlock 对象(使用 IBlock::GetAsCheckmarkBlock 方法),然后将其 CheckmarkType 属性设为 CMT_Custom。

重要事项!若要获得正确的识别结果,正确设置复选标记的类型和区域至关重要。

  1. 训练 FineReader Engine 识别这种类型的复选标记:调用 FRPage 对象的 LearnCheckmarks 方法。
  2. 因此,您在训练前创建的 CheckmarkBlock 对象的 TrainingData 属性将包含自定义复选标记类型的信息。该信息可用来识别同一类型的其它复选标记。您可以使用 CheckmarkTrainingData 对象的 SaveToFile SaveToMemory 方法将其保存到文件或内存。
  3. 从包含该类型的复选标记的图像创建 FRDocument 对象,指定页面上的复选标记块,将复选标记类型设为 CMT_Custom。过程描述请见第二到第五步。
  4. 用训练期间获得的 CheckmarkTrainingData 对象初始化每个 CheckmarkBlock 对象的 TrainingData 的属性。例如,您可以使用 CopyFrom 方法复制对象,或使用 CheckmarkTrainingData 对象的 LoadFromFileLoadFromMemory 方法从文件或内存加载它。
  5. 调用 FRDocumentFRPage 对象的任何识别方法,例如 IFRDocument::Recognize 方法。
  6. 如果对识别结果不满意,您可以使用 CheckmarkBlock 对象的 BlackThresholdSuspiciousDistance 属性进一步调整设置。训练后,这些属性的默认值会被某些值所替代,这些值是大多数情况下预计有效的值。当您加载某个复选标记块的 CheckmarkTrainingData 对象时,这些属性的值也会加载。您可以尝试更改这些属性的值然后重新识别复选标记(重复第10步),当找到最佳配置后,再次保存 CheckmarkTrainingData 对象,然后使用新对象识别自定义类型的复选标记。

另请参阅

CheckmarkBlock

CheckmarkGroup

处理布局和块

24.03.2023 8:51:52

Usage of Cookies. In order to optimize the website functionality and improve your online experience ABBYY uses cookies. You agree to the usage of cookies when you continue using this site. Further details can be found in our Privacy Notice.