Questo scenario viene utilizzato per estrarre tutti i dati possibili da un documento e memorizzarli in modo strutturato.Il risultato è un file JSON che rappresenta la struttura del documento. Contiene tutti gli oggetti del documento: testo stampato e scritto a mano, tabelle, Barcode, segni di spunta e immagini con la relativa posizione e i rispettivi attributi. Questo formato è ottimale per l’elaborazione successiva, l’archiviazione dei dati in un database o l’integrazione con un’altra applicazione.In questo scenario, un documento attraversa diverse fasi di elaborazione:
Pre-elaborazione di immagini scansionate o foto
Le immagini ottenute tramite uno scanner o una fotocamera digitale potrebbero richiedere alcune correzioni prima di poter essere riconosciute otticamente. Ad esempio, le immagini con disturbi o con righe di testo deformate richiedono alcuni interventi correttivi affinché il riconoscimento ottico abbia esito positivo.
Estrazione strutturata di tutti i dati presenti nel documento
Durante l’analisi del layout, nell’immagine vengono rilevati vari oggetti e raggruppati in blocchi del tipo corrispondente. I blocchi vengono riconosciuti in base alle impostazioni ottimali per il rispettivo tipo. Nel corso della sintesi, la struttura logica del documento viene ricostruita in modo coerente. L’ordine del testo, anche nei layout complessi, viene mantenuto in modo simile a come lo leggerebbe una persona. Questo garantisce che un nuovo riconoscimento dello stesso documento produca lo stesso ordine del testo.
Esportazione in un formato strutturato
Il documento riconosciuto viene salvato in formato JSON o XML.
Gli esempi di codice forniti in questo argomento sono specifici per Windows.
Di seguito è riportata una descrizione dettagliata del metodo consigliato per utilizzare ABBYY FineReader Engine 12 per estrarre dati dai documenti. Il metodo proposto usa le impostazioni di elaborazione più adatte a questo scopo.
Passo 1. Caricamento di ABBYY FineReader Engine
Per iniziare a lavorare con ABBYY FineReader Engine, è necessario creare l’oggetto Engine. L’oggetto Engine è l’oggetto di livello più alto nella gerarchia degli oggetti di ABBYY FineReader Engine e fornisce varie impostazioni globali, alcuni metodi di elaborazione e metodi per la creazione degli altri oggetti.Per creare l’oggetto Engine, è possibile utilizzare la funzione InitializeEngine. Vedere anche altri modi per caricare l’oggetto Engine (Win).
// Inizializzare queste variabili con il percorso di FREngine.dll, il Customer Project ID di FineReader Engine,// e, se applicabile, il percorso del token della licenza online e la password della licenza onlinewchar_t* FreDllPath;wchar_t* CustomerProjectId;wchar_t* LicensePath; // se non si utilizza una licenza online, assegnare stringhe vuote a queste variabiliwchar_t* LicensePassword;// HANDLE per FREngine.dllstatic HMODULE libraryHandle = 0;// Oggetto globale FineReader EngineFREngine::IEnginePtr Engine;void LoadFREngine(){ if( Engine != 0 ) { // Già caricato return; } // Primo passaggio: caricare FREngine.dll if( libraryHandle == 0 ) { libraryHandle = LoadLibraryEx( FreDllPath, 0, LOAD_WITH_ALTERED_SEARCH_PATH ); if( libraryHandle == 0 ) { throw L"Errore durante il caricamento di ABBYY FineReader Engine"; } } // Secondo passaggio: ottenere l'oggetto Engine typedef HRESULT ( STDAPICALLTYPE* InitializeEngineFunc )( BSTR, BSTR, BSTR, BSTR, BSTR, VARIANT_BOOL, FREngine::IEngine** ); InitializeEngineFunc pInitializeEngine = ( InitializeEngineFunc )GetProcAddress( libraryHandle, "InitializeEngine" ); if( pInitializeEngine == 0 || pInitializeEngine( CustomerProjectId, LicensePath, LicensePassword, L"", L"", VARIANT_FALSE, &Engine ) != S_OK ) { UnloadFREngine(); throw L"Errore durante il caricamento di ABBYY FineReader Engine"; }}
Passaggio 2. Caricamento delle impostazioni per lo scenario
ABBYY FineReader Engine consente di caricare tutte le impostazioni di elaborazione più adatte a questo scenario utilizzando il metodo LoadPredefinedProfile dell’oggetto Engine. Questo metodo riceve come parametro di input il nome del profilo. Per ulteriori informazioni, vedere Working with Profiles.Le impostazioni per questo scenario sono disponibili nel profilo predefinito DataExtraction:
L’analisi del layout e il riconoscimento privilegiano l’accuratezza rispetto alla velocità.
Rileva tutto il testo presente nell’immagine, incluso il testo scritto a mano e le piccole aree di testo di bassa qualità.
Rileva tabelle, segni di spunta e barcode.
Viene eseguita la sintesi completa della struttura logica del documento.
// Carica un profilo predefinitoEngine->LoadPredefinedProfile( L"DataExtraction" );
Se si desidera modificare le impostazioni di elaborazione, utilizzare i relativi oggetti Parameter. Per ulteriori informazioni, vedere la sezione Additional optimization riportata di seguito.
Passaggio 3. Caricamento e pre-elaborazione delle immagini
ABBYY FineReader Engine mette a disposizione l’oggetto FRDocument, che consente di elaborare documenti multipagina. L’uso di questo oggetto permette di preservare l’organizzazione logica del documento, mantenendo il testo e le colonne originali, i font, gli stili e così via.Per caricare e pre-elaborare le immagini di un singolo documento, è necessario creare l’oggetto FRDocument e aggiungervi le immagini. È possibile procedere in uno dei seguenti modi:
Creare l’oggetto FRDocument utilizzando il metodo CreateFRDocumentFromImage dell’oggetto Engine. Questo metodo crea l’oggetto FRDocument e carica le immagini dal file specificato.
// Crea l'oggetto FRDocument da un file immagineFREngine::IFRDocumentPtr frDocument = Engine->CreateFRDocumentFromImage( L"C:\\MyImage.tif", 0 );
Passaggio 4. Riconoscimento del documento
Per riconoscere un documento, si consiglia di utilizzare i metodi di analisi e riconoscimento dell’oggetto FRDocument. Questo oggetto offre un’ampia gamma di metodi per l’analisi, il riconoscimento e la sintesi del documento. Il metodo più pratico, che combina in un’unica operazione analisi, riconoscimento e sintesi del documento, è Process. Inoltre, sfrutta nel modo più efficiente le funzionalità di elaborazione parallela dei sistemi multiprocessore e multicore. In alternativa, è anche possibile eseguire in sequenza preelaborazione, analisi, riconoscimento e sintesi utilizzando i metodi Preprocess, Analyze, Recognize e Synthesize.
// Analizza, riconosce e sintetizza il documento// Non sono necessari parametri aggiuntivi perché sono impostati dal profilo di elaborazionefrDocument.Process( null );
// Analizza, riconosce e sintetizza il documento// Non sono necessari parametri aggiuntivi perché sono impostati dal profilo di elaborazionefrDocument->Process( 0 );
Passaggio 5. Esportazione del documento
Per salvare un documento riconosciuto, è possibile utilizzare il metodo Export dell’oggetto FRDocument, specificando la costante FileExportFormatEnum come uno dei parametri. È possibile modificare i parametri di esportazione predefiniti utilizzando il corrispondente oggetto di esportazione. Per ulteriori informazioni, consulta Ulteriore ottimizzazione per attività specifiche qui sotto.Una volta terminato l’utilizzo dell’oggetto FRDocument, rilascia tutte le risorse usate da questo oggetto. Utilizza il metodo IFRDocument::Close.
// Salva il documento riconosciuto in un formato strutturatofrDocument->Export( L"C:\\Data.json", FREngine::FEF_JSON, 0 );// Rilascia l'oggetto FRDocumentfrDocument->Close();
Passaggio 6. Scaricamento di ABBYY FineReader Engine
Dopo aver terminato di utilizzare ABBYY FineReader Engine, è necessario scaricare l’oggetto Engine. A tale scopo, utilizzare la funzione esportata DeinitializeEngine.
Puoi usare il file FREngineDistribution.csv per creare automaticamente un elenco dei file necessari al funzionamento della tua applicazione. Per l’elaborazione in questo scenario, seleziona nella colonna 5 (RequiredByModule) i seguenti valori:CoreCore.ResourcesOpeningOpening, ProcessingProcessingProcessing.OCRProcessing.OCR, Processing.ICRProcessing.OCR.NaturalLanguagesProcessing.OCR.NaturalLanguages, Processing.ICR.NaturalLanguagesExportExport, ProcessingSe modifichi lo scenario standard, aggiorna di conseguenza i moduli richiesti. Devi anche specificare le lingue dell’interfaccia, le lingue di riconoscimento e tutte le funzionalità aggiuntive utilizzate dalla tua applicazione (ad esempio, Opening.PDF se devi aprire file PDF oppure Processing.OCR.CJK se devi riconoscere testi in lingue CJK). Per ulteriori dettagli, consulta Working with the FREngineDistribution.csv File.
Di seguito è riportata una panoramica degli argomenti della Guida che contengono informazioni aggiuntive sulla personalizzazione delle impostazioni nelle diverse fasi della conversione di un documento in un formato modificabile:
Scansione - solo per Windows
Scansione Descrizione dello scenario di ABBYY FineReader Engine per la scansione dei documenti.
Oggetto PageProcessingParams Questo oggetto consente di personalizzare i parametri di analisi e riconoscimento. Utilizzandolo, è possibile indicare quali caratteristiche dell’immagine e del testo devono essere rilevate (immagine invertita, orientamento, Barcode, lingua di riconoscimento, margine di errore del riconoscimento).
Oggetto SynthesisParamsForPage Questo oggetto include i parametri responsabili del ripristino della formattazione di una pagina durante la sintesi.
Oggetto SynthesisParamsForDocument Questo oggetto consente di personalizzare la sintesi del documento: il ripristino della sua struttura e formattazione.
Oggetto MultiProcessingParams - Implementato per Linux e Windows L’elaborazione simultanea può risultare utile quando si deve elaborare un numero elevato di immagini. In questo caso, il carico di elaborazione viene distribuito tra i core del processore durante l’apertura e la pre-elaborazione delle immagini, l’analisi del layout, il riconoscimento e l’esportazione, consentendo di velocizzare l’elaborazione. Le modalità di elaborazione (simultanea o consecutiva) vengono impostate tramite la proprietà MultiProcessingMode. La proprietà RecognitionProcessesCount controlla il numero di processi che possono essere avviati.