Vai al contenuto principale
Se elabori grandi volumi di documenti, l’Optical Character Recognition (OCR) può richiedere notevoli risorse di elaborazione. Spesso conviene utilizzare sistemi multi-CPU per aumentare la velocità di elaborazione e ABBYY FineReader Engine offre diversi modi per sfruttare le funzionalità di elaborazione multipla della configurazione hardware. Questa sezione illustra i possibili scenari di utilizzo e fornisce consigli su come scegliere la modalità di elaborazione multipla più adatta alla tua attività, insieme a statistiche di test. Include inoltre collegamenti agli esempi di codice, che forniscono implementazioni dell’elaborazione multipla. Per usare l’elaborazione multipla, devi impostare la proprietà MultiProcessingParams dell’oggetto Engine su valori appropriati. ABBYY FineReader Engine supporta due diversi oggetti che consentono l’elaborazione multipla a partire da una singola istanza di Engine: l’oggetto FRDocument (vedi Elaborazione con l’oggetto FRDocument) e l’oggetto BatchProcessor (vedi Elaborazione con Batch Processor).
Tieni presente che l’elaborazione parallela richiede più RAM rispetto all’elaborazione sequenziale. La raccomandazione generale per una workstation è di 350 MB * (numero di core) + 450 MB di RAM e, se elabori documenti in arabo o nelle lingue CJK, di 850 MB * (numero di core) + 750 MB di RAM.

Scenari d’uso

Daremo per scontato che si stia elaborando un gran numero di documenti. È tuttavia necessario tenere in considerazione i risultati che si desidera ottenere e scegliere gli strumenti più adatti per implementare il proprio compito. Gli scenari da considerare sono:
  • Conversione di documenti multipagina con un elevato numero di pagine. Questo implica generalmente l’elaborazione di libri, report lunghi e simili. In questo caso, è possibile riconoscere le pagine del documento in parallelo, eseguire la sintesi nel processo principale ed effettuare nuovamente l’esportazione in parallelo. Utilizzando un pool di Engine, è inoltre possibile elaborare simultaneamente più documenti multipagina, ma il consumo di memoria può essere elevato e portare persino a errori di tipo “out of memory”.
  • Conversione di un gran numero di documenti di una sola pagina. Questo è il caso in cui si elaborano fatture, contratti, lettere e simili. L’elaborazione parallela è la soluzione più semplice per questa situazione, poiché i documenti di una sola pagina sono indipendenti l’uno dall’altro e non richiedono grandi quantità di memoria contemporaneamente.
  • Elaborazione di un gran numero di immagini per ricercare informazioni specifiche o per lavorare in altro modo con i risultati del riconoscimento. Nella maggior parte dei casi potrebbe non essere necessario convertirle in un formato modificabile, pertanto la velocità di sintesi ed esportazione non rappresenta un problema. L’operazione che verrà eseguita in più processi consiste nell’iterare tra i Block del layout e nell’accedere ai risultati del riconoscimento per i block di testo.
Se si desidera utilizzare l’elaborazione parallela per l’esportazione, tenere presente che questa funzionalità è supportata solo per l’esportazione in PDF (ad eccezione della modalità TextOnly) e nei formati PPTX.

Raccomandazioni e restrizioni

  • Per l’elaborazione parallela di documenti multipagina, si consiglia di utilizzare FRDocument. Si tratta del metodo multiprocessing più semplice da implementare, poiché non richiede l’implementazione di interfacce aggiuntive.
    Apertura, pre-elaborazione, analisi e riconoscimento vengono eseguiti in parallelo; la sintesi del documento avviene sequenzialmente nel processo principale, seguita dall’esportazione nei formati PDF (eccetto la modalità TextOnly) e PPTX, che viene eseguita in parallelo.
  • Per elaborare numerosi documenti a pagina singola ricevuti da una sorgente (ad esempio uno scanner), si consiglia di utilizzare BatchProcessor.
    Il vantaggio di questo approccio è che può essere impiegato quando non si conosce in anticipo il numero di documenti, che possono essere di tipi diversi e devono essere elaborati non appena arrivano. Lo svantaggio è che richiede un maggiore sforzo di implementazione: è necessario realizzare interfacce per un adattatore file e una sorgente di immagini personalizzata.
    Tutte le fasi di elaborazione vengono eseguite in parallelo, poiché nel caso di documenti a pagina singola la sintesi della pagina e del documento avviene separatamente per ciascuna pagina.
