使用 ABBYY FineReader Engine 进行平行处理
如需处理大量文档,那么就处理能力而言 OCR 会要求很高。这就需要使用多 CPU 系统来提高处理速度。ABBYY FineReader Engine 可提供多种方式方便您使用硬件配置的多重处理功能。
本节概述了可能的使用场景,就如何为任务选择特定的多重处理模式给出了建议以及测试统计数据。本节中也提供了代码示例链接,内含多重处理实例。
若要使用多重处理,您需要设置
Engine 对象的 MultiProcessingParams 属性设置为合适的值。
ABBYY FineReader Engine 支持两种不同对象,均可对单个Engine 实例进行多重处理。它们是 FRDocument 对象(请参见使用 FRDocument 对象进行处理)和 BatchProcessor 对象(请参见使用 Batch Processor 进行处理)。
重要事项!请注意,平行处理比依序处理需要更多 RAM 内存。对于一台工作站而言,一般是 350 MB *(内核数量)+ 450MB RAM,如果处理的文档为阿拉伯语或者 CJK 语言 则为850 MB * (内核数量)+ 750MB RAM。
使用场景
我们默认您正在处理大量文档。但我们也必须考虑到您所需要的结果,并为此选择实现任务的最佳方案。要考虑的不同场景如下:
- 转换多个含有大量页面的文档。这通常指处理书籍、长篇报告等等。在此情况下,您可以对文档页面进行平行识别,然后在主进程中将其合成,再平行导出。使用 Engine 池时,可以同时处理多个多页文档,但会消耗很大内存,甚至导致“内存不足”。
- 转换大量单页文档。即处理发票、合同、信件等。对此,平行处理最方便,因为单页文档彼此无关,不需要同时占用大量内存。
- 处理大量图像以及搜索它们的必要信息,或者用其它方式处理识别结果。无需将其中大部分都转换成可编辑格式,所以合成和导出速度不是问题。循环访问布局块以及访问文本块的识别结果将在多进程中执行。
注: 如果您想使用平行处理导出,请注意该功能仅支持导出到 PDF(TextOnly 模式除外)和PPTX 格式。
建议和限制
- 如需平行处理 多页文档 我们建议使用 FRDocument。这种多重处理方式的编码最容易,不需要任何附加接口。
平行执行打开、预处理、分析和识别;文档合成在主进程中依序执行,然后平行执行导出到 PDF(TextOnly 模式除外)和 PPTX 格式。
- 若要处理从一些来源(例如扫描仪)收到的多个 单页文档,我们建议使用 BatchProcessor。该方法的优势是可以在清楚文档数量的情况下使用,可以是不同类型的文档并且要在接收后即时处理。缺点是需要更多的实现工作,必须为执行文件适配器和自定义图像源实现接口。
要对所有的处理阶段进行平行执行,因为在处理单页文档时,对于每个页面都要单独执行页面和文档合成。
注:Batch Processor方案不支持平行导出。
- 若要捕捉和处理平行处理中发生的事件,您可以使用 IParallelProcessingCallback 接口。该接口十分适用于棘手情形的管理。例如,当发生超时错误时,IParallelProcessingCallback 接口可根据用户偏好提供多种问题解决方案。如需了解更多信息,请参见 IParallelProcessingCallback::OnWaitIntervalExceeded。
注: 平行理页面期间发生的事件将被转换为整个文档的事件。
使用 FRDocument 对象进行处理
将根据可用的物理或逻辑 CPU 内核数量、许可证中可用的免费 CPU 内核数量以及文档页数,自动检测要运行的进程数量。如要开启多重处理模式,请执行以下操作:
- 设置 Engine 对象的 MultiProcessingParams 子对象的 MultiProcessingMode 属性的值。如果该属性被设为 MPM_Parallel 或 MPM_Auto,且文档页数和可用 CPU 内核数量都大于一,则使用平行处理。
- 使用 RecognitionProcessesCount 属性调整要运行的进程数量,并在必要时指定其它属性的值。
完成多重处理设置后,您可以启动处理 FRDocument 的标准程序。当您调用 FRDocument 对象的任一以下方法都会使ABBYY FineReader Engine 自动启动多个识别进程:
- AddImageFile, AddImageFileFromMemory, AddImageFileFromStream, AddImageFileWithPassword, AddImageFileWithPasswordCallback
- Preprocess, PreprocessPages
- Analyze, AnalyzePages
- Recognize, RecognizePages
- Process, ProcessPages
- Export, ExportPages, ExportToMemory — 仅可导出为 PDF (TextOnly 模式除外)和 PPTX 格式
对于文档的每一页,都会创建一个新的处理任务,并将此任务传递给其中一个识别进程。识别进程完成任务后会接收下一个处理任务。直到所有任务处理完后才结束。
使用 Batch Processor 进行处理
Batch Processor 初始化时将调用和配置异步识别进程。然后处理器会从自定义图像源调取图像文件。对于图像文件的每一页,都会创建一个新的处理任务,并将此任务传递给其中一个识别进程。如果一个文件的所有任务都已通过处理,但并非所有识别过程都已被占用,则从源的图像队列中获取下一个图像文件并通过处理。直到图像第一页完成转换并传送至用户方为止。页面将按照从图像源获取的顺序返回给用户。
若要用 Batch Processor 进行多重处理,请参照以下操作:
- 实现 IImageSource 和 IFileAdapter 接口,以提供对图像源和其中文件的访问。
- [optional] 实现 IAsyncProcessingCallback 接口来管理处理。该接口的方法可让您实现错误处理和/或取消处理。
- [optional] 使用 Engine 对象的 MultiProcessingParams 子对象设置多重处理。请注意不需要设置 MultiProcessingMode 属性,因为如使用 Batch Processor 则默认使用平行处理。使用 RecognitionProcessesCount 属性调整要运行的进程数量,并在必要时指定其它属性的值。
- 调用Engine 对象的 CreateBatchProcessor 方法来接收 BatchProcessor对象。
- 调用该对象的 Start 方法来初始化处理器和调用异步识别进程。您可以指定图像来源,将引用传递到 IAsyncProcessingCallback 接口和该方法调用中的参数对象。
- 调用循环中的 GetNextProcessedPage 方法直到该方法返回 0,这意味着源中不再有图像,且所有已处理图像均已返回到用户方。
重要事项!GetNextProcessedPage 方法返回的页面将一直保存到该方法的下次调用。因此,如果想要保存该页面,您必须使用 FRPage 对象的方法保存它,或者在下次调用 GetNextProcessedPage 方法前使用 IFRDocument::AddPage 方法将其添加到现有文档。
ABBYY FineReader Engine 分发包包括 BatchProcessing 示例,可显示如何使用 Batch Processor。
另请参阅
03.07.2024 8:50:25