使用场景
- 转换页数很多的多页文档。这通常意味着处理书籍、长篇报告等。在这种情况下,您可以并行识别文档的各个页面,然后在主进程中执行合成,之后再并行导出。使用引擎池时,您也可以同时处理多个多页文档,但内存消耗可能非常大,甚至导致“内存不足”错误。
- 转换大量单页文档。这种情况常见于处理发票、合同、信函等。对于这种场景,并行处理最为简单,因为单页文档彼此独立,不会同时占用大量内存。
- 处理大量图像,并从中搜索所需信息,或以其他方式利用识别结果。您可能不需要将其中大部分转换为可编辑格式,因此合成和导出的速度并不是问题。在这种情况下,可在多个进程中执行的操作是遍历版面块并访问文本块的识别结果。
如果您希望在导出时使用并行处理,请注意,此功能仅支持导出为 PDF (TextOnly 模式除外) 和 PPTX 格式。
建议和限制
-
对于多页文档的并行处理,我们建议使用 FRDocument。这是最容易实现的多进程处理方式,因为您无需实现任何额外接口。
打开、预处理、分析和识别会并行执行;文档合成在主进程中按顺序执行,之后导出为 PDF (TextOnly 模式除外) 以及 PPTX 格式会并行执行。 -
对于处理从某个来源 (如扫描仪) 接收的大量单页文档,我们建议使用 BatchProcessor。
这种方法的优点是:即使您无法预先知道文档数量,且这些文档可能类型各异、必须在接收后立即处理,也可以使用。缺点是需要更多实现工作:您必须为文件适配器和自定义图像源实现接口。
所有处理阶段都会并行执行,因为对于单页文档,页面合成和文档合成都会分别对每一页执行。
在使用 Batch Processor 的场景中,不支持并行导出。
页面并行处理期间发生的事件会转换为整个文档的事件。
使用 FRDocument 对象进行处理
- 设置 Engine 对象的 MultiProcessingParams 子对象中
MultiProcessingMode属性的值。如果此属性设置为MPM_Parallel或MPM_Auto,并且文档页数和可用 CPU 核心数均大于 1,则会使用并行处理。 - 使用
RecognitionProcessesCount属性调整要运行的进程数,并在需要时指定其他属性的值。
- AddImageFile, AddImageFileFromMemory, AddImageFileFromStream, AddImageFileWithPassword, AddImageFileWithPasswordCallback
- Preprocess, PreprocessPages
- Analyze, AnalyzePages
- Recognize, RecognizePages
- Process, ProcessPages
- Export, ExportPages, ExportToMemory — 仅适用于导出为 PDF (
TextOnly模式除外) 和 PPTX 格式
使用 Batch Processor 进行处理
- 实现 IImageSource 和 IFileAdapter 接口,以便访问图像源及其中的文件。
- [可选] 实现 IAsyncProcessingCallback 接口来管理处理过程。该接口的方法可用于处理错误和/或取消处理。
- [可选] 使用 Engine 对象的 MultiProcessingParams 子对象设置多进程处理。请注意,无需设置 MultiProcessingMode 属性,因为使用 Batch Processor 时默认采用并行处理。如有需要,可使用 RecognitionProcessesCount 属性调整运行的进程数,并设置其他属性的值。
- 调用 Engine 对象的 CreateBatchProcessor 方法,以获取 BatchProcessor 对象。
- 调用该对象的 Start 方法,以初始化处理器并启动异步识别进程。调用此方法时,你可以指定图像源,传入 IAsyncProcessingCallback 接口引用以及参数对象。
- 在循环中调用 GetNextProcessedPage 方法,直到该方法返回 0,这表示源中已没有更多图像,且所有处理后的图像都已返回给用户。
