跳转到主要内容
ABBYY FineReader Engine 中的文档处理包括多个步骤:页面预处理、分析、识别、页面合成、文档合成和导出。本节介绍页面预处理、分析、识别以及页面/文档合成。有关导出参数的详细信息,请参见 调整导出参数 下面按顺序介绍各个处理阶段:
  1. 页面预处理
    在此阶段,FineReader Engine 会自动改进图像质量,并校正可能干扰 OCR 的缺陷,例如页面方向、反相图像和几何畸变。
  2. 版面分析
    在分析过程中,FineReader Engine 会查找包含不同类型数据的区域。这些区域称为“块”。
  3. 识别
    位于块内的图像部分会根据块类型,以不同方式进行识别。
  4. 页面合成
    系统会检测文本和背景颜色、超链接以及其他格式信息。
  5. 文档合成
    最后,会重建字体样式和文档逻辑结构:FineReader Engine 会检测已识别文档中的标题、重建目录、检测图片和表格的题注,以及文档结构中的其他元素。
处理前,您可以借助参数对象设置页面预处理、分析、识别和合成的参数。用于访问所有处理参数的主要对象是 DocumentProcessingParams 对象。它包含一组会影响不同处理阶段的子对象。 根据处理阶段的不同,可以将指向 DocumentProcessingParams 对象的指针或其子对象的指针作为输入参数传递给处理方法,从而影响处理结果。FRDocumentFRPage 对象提供页面预处理、分析、识别和合成方法。 页面预处理、分析、识别和合成过程也可以通过配置文件进行调整,而且大多数常见场景都已由经过充分测试的预定义配置文件覆盖。详情请参见使用配置文件

页面处理

要设置每个页面的处理参数,请使用 DocumentProcessingParams 对象中 PageProcessingParams 子对象的属性。PageProcessingParams 对象是一组用于配置页面处理参数的对象的父对象: PageProcessingParams 对象还允许您开启或关闭任意处理阶段。例如,如果您打算手动指定块且不需要版面分析,则可以将 PageProcessingParams 对象的 PerformAnalysis 属性设置为 FALSE。

文档处理

要设置文档处理参数,除页面处理参数外,还需要通过 SynthesisParamsForDocument 对象设置文档合成参数。在文档合成过程中,系统会检测字体样式和格式。FineReader Engine 中与文档字体和样式相关的对象,只有在完成文档合成后才有实际意义。 在以下情况下,您可以省略文档合成阶段:
  • 如果您要将识别出的文本导出为 TXT 格式。导出为该格式时,不会使用合成信息。
  • 如果您要将文档导出为 PDF ImageOnly 格式。在此模式下,不会使用识别出的文本和版面信息。
在其他所有情况下,都必须执行文档合成。省略文档合成会在导出时导致错误。
名称中包含“Process”一词的方法 (例如 IFRDocument::Process) 包含文档合成阶段。FRPage 对象的处理方法不包含该阶段,因此在使用这些方法后、导出前,你必须显式调用某个执行文档合成的方法。
您可以加快文档合成阶段并减少内存占用。如果您在页面合成期间将 SynthesisParamsForPage 对象的 DetectFontFormattingAtPageLevel 属性设置为 TRUE,则随后可以在文档合成期间关闭字体参数和文档结构检测 (即 SynthesisParamsForDocument 对象的 DetectFontFormatting 和 DetectDocumentStructure) 。不过,这样做可能会降低质量。 每当文档的文本或版面发生更改时 (例如删除或添加了块,或编辑了文本) ,我们建议您重新调用文档合成方法。请注意,FRDocument 的 SynthesizePages 方法允许您指定文档中已更改的页面集合,因此只会重新计算必要的数据。

调整文档处理

使用上述参数对象的分步过程如下所示:
  1. 借助 Engine 对象的 CreateDocumentProcessingParams 方法,创建一个 DocumentProcessingParams 对象。
  2. 设置 PageProcessingParams 子对象中必要的属性。您无需设置所有子对象的全部属性,因为它们在创建时都会使用合理的默认值进行初始化。您只需调整那些希望采用非默认值的属性。
设置供版面分析函数使用的参数时,不要忘记为 PageProcessingParams 中会影响识别的子对象属性设置正确的值。建议这样做,因为所有这些参数都会复制到版面分析期间创建的块中,并随后用于识别;此外,图像某些部分的分析也可能涉及识别。
  1. 如有必要,设置 SynthesisParamsForDocument 子对象中必要的属性。您无需设置所有对象和子对象的全部属性,因为它们在创建时都会使用合理的默认值进行初始化。您只需调整那些希望采用非默认值的属性。请检查 DocumentProcessingParams 对象的 PerformSynthesis 属性值是否为 true。
  2. 您可以将 DocumentProcessingParams 对象或其一组子对象传递给 FRDocumentFRPageEngine 对象的某个处理方法。
要识别文档,我们建议使用 FRDocument 对象的处理方法。该对象提供了一整套处理方法。只需调用一个方法即可完成预处理、分析、识别和合成的最便捷方法是 Process 方法。它还能以最高效的方式利用多处理器和多核系统的并行处理能力。不过,您也可以调用相应的方法,依次执行预处理、分析、识别和合成。
FREngine.IEngine engine;
FREngine.IFRDocument frdoc;
// 我们假定文档已经创建,并且图像已添加到文档中
// 创建 DocumentProcessingParams 并设置参数
FREngine.IDocumentProcessingParams dpp = engine.CreateDocumentProcessingParams();
FREngine.IPageProcessingParams ppp = dpp.PageProcessingParams;
ppp.PagePreprocessingParams.CorrectOrientationMode = COM_Auto;
// 使用这些参数进行处理
frDoc.Process( dpp );
以下代码示例中使用了类似的过程:

另请参阅

使用配置文件 识别条码 调整导出参数