Escenarios de uso
- Convertir documentos multipágina con una gran cantidad de páginas. Por lo general, esto significa procesar libros, informes extensos, etc. En este caso, puede reconocer las páginas del documento en paralelo, luego realizar la síntesis en el proceso principal y volver a exportar en paralelo. También puede, al usar un grupo de Engines, procesar varios documentos multipágina simultáneamente, pero el consumo de memoria puede ser enorme e incluso provocar errores de “memoria insuficiente”.
- Convertir una gran cantidad de documentos de una sola página. Este es el caso cuando procesa facturas, contratos, cartas, etc. El procesamiento en paralelo es lo más sencillo en esta situación, ya que los documentos de una sola página no dependen unos de otros y no requieren grandes cantidades de memoria al mismo tiempo.
- Procesar una gran cantidad de imágenes y buscar en ellas la información necesaria, o trabajar con los resultados del reconocimiento de alguna otra forma. Es posible que no necesite convertir la mayoría a un formato editable, por lo que la velocidad de la síntesis y la exportación no supone un problema. La operación que se realizará en varios procesos consiste en iterar por los bloques del layout y acceder a los resultados de reconocimiento de los bloques de texto.
Si quiere utilizar el procesamiento en paralelo para la exportación, tenga en cuenta que esta función solo es compatible con la exportación a los formatos PDF (excepto el modo TextOnly) y PPTX.
Recomendaciones y restricciones
-
Para el procesamiento en paralelo de documentos de varias páginas, recomendamos usar FRDocument. Es la forma más fácil de implementar el multiprocesamiento, ya que no tiene que implementar interfaces adicionales.
La apertura, el preprocesamiento, el análisis y el reconocimiento se realizan en paralelo; la síntesis del documento se realiza de forma secuencial en el proceso principal y, a continuación, la exportación a PDF (excepto en el modo TextOnly) y a formatos PPTX se realiza en paralelo. -
Para procesar muchos documentos de una sola página que se reciben desde alguna fuente (como un escáner), recomendamos BatchProcessor.
La ventaja de este método es que puede utilizarse cuando no se conoce de antemano el número de documentos; estos pueden ser de distintos tipos y deben procesarse directamente a medida que llegan. La desventaja es que requiere más esfuerzo de implementación: tiene que implementar interfaces para un adaptador de archivos y una fuente de imágenes personalizada.
Todas las etapas del procesamiento se realizan en paralelo porque, en el caso de los documentos de una sola página, la síntesis de la página y del documento se realiza por separado para cada página.
La exportación en paralelo no es compatible en escenarios con BatchProcessor.
- Para realizar el procesamiento completo en paralelo de muchos documentos de una sola página, puede usar un grupo de Engines cargados fuera del proceso mediante COM. Este método es el más eficiente en términos de velocidad y elimina automáticamente todas las dificultades relacionadas con el multihilo: todas las operaciones con los objetos de ABBYY FineReader Engine se serializan mediante COM. Pero tiene algunas limitaciones:
- debido al uso de COM, necesita registrar FREngine.dll;
- si su código está escrito en C++, trabajar con COM requiere más código repetitivo que, por ejemplo, en C#;
- en este caso, el procesamiento se realiza en otro proceso, por lo que no puede abrir imágenes desde la memoria, y recorrer los resultados del reconocimiento lleva más tiempo porque cada solicitud tiene que enviarse a otro proceso y volver;
- y, por último, cargar varias instancias de Engine implica un mayor consumo de memoria, especialmente porque, en este caso, todas las etapas de procesamiento se realizan en paralelo y pueden ejecutarse varias operaciones de síntesis simultáneamente, lo que consume aún más memoria.
- Para capturar y controlar los eventos que se producen durante el procesamiento en paralelo, puede usar la interfaz IParallelProcessingCallback. Esta interfaz puede ser muy útil para gestionar situaciones problemáticas. Por ejemplo, cuando se produce un error de tiempo de espera, la interfaz IParallelProcessingCallback ofrece varias soluciones al problema según las preferencias del usuario. Para obtener más información, consulte IParallelProcessingCallback::OnWaitIntervalExceeded.
Los eventos que se producen durante el procesamiento en paralelo de una página se convierten en eventos del documento completo.
Resultados de las pruebas de velocidad
| <br /> | Documentos de una página | Un documento de varias páginas | Búsqueda en los resultados sin exportarlos |
|---|---|---|---|
| Procesamiento secuencial | 60 | 51 | 87 |
| Procesamiento con FRDocument | 41 | 117 | 57 |
| Procesamiento con FRDocument (con PageFlushingPolicy = PFP_KeepInMemory) | 55 | 141 | 82 |
| Procesamiento con Batch Processor | 99 | 115 | 294 |
| Procesamiento mediante un grupo de Engines | 165 | 10 | 102 |
Procesamiento con el objeto FRDocument
- Establezca el valor de la propiedad MultiProcessingMode del subobjeto MultiProcessingParams del objeto Engine. El procesamiento en paralelo se utiliza si esta propiedad está establecida en MPM_Parallel o MPM_Auto, y si tanto el número de páginas del documento como el número de núcleos de CPU disponibles son mayores que uno.
- Ajuste el número de procesos que se ejecutarán mediante la propiedad RecognitionProcessesCount y, si es necesario, especifique los valores de otras propiedades.
- AddImageFile, AddImageFileFromMemory, AddImageFileFromStream, AddImageFileWithPassword, AddImageFileWithPasswordCallback
- Preprocess, PreprocessPages
- Analyze, AnalyzePages
- Recognize, RecognizePages
- Process, ProcessPages
- Export, ExportPages, ExportToMemory — solo para exportar a PDF (excepto en modo TextOnly) y a formatos PPTX
Código C#
Código C#
Procesamiento con Batch Processor
- Implemente las interfaces IImageSource e IFileAdapter, que proporcionan acceso al origen de imágenes y a los archivos que contiene.
- [opcional] Implemente la interfaz IAsyncProcessingCallback para controlar el procesamiento. Los métodos de esta interfaz le permiten gestionar errores y/o cancelar el procesamiento.
- [opcional] Configure el multiprocesamiento mediante el subobjeto MultiProcessingParams del objeto Engine. Tenga en cuenta que no es necesario establecer la propiedad MultiProcessingMode, porque el procesamiento en paralelo se usa de forma predeterminada si trabaja con Batch Processor. Ajuste el número de procesos que se ejecutarán mediante la propiedad RecognitionProcessesCount y especifique los valores de otras propiedades, si es necesario.
- Llame al método CreateBatchProcessor del objeto Engine para obtener el objeto BatchProcessor.
- Llame al método Start de este objeto para inicializar el procesador e invocar procesos de reconocimiento asíncronos. Puede especificar el origen de las imágenes y pasar las referencias a la interfaz IAsyncProcessingCallback y a los objetos de parámetros en la llamada a este método.
- Llame al método GetNextProcessedPage en un bucle hasta que el método devuelva 0, lo que significa que no quedan más imágenes en el origen y que todas las imágenes procesadas ya se han devuelto al usuario.
Código C#
Código C#
Procesamiento con un grupo de Engines
Código C#
Código C#
- Los permisos de las cuentas se pueden configurar con la utilidad DCOM Config (ya sea escribiendo DCOMCNFG en la línea de comandos o seleccionando Control Panel > Administrative Tools > Component Services). En el árbol de la consola, ubique la carpeta Component Services > Computers > My Computer > DCOM Config, haga clic con el botón derecho en ABBYY FineReader Engine 12.5 Loader (Local Server) y haga clic en Properties. Se abrirá un cuadro de diálogo. Haga clic en la pestaña Security. En Launch Permissions, haga clic en Customize y, a continuación, haga clic en Edit para especificar las cuentas que pueden iniciar la aplicación.
Tenga en cuenta que, en un sistema operativo de 64 bits, la aplicación DCOM registrada está disponible en la consola MMC de 32 bits, que puede ejecutarse mediante la siguiente línea de comandos:
- Para registrar
FREngine.dllal instalar la aplicación en un equipo del usuario final, utilice la utilidadregsvr32. Si usa un sistema operativo de 64 bits, se ejecutará de forma predeterminada la versión de 64 bits deregsvr32. Use la siguiente línea de comandos:
- Al implementar Engine como un servidor fuera del proceso, especifique el modo secuencial de procesamiento de documentos estableciendo la propiedad MultiProcessingMode del objeto MultiProcessingParams en MPM_Sequential.
