Saltar al contenido principal
Si procesa grandes volúmenes de documentos, el Reconocimiento óptico de caracteres (OCR) puede requerir muchos recursos de procesamiento. A menudo resulta conveniente utilizar sistemas con varias CPU para aumentar la velocidad de procesamiento, y ABBYY FineReader Engine ofrece varias formas de aprovechar las capacidades de multiprocesamiento de su configuración de hardware. En esta sección se describen los posibles escenarios de uso y se ofrecen recomendaciones para elegir el modo de multiprocesamiento más adecuado para su tarea, junto con estadísticas de pruebas. También incluye enlaces a los ejemplos de código, que proporcionan implementaciones de multiprocesamiento. Para usar el multiprocesamiento, debe establecer la propiedad MultiProcessingParams del objeto Engine con los valores apropiados. ABBYY FineReader Engine admite dos objetos diferentes que proporcionan multiprocesamiento desde una sola instancia de Engine. Se trata del objeto FRDocument (consulte Procesamiento con el objeto FRDocument) y del objeto BatchProcessor (consulte Procesamiento con Batch Processor).
Tenga en cuenta que el procesamiento en paralelo requiere más RAM que el procesamiento secuencial. La recomendación general para una estación de trabajo es 350 MB * (número de núcleos) + 450 MB de RAM y, si procesa documentos en árabe o en idiomas CJK, 850 MB * (número de núcleos) + 750 MB de RAM.

Escenarios de uso

Daremos por sentado que procesa una gran cantidad de documentos. Pero también debemos tener en cuenta los resultados que necesita obtener y elegir la mejor forma de implementar su tarea. Los distintos escenarios que deben considerarse son:
  • Convertir documentos multipágina con un gran número 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, si usa 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 manera. Puede que no necesite convertir la mayoría a un formato editable, por lo que la velocidad de la síntesis y de la exportación no es un problema. La operación que se realizará en varios procesos consiste en iterar por los bloques de layout y acceder a los resultados del reconocimiento de los bloques de texto.
Si desea usar el procesamiento en paralelo para la exportación, tenga en cuenta que esta función solo es compatible con la exportación a PDF (excepto el modo TextOnly) y con el formato PPTX.

Recomendaciones y restricciones

  • Para el procesamiento en paralelo de documentos de varias páginas, recomendamos usar FRDocument. Es la opción de multiprocesamiento más fácil de implementar, ya que no es necesario implementar interfaces adicionales.
    La apertura, el preprocesamiento, el análisis y el reconocimiento se realizan en paralelo; la síntesis del documento se realiza secuencialmente en el proceso principal y, a continuación, la exportación a PDF (excepto en el modo TextOnly) y a 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 conoce de antemano cuántos documentos habrá, 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 página y de documento se realizan por separado para cada página.
La exportación en paralelo no se admite en escenarios con Batch Processor.
Para capturar y gestionar 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 proporciona 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.

Procesamiento con el objeto FRDocument

El número de procesos que se ejecutarán se detecta automáticamente en función del número de núcleos de CPU físicos o lógicos disponibles, del número de núcleos de CPU libres permitidos por la licencia y del número de páginas del documento. Para activar el modo multiproceso, haga lo siguiente:
  1. Establezca el valor de la propiedad MultiProcessingMode del subobjeto MultiProcessingParams del objeto Engine. El procesamiento en paralelo se utiliza si esta propiedad se establece 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.
  2. Ajuste el número de procesos que se ejecutarán mediante la propiedad RecognitionProcessesCount y, si es necesario, especifique los valores de otras propiedades.
Después de configurar los ajustes de multiprocesamiento, puede usar el procedimiento estándar para trabajar con FRDocument. ABBYY FineReader Engine iniciará automáticamente varios procesos de reconocimiento cuando llame a uno de los siguientes métodos del objeto FRDocument: Para cada página del documento, se crea una nueva tarea de procesamiento y esta tarea se asigna a uno de los procesos de reconocimiento. Cuando un proceso de reconocimiento completa la tarea, recibe la siguiente tarea de procesamiento. Esto continúa hasta que se han procesado todas las tareas.

Procesamiento con Batch Processor

Cuando se inicializa Batch Processor, se invocan y configuran procesos de reconocimiento asincrónicos. A continuación, el procesador toma archivos de imagen de una fuente de imágenes personalizada. Para cada página del archivo de imagen, se crea una nueva tarea de procesamiento, que se asigna a uno de los procesos de reconocimiento. Si todas las tareas de un archivo ya se han enviado a procesamiento, pero no todos los procesos de reconocimiento están ocupados, se toma el siguiente archivo de imagen de la cola de imágenes de la fuente y se envía a procesamiento. Esto se hace hasta que la primera página de imagen se haya convertido y entregado al usuario. Las páginas se devuelven al usuario en el mismo orden en que se tomaron de la fuente de imágenes. Para organizar el multiprocesamiento con Batch Processor, haga lo siguiente:
  1. Implemente las interfaces IImageSource e IFileAdapter, que proporcionan acceso a la fuente de imágenes y a los archivos que contiene.
  2. [opcional] Implemente la interfaz IAsyncProcessingCallback para controlar el procesamiento. Los métodos de esta interfaz le permiten gestionar errores y/o cancelar el procesamiento.
  3. [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, si es necesario, especifique los valores de las demás propiedades.
  4. Llame al método CreateBatchProcessor del objeto Engine para obtener el objeto BatchProcessor.
  5. Llame al método Start de este objeto para inicializar el procesador e invocar procesos de reconocimiento asincrónicos. Puede especificar la fuente de imágenes y pasar las referencias a la interfaz IAsyncProcessingCallback y a los objetos de parámetros en la llamada a este método.
  6. Llame al método GetNextProcessedPage en un bucle hasta que devuelva 0, lo que significa que ya no quedan más imágenes en la fuente y que todas las imágenes procesadas ya se han devuelto al usuario.
La página devuelta por el método GetNextProcessedPage existe hasta la siguiente llamada a este método. Por lo tanto, si desea guardar esta página, debe hacerlo mediante los métodos del objeto FRPage o agregarla a un documento existente mediante el método IFRDocument::AddPage ANTES de la siguiente llamada al método GetNextProcessedPage.
El paquete de distribución de ABBYY FineReader Engine incluye el ejemplo BatchProcessing, que muestra cómo usar Batch Processor.

Consulte también

FRDocument BatchProcessor MultiProcessingParams Recorrer las páginas del documento