Scenari d’uso
- Conversione di documenti multipagina con un elevato numero di pagine. Questo scenario riguarda 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 layout block e nell’accedere ai risultati del riconoscimento per i text block.
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. È il metodo di elaborazione parallela più semplice da implementare, poiché non è necessario implementare interfacce aggiuntive.
Apertura, pre-elaborazione, analisi e riconoscimento vengono eseguiti in parallelo; la sintesi del documento viene eseguita in sequenza nel processo principale, dopodiché l’esportazione in PDF (ad eccezione della modalità TextOnly) e nei formati PPTX viene eseguita in parallelo. -
Per elaborare numerosi documenti di una sola pagina ricevuti da una sorgente (ad esempio uno scanner), si consiglia di utilizzare BatchProcessor.
Il vantaggio di questo metodo è che può essere utilizzato quando non si conosce in anticipo il numero di documenti, i quali possono essere di tipo diverso e devono essere elaborati non appena arrivano. Lo svantaggio è che richiede un maggiore sforzo implementativo: è necessario implementare le interfacce per un adattatore di file e una sorgente di immagini personalizzata.
Tutte le fasi di elaborazione vengono eseguite in parallelo poiché, nel caso di documenti di una sola pagina, la sintesi della pagina e del documento viene eseguita separatamente per ciascuna pagina.
L’esportazione parallela non è supportata negli scenari con Batch Processor.
- Per eseguire l’elaborazione completa di numerosi documenti di una sola pagina in parallelo, è possibile utilizzare un pool di Engine caricati out-of-process tramite COM. Questo metodo è il più efficiente in termini di velocità ed elimina automaticamente tutte le difficoltà legate al multi-threading: tutte le operazioni con gli oggetti di ABBYY FineReader Engine vengono serializzate tramite COM. Tuttavia, presenta alcune limitazioni:
- a causa dell’utilizzo di COM, è necessario registrare FREngine.dll;
- se il codice è scritto in C++, lavorare con COM richiede una maggiore quantità di codice di routine rispetto, ad esempio, a C#;
- in questo caso, l’elaborazione avviene in un altro processo, pertanto non è possibile aprire immagini dalla memoria e l’iterazione dei risultati di riconoscimento richiede più tempo, poiché ogni richiesta deve essere trasmessa a un altro processo e restituita;
- infine, il caricamento di più istanze di Engine comporta un maggiore consumo di memoria; in particolare, poiché tutte le fasi di elaborazione vengono eseguite in parallelo, più operazioni di sintesi simultanee possono svolgersi contemporaneamente, aumentando ulteriormente il consumo di memoria.
- Per intercettare e gestire gli eventi che si verificano durante l’elaborazione parallela, è possibile utilizzare l’interfaccia IParallelProcessingCallback. Questa interfaccia può essere molto utile per gestire situazioni problematiche. Ad esempio, quando si verifica un errore di timeout, l’interfaccia IParallelProcessingCallback offre diverse soluzioni al problema in base alle 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 dell’intero documento.
Risultati dei test di velocità
| <br /> | Documenti di una pagina | Un documento multipagina | Ricerca nei risultati senza esportazione |
|---|---|---|---|
| Elaborazione sequenziale | 60 | 51 | 87 |
| Elaborazione con FRDocument | 41 | 117 | 57 |
| Elaborazione con FRDocument (con PageFlushingPolicy = PFP_KeepInMemory) | 55 | 141 | 82 |
| Elaborazione tramite Batch Processor | 99 | 115 | 294 |
| Elaborazione tramite un pool di Engine | 165 | 10 | 102 |
Elaborazione con l’oggetto FRDocument
- Impostare il valore della proprietà MultiProcessingMode del sottooggetto MultiProcessingParams dell’oggetto Engine. Il multiprocessing viene utilizzato se questa proprietà è impostata su MPM_Parallel o MPM_Auto e se il numero di pagine nel documento e il numero di core CPU disponibili sono entrambi maggiori di uno.
- Regolare il numero di processi da eseguire tramite la proprietà RecognitionProcessesCount e specificare i valori delle altre proprietà, se necessario.
- AddImageFile, AddImageFileFromMemory, AddImageFileFromStream, AddImageFileWithPassword, AddImageFileWithPasswordCallback
- Preprocess, PreprocessPages
- Analyze, AnalyzePages
- Recognize, RecognizePages
- Process, ProcessPages
- Export, ExportPages, ExportToMemory — solo per l’esportazione in PDF (ad eccezione della modalità TextOnly) e nei formati PPTX
Codice C#
Codice C#
Elaborazione con Batch Processor
- Implementare le interfacce IImageSource e IFileAdapter, che forniscono l’accesso alla sorgente di immagini e ai file in essa contenuti.
- [facoltativo] Implementare l’interfaccia IAsyncProcessingCallback per gestire l’elaborazione. I metodi di questa interfaccia consentono di gestire gli errori e/o annullare l’elaborazione.
- [facoltativo] Configurare il multiprocessing tramite il sottooggetto MultiProcessingParams dell’oggetto Engine. Si noti che non è necessario impostare la proprietà MultiProcessingMode, poiché l’elaborazione parallela viene utilizzata per impostazione predefinita quando si lavora con il Batch Processor. Regolare il numero di processi da eseguire tramite la proprietà RecognitionProcessesCount e specificare i valori delle altre proprietà, se necessario.
- Chiamare il metodo CreateBatchProcessor dell’oggetto Engine per ottenere l’oggetto BatchProcessor.
- Chiamare il metodo Start di questo oggetto per inizializzare il processore e avviare i processi di riconoscimento asincroni. Nella chiamata a questo metodo è possibile specificare la sorgente di immagini e passare i riferimenti all’interfaccia IAsyncProcessingCallback e agli oggetti parametro.
- Chiamare il metodo GetNextProcessedPage in un ciclo finché 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.
Codice C#
Codice C#
Elaborazione tramite un pool di Engine
Codice C#
Codice C#
- Le autorizzazioni degli account possono essere configurate tramite l’utilità DCOM Config (digitare DCOMCNFG nella riga di comando oppure selezionare Pannello di controllo > Strumenti di amministrazione > Servizi componenti). Nell’albero della console, individuare la cartella Servizi componenti > Computer > Risorse del computer > Configurazione DCOM, fare clic con il pulsante destro del mouse su ABBYY FineReader Engine 12.5 Loader (Server locale) e fare clic su Proprietà. Si aprirà una finestra di dialogo. Fare clic sulla scheda Sicurezza. In Autorizzazioni di avvio, fare clic su Personalizza, quindi su Modifica per specificare gli account autorizzati ad avviare l’applicazione.
Si noti che su un sistema operativo a 64 bit l’applicazione DCOM registrata è disponibile nella console MMC a 32 bit, che può essere avviata tramite la seguente riga di comando:
- Per registrare FREngine.dll durante l’installazione dell’applicazione su un computer dell’utente finale, utilizzare l’utilità regsvr32. Su un sistema operativo a 64 bit, verrà eseguita per impostazione predefinita la versione a 64 bit di regsvr32. Utilizzare la riga di comando seguente:
- Implementando Engine come server out-of-process, specificare la modalità sequenziale di elaborazione dei documenti impostando la proprietà MultiProcessingMode dell’oggetto MultiProcessingParams su MPM_Sequential.