L’esportazione parallela non è supportata negli scenari con Batch Processor.
Per intercettare e gestire gli eventi che si verificano durante l’elaborazione parallela, è possibile utilizzare l’interfaccia IParallelProcessingCallback. Questa interfaccia risulta molto utile per affrontare situazioni problematiche. Ad esempio, in caso di errore di timeout, l’interfaccia IParallelProcessingCallback offre diverse soluzioni al problema, a seconda delle preferenze dell’utente. Per ulteriori informazioni, vedere IParallelProcessingCallback::OnWaitIntervalExceeded.
Gli eventi che si verificano durante l’elaborazione parallela di una pagina vengono convertiti in eventi di un documento intero.

Elaborazione con l’oggetto FRDocument

Il numero di processi da eseguire viene rilevato automaticamente in base al numero di core CPU fisici o logici disponibili, al numero di core CPU liberi disponibili nella licenza e al numero di pagine nel documento. Per attivare la modalità di elaborazione multipla, procedere come segue:
  1. Impostare il valore della proprietà MultiProcessingMode del sottooggetto MultiProcessingParams dell’oggetto Engine. L’elaborazione parallela viene utilizzata se questa proprietà è impostata su MPM_Parallel o MPM_Auto e il numero di pagine nel documento e il numero di core CPU disponibili sono entrambi maggiori di uno.
  2. Regolare il numero di processi da eseguire tramite la proprietà RecognitionProcessesCount e specificare i valori delle altre proprietà, se necessario.
Dopo aver configurato le impostazioni di elaborazione multipla, è possibile utilizzare la procedura standard di utilizzo di FRDocument. ABBYY FineReader Engine avvierà automaticamente diversi processi di riconoscimento quando viene chiamato uno dei seguenti metodi dell’oggetto FRDocument: Per ogni pagina del documento viene creata una nuova attività di elaborazione, che viene assegnata a uno dei processi di riconoscimento. Quando un processo di riconoscimento completa l’attività, riceve quella successiva. Questo ciclo continua fino al completamento di tutte le attività.

Elaborazione tramite Batch Processor

Quando il Batch Processor viene inizializzato, vengono avviati e configurati i processi di riconoscimento asincroni. Il processore preleva quindi i file immagine da una sorgente di immagini personalizzata. Per ogni pagina del file immagine viene creata una nuova attività di elaborazione, che viene assegnata a uno dei processi di riconoscimento. Se tutte le attività relative a un file sono state inviate per l’elaborazione ma non tutti i processi di riconoscimento sono occupati, il file immagine successivo presente nella coda della sorgente viene prelevato e inviato per l’elaborazione. Questo ciclo continua fino a quando la prima pagina immagine non è stata convertita e restituita all’utente. Le pagine vengono restituite all’utente nell’ordine in cui sono state prelevate dalla sorgente di immagini. Per organizzare l’elaborazione multipla con il Batch Processor, procedere come segue:
  1. Implementare le interfacce IImageSource e IFileAdapter, che forniscono l’accesso alla sorgente di immagini e ai file in essa contenuti.
  2. [facoltativo] Implementare l’interfaccia IAsyncProcessingCallback per gestire l’elaborazione. I metodi di questa interfaccia consentono di gestire gli errori e/o annullare l’elaborazione.
  3. [facoltativo] Configurare l’elaborazione multipla tramite il sottooggetto MultiProcessingParams dell’oggetto Engine. Si noti che non è necessario impostare la proprietà MultiProcessingMode, poiché l’elaborazione parallela è attiva per impostazione predefinita quando si utilizza il Batch Processor. Regolare il numero di processi da eseguire tramite la proprietà RecognitionProcessesCount e specificare i valori delle altre proprietà, se necessario.
  4. Chiamare il metodo CreateBatchProcessor dell’oggetto Engine per ottenere l’oggetto BatchProcessor.
  5. Chiamare il metodo Start di questo oggetto per inizializzare il processore e avviare i processi di riconoscimento asincroni. In questa chiamata è possibile specificare la sorgente di immagini e passare i riferimenti all’interfaccia IAsyncProcessingCallback e agli oggetti parametro.
  6. Chiamare il metodo GetNextProcessedPage in un ciclo fino a quando il metodo non restituisce 0, il che indica che non vi sono altre immagini nella sorgente e che tutte le immagini elaborate sono state restituite all’utente.
La pagina restituita dal metodo GetNextProcessedPage rimane valida fino alla successiva chiamata di questo metodo. Pertanto, se si desidera salvare tale pagina, è necessario farlo tramite i metodi dell’oggetto FRPage oppure aggiungendola a un documento esistente con il metodo IFRDocument::AddPage PRIMA della successiva chiamata del metodo GetNextProcessedPage.
Il pacchetto di distribuzione di ABBYY FineReader Engine include il campione BatchProcessing, che illustra come utilizzare il Batch Processor.

Vedere anche

FRDocument BatchProcessor MultiProcessingParams Iterating Document Pages