C# 示例仅适用于 Windows 版 FRE。
检测图像中的勾选标记
C# 代码
C# 代码
识别一组勾选标记
- 正确设置勾选标记类型,因为 CMT_Circle 和 CMT_Square 类型的勾选标记带有黑色边框,计算百分比时需要将其考虑在内;
- 准确指定勾选标记的区域,因为黑色像素的百分比是基于整个区域计算的,如果区域中包含无关部分,估算结果可能会变差。
- 从包含勾选标记组的图像创建一个 FRDocument 对象。例如,您可以使用 Engine 对象的 CreateFRDocumentFromImage 方法。
- 从文档的页面集合中获取包含勾选标记图像的页面 (IFRDocument::Pages) ——使用 FRPages 集合的属性和方法。
- 通过 IFRPage::Layout 属性,获取与该页面对应的 Layout 对象。
- 对于每个勾选标记组:
- 使用 IEngine::CreateRegion 方法创建一个 Region 对象,并使用 IRegion::AddRect 方法向其中添加矩形。
- 创建一个勾选标记组类型的 Block 对象,并使用 ILayoutBlocks::AddNew 方法将其添加到版面块集合 (ILayout::Blocks) 中 (使用 BT_CheckmarkGroup 常量和创建的 Region 对象作为输入参数。该方法还要求将版面中的块索引作为第三个输入参数) 。
- 获取 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# 代码
识别单个勾选标记
- 从包含勾选标记的图像创建一个 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 属性将包含有关自定义勾选标记类型的信息。这些信息现可用于识别其他同类型的勾选标记。您可以使用 SaveToMemory 方法 (仅限 Windows) 或 CheckmarkTrainingData 对象的 SaveToFile 方法将其保存到文件或内存中。
- 根据包含此类勾选标记的图像创建 FRDocument 对象,在页面上指定勾选标记块,并将勾选标记类型设置为 CMT_Custom。该过程见步骤 2 至 5。
- 使用训练期间获得的 CheckmarkTrainingData 对象初始化每个 CheckmarkBlock 对象的 TrainingData 属性。例如,您可以使用 CopyFrom 方法复制该对象,或者使用 CheckmarkTrainingData 对象的 LoadFromMemory 方法 (仅限 Windows) 或 LoadFromFile 方法从文件或内存中加载该对象。
- 调用 FRDocument 或 FRPage 对象的任一识别方法,例如 IFRDocument::Recognize 方法。
- 如果您对识别结果不满意,CheckmarkBlock 对象的 BlackThreshold 和 SuspiciousDistance 属性可用于进一步微调设置。训练后,这些属性的默认值会被替换为在大多数情况下预期有效的值。为勾选标记块加载 CheckmarkTrainingData 对象时,这些属性的值也会一并加载。您可以尝试更改这些属性的值并重新识别勾选标记 (重复步骤 10) ;找到最佳配置后,再次保存 CheckmarkTrainingData 对象,并使用新对象识别您的自定义类型勾选标记。
