Cenários de uso
- Conversão de documentos multipágina com um grande número de páginas. Em geral, isso significa processar livros, relatórios longos etc. Nesse caso, você pode reconhecer as páginas do documento em paralelo, depois realizar a síntese no processo principal e exportar em paralelo novamente. Ao usar um pool de Engines, você também pode processar vários documentos multipágina simultaneamente, mas o consumo de memória pode ser enorme e até levar a erros de “out of memory”.
- Conversão de um grande número de documentos de uma página. Esse é o caso quando você processa faturas, contratos, cartas etc. O processamento paralelo é mais simples nessa situação, pois documentos de uma página não dependem uns dos outros e não exigem grande quantidade de memória ao mesmo tempo.
- Processamento de um grande número de imagens e busca nelas por informações necessárias ou uso dos resultados de reconhecimento de alguma outra forma. Talvez você não precise converter a maioria delas para um formato editável, portanto a velocidade da síntese e da exportação não é um problema. A operação que será executada em vários processos consiste em percorrer os blocos de layout e acessar os resultados de reconhecimento dos blocos de texto.
Se você quiser usar processamento paralelo para exportação, tenha em mente que esse recurso é compatível apenas com exportação para os formatos PDF (exceto o modo TextOnly) e PPTX.
Recomendações e restrições
-
Para o processamento paralelo de documentos com várias páginas, recomendamos usar o FRDocument. Essa é a forma de multiprocessamento mais fácil de implementar, porque você não precisa implementar interfaces adicionais.
A abertura, o pré-processamento, a análise e o reconhecimento são realizados em paralelo; a síntese do documento é realizada sequencialmente no processo principal e, em seguida, a exportação para PDF (exceto no modo TextOnly) e para o formato PPTX é realizada em paralelo. -
Para processar muitos documentos de uma página recebidos de alguma fonte (como um scanner), recomendamos o BatchProcessor.
A vantagem desse método é que ele pode ser usado quando você não sabe antecipadamente o número de documentos; eles podem ser de tipos diferentes e precisam ser processados assim que chegam. A desvantagem é que ele exige mais esforço de implementação: você precisa implementar interfaces para um adaptador de arquivos e uma fonte personalizada de imagens.
Todos os estágios de processamento são executados em paralelo porque, no caso de documentos de uma página, a síntese da página e a do documento são realizadas separadamente para cada página.
A exportação paralela não tem suporte em cenários com o Batch Processor.
Os eventos que ocorrem durante o processamento paralelo de uma página são convertidos em eventos do documento como um todo.
Processamento com o objeto FRDocument
- Defina o valor da propriedade MultiProcessingMode do subobjeto MultiProcessingParams do objeto Engine. O processamento paralelo é usado se essa propriedade estiver definida como MPM_Parallel ou MPM_Auto, e se o número de páginas do documento e o número de núcleos de CPU disponíveis forem ambos maiores que um.
- Ajuste o número de processos a serem executados usando a propriedade RecognitionProcessesCount e, se necessário, especifique os valores de outras propriedades.
- AddImageFile, AddImageFileFromMemory, AddImageFileFromStream, AddImageFileWithPassword, AddImageFileWithPasswordCallback
- Preprocess, PreprocessPages
- Analyze, AnalyzePages
- Recognize, RecognizePages
- Process, ProcessPages
- Export, ExportPages, ExportToMemory — apenas para exportação nos formatos PDF (exceto no modo TextOnly) e PPTX
Processamento com Batch Processor
- Implemente as interfaces IImageSource e IFileAdapter, que fornecem acesso à fonte de imagens e aos arquivos nela contidos.
- [opcional] Implemente a interface IAsyncProcessingCallback para gerenciar o processamento. Os métodos dessa interface permitem tratar erros e/ou cancelar o processamento.
- [opcional] Configure o multiprocessamento usando o subobjeto MultiProcessingParams do objeto Engine. Observe que não é necessário definir a propriedade MultiProcessingMode, porque o processamento paralelo é usado por padrão ao trabalhar com Batch Processor. Ajuste o número de processos a serem executados usando a propriedade RecognitionProcessesCount e especifique os valores de outras propriedades, se necessário.
- Chame o método CreateBatchProcessor do objeto Engine para obter o objeto BatchProcessor.
- Chame o método Start desse objeto para inicializar o processador e invocar processos assíncronos de reconhecimento. Você pode especificar a fonte de imagens e passar as referências para a interface IAsyncProcessingCallback e para os objetos de parâmetros na chamada a esse método.
- Chame o método GetNextProcessedPage em um loop até que o método retorne 0, o que significa que não há mais imagens na fonte e que todas as imagens processadas já foram retornadas ao usuário.
