+ All Categories
Home > Documents > UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la...

UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la...

Date post: 24-Jan-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
49
Transcript
Page 1: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

UNIVERSITÀ DEGLI STUDI DI PARMADipartimento di Matematica e Informatica

Corso di Laurea in Informatica

Progettazione e Realizzazione di un

Sistema per l'Estrazione di Informazioni

da Tavole Tecniche

Design and Implementation of a System forInformation Extraction from Technical Drawings

Relatore:

Chiar.mo Prof. Federico Bergenti

Correlatore:

Ing. Luigi Capuzzello

Candidato:

Alessio Iotti

Anno Accademico 2012/2013

Page 2: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi
Page 3: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

Alle mie sorelle ed ai miei genitori.Ad Anita

Page 4: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi
Page 5: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

Indice

1 Strumenti Utilizzati 31.1 Tesseract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2 Framework AForge.NET . . . . . . . . . . . . . . . . . . . . . 81.3 Libreria ITextSharp . . . . . . . . . . . . . . . . . . . . . . . . 8

2 Problematiche A�rontate 112.1 Considerazioni Iniziali . . . . . . . . . . . . . . . . . . . . . . 112.2 Ricerca dei Blob . . . . . . . . . . . . . . . . . . . . . . . . . . 122.3 Riconoscimento dei Valori dei Codici . . . . . . . . . . . . . . 122.4 Problemi Legati alla Veri�ca . . . . . . . . . . . . . . . . . . . 132.5 Ricerca del Codice della Tavola . . . . . . . . . . . . . . . . . 13

3 Soluzioni Adottate 153.1 Ricerca dei Blob . . . . . . . . . . . . . . . . . . . . . . . . . . 153.2 Riconoscimento dei Valori dei Codici . . . . . . . . . . . . . . 163.3 Veri�ca dei Risultati e Ricerca del Codice Tavola . . . . . . . 17

4 Implementazione di syOCR 194.1 Considerazioni Iniziali . . . . . . . . . . . . . . . . . . . . . . 194.2 Programma TrainingMode . . . . . . . . . . . . . . . . . . . . 20

4.2.1 Maschera di con�gurazione . . . . . . . . . . . . . . . . 204.2.2 Maschera di addestramento . . . . . . . . . . . . . . . 214.2.3 Classe OCREngine . . . . . . . . . . . . . . . . . . . . 234.2.4 Classe pathManager . . . . . . . . . . . . . . . . . . . 274.2.5 Classe Analyzer . . . . . . . . . . . . . . . . . . . . . . 274.2.6 Altre classi . . . . . . . . . . . . . . . . . . . . . . . . 28

4.3 Programma NormalMode . . . . . . . . . . . . . . . . . . . . . 304.3.1 Maschera di veri�ca . . . . . . . . . . . . . . . . . . . . 314.3.2 Maschera di aggiunta area codice tavola . . . . . . . . 344.3.3 Di�erenze con il programma TrainingMode . . . . . . . 34

4.4 Collaborazione tra i Due Programmi . . . . . . . . . . . . . . 39

Page 6: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

iv INDICE

Bibliogra�a 43

Page 7: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

Introduzione

Il lavoro descritto in questa tesi è la realizzazione di un sistema per l'estra-zione e l'elaborazione di informazioni da tavole tecniche. Tale programma,denominato syOCR, è stato sviluppato per l'azienda Sygest S.r.l. con lo scopodi essere integrato all'interno della procedura di gestione digitale dei cataloghiricambi.

In particolare, l'obiettivo di syOCR è quello di ricavare da un insiemedi tavole le informazioni necessarie a costruire dinamicamente un catalogoricambi navigabile.

Il programma è stato sviluppato interamente in linguaggio Visual Basic.NET, avvalendosi anche di strumenti di terze parti. Tali strumenti sono statiil software OCR Tesseract, il framework AForge.NET (per l'elaborazione delleimmagini) e la libreria ITextSharp (per la creazione e modi�ca di documentiPDF).

Il lavoro di tesi viene strutturato come segue: Nel primo capitolo vengonopresentati gli strumenti utilizzati, le loro caratteristiche ed i loro limiti. Vieneinoltre spiegato come essi collaborino con syOCR.

Nel secondo capitolo vengono illustrati i problemi che il progetto deverisolvere, sia quelli conosciuti a priori che quelli emersi durante lo sviluppo.

Nel terzo capitolo viene spiegato come le limitazioni viste nel capitoloprecedente siano state risolte, e con quali margini di miglioramento.

Il quarto capitolo è dedicato all'implementazione ed illustra le tecnicheutilizzate, le classi principali, il funzionamento e le interazioni tra le variemaschere.

Per ultima è presente una conclusione che riassume i risultati ottenuti epropone delle possibili estensioni di quanto �no ad ora realizzato.

Page 8: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi
Page 9: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

Capitolo 1

Strumenti Utilizzati

In questo capitolo vengono descritti gli strumenti utilizzati e le loro carat-teristiche. Nella prima parte viene illustrato il funzionamento di Tesseracte della sua procedura di addestramento. Mentre nella seconda parte ven-gono presentate gli altri componenti utilizzati e il loro ruolo all'interno delprogramma.

1.1 Tesseract

Tesseract è un software OCR1 Open Source, rilasciato sotto licenza Apa-che 2.0, che fornisce alcuni applicativi utilizzabili a riga di comando ed unaAPI2 C++ per la programmazione. Sebbene non sia dotato di interfacciagra�ca, su Internet sono disponibili programmi sviluppati da terze parti chesopperiscono a questa mancanza.

Prima di spiegarne il funzionamento, viene presentata una breve storia diTesseract tracciante i momenti salienti del suo percorso di sviluppo.

Storia

Il motore di Tesseract fu sviluppato come software proprietario della HewlettPackard nei suoi laboratori di Bristol in Inghilterra e di Greeley in Coloradotra il 1985 ed il 1994.

Nel 1996 vennero ultimate alcune modi�che per permettere a Tesseractdi essere utilizzato anche in ambiente Windows. Nel 1998 venne parzialmente

1Optical Character Recognition, sono sistemi che convertono un'immagine contenentetesto in testo digitale modi�cabile tramite un editor (per esempio Emacs, Vim o il blocconote di Windows).

2Application Programming Interface, ovvero un insieme di procedure raggruppate performare un insieme di strumenti speci�ci preposti alla risoluzione di determinati problemi.

Page 10: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

4 Strumenti Utilizzati

migrato il codice �no a quel momento prodotto dal linguaggio C al linguaggioC++. Tale codice è stato poi convertito completamente per poter esserecompilato da un qualsiasi compilatore C++.

Nel decennio successivo lo sviluppo di Tesseract rimase pressoché fermo,�no al 2005, anno in cui la Hewlett Packard decise di rilasciarlo come softwareOpen Source.

Da allora lo sviluppo è proseguito per volontà dell'università di Las Vegas(Nevada), grazie anche alla sponsorizzazione fornita da Google a partire dal2006.

Funzionamento

Essendo Tesseract un software OCR utilizzato per riconoscere testo all'inter-no delle immagini, i suoi input sono semplicemente l'immagine nella qualericonoscere il testo e un �le di output (tipicamente di testo) nel quale scrive-re ciò che è stato trovato. Inoltre, è disponibile tutta una serie di parametriche è possibile impostare a�nché l'intera procedura risulti più accurata inrelazione a ciò che si desidera cercare.Un comando Tesseract ha la forma seguente:

tesseract immagine output [-l lingua] [-psm N] [�lecon�g]

Dove immagine è il percorso, assoluto o relativo, dell'immagine da elabo-rare e output è il nome (senza estensione) del �le di output dove verrannoscritti i valori trovati.

Il parametro opzionale -l lingua indica quale �le di lingua utilizzare. Un �ledi lingua è un �le in formato traineddata contenente tutte le informazioni dicui Tesseract ha bisogno per riconoscere un determinato insieme di caratteri,che vengono appunto raccolti in base alla lingua di appartenenza.

Si possono speci�care più �le di lingua di�erenti, concatenandoli tramitel'operatore +. Il �le di lingua utilizzato di default è eng, relativo alla linguaInglese.

Il parametro opzionale -psm N speci�ca quale modalità di page segmen-tation mode utilizzare. Questa modalità indica all'OCR quali analisi svolgeresull'immagine ed assume che questa abbia determinate caratteristiche, in mo-do tale da sempli�care il processo di ricerca.I valori possibili sono:

- 0: E�ettua solo la determinazione dell'orientamento del testo e deicaratteri (Orientation and Script Detection);

- 1: E�ettua una segmentazione di pagina automatica utilizzando OSD;

Page 11: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

1.1 Tesseract 5

- 2: E�ettua una segmentazione di pagina automatica, ma senza utiliz-zare OSD o l'OCR;

- 3: (Default) E�ettua una segmentazione di pagina automatica più com-pleta, sempre senza utilizzare OSD;

- 4: Assume che sia presente una singola colonna di testo di dimensionevariabile;

- 5: Assume che sia presente un unico blocco uniforme di testo allineatoverticalmente;

- 6: Assume che sia presente un singolo blocco uniforme di testo;

- 7: Tratta l'immagine come se fosse una singola linea di testo;

- 8: Tratta l'immagine come se fosse una singola parola;

- 9: Tratta l'immagine come se fosse una singola parola in un cerchio;

- 10: Tratta l'immagine come se fosse un singolo carattere.

Il parametro opzionale �lecon�g serve per speci�care il nome di un �ledi con�gurazione che si desideri utilizzare (sia quelli disponibili di base chequelli creati dall'utilizzatore).

Un �le di con�gurazione per Tesseract è un semplice �le di testo conte-nente una lista di variabili con i rispettivi valori separati da uno spazio e conuna coppia variabile valore per linea.

Per esempio: il �le digit indica di e�ettuare solo la ricerca dei carattericorrispondenti a cifre presenti all'interno dell'immagine.

Procedura di addestramento

Come spiegato nella sezione precedente, Tesseract mantiene le informazioninecessarie alla ricerca dei caratteri in speci�ci �le di lingua. Tuttavia, puòsuccedere che le informazioni in essi contenute siano incomplete ed in questocaso è necessario istruire l'OCR al riconoscimento dei caratteri mancanti.

I caratteri mancanti non sono necessariamente lettere non presenti nel �ledi lingua. Possono anche essere lettere scritte utilizzando un font particolare,tale per cui Tesseract non riesca ad associarle ad uno dei caratteri che conosce.

Esiste la possibilità di insegnare all'OCR a riconoscere tali caratteri me-diante la procedura di addestramento (training). Tale procedimento consistenel creare un nuovo �le di lingua contenente le informazioni relative ai carat-teri che desideriamo vengano riconosciuti, in modo che possa essere utilizzatoassieme ai �le di lingua originale.

Page 12: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

6 Strumenti Utilizzati

Fasi

La procedura di addestramento di Tesseract non è breve, ma può essereautomatizzata �no a raggiungere un buon livello di accuratezza.Le fasi principali del processo di training sono le seguenti:

1. Generazione del �le box. Tale �le contiene le bounding box3 dei ca-ratteri da riconoscere, ognuna di esse associata al valore che Tesseractritiene corretto. Questo �le deve essere modi�cato manualmente persostituire il valore riconosciuto dall'OCR con il valore giusto;

2. Addestramento di Tesseract a partire dal �le box. Questa fase generaun �le tr contenente varie informazioni (su forma, font utilizzato e datinecessari a costruirne un prototipo) per ogni carattere presente nel �lebox modi�cato in precedenza;

3. Generazione del �le unicharset. Tale �le serve per speci�care a Tes-seract l'insieme dei possibili caratteri che può mandare in output, ba-sandosi sulle informazioni contenute dal �le tr appena generato;

4. Creazione dei prototipi dei caratteri, parte centrale del processo di ri-conoscimento. Vengono creati clusterizzando le proprietà raccolte nei�le generati in precedenza. I �le generati sono shapetable, inttemp,p�mtable e normproto;

5. Combinazione dei �le, per generare il �le traineddata. Questa fasegenera solo il �le di lingua, ma è necessario che i �le da combinareassieme abbiano come intestazione il nome della lingua che si vuolegenerare (il �le si chiamerà lingua.traineddata).

Oltre a quanto detto �nora, è importante sapere che i caratteri sui qualiaddestrare Tesseract possono essere scritti in più font diversi. Quindi è ne-cessario creare un �le denominato font_properties contenente una lista ditali font, con una linea per ognuno di essi.

Ogni linea è formata dal nome del font (che deve essere privo di spazi),uno spazio e cinque valori separati da spazi che indicanti la tipologia del font:italico, grassetto, �ssato, serif (cioè con grazie) e gotico.

Inoltre il nome del font in questo �le deve essere uguale al nome del fontnel �le tr, dove viene riportato per ogni carattere ivi presente.

3Una bounding box è un'area che delimita un determinato contenuto. Nel nostro casoavrà la forma di un rettangolo e memorizzarla signi�ca salvarne le coordinate.

Page 13: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

1.1 Tesseract 7

La procedura di training viene lanciata a partire da una immagine conte-nente tutti i caratteri che Tesseract non riesce a riconoscere o per i quali resti-tuisce un valore sbagliato. Nonostante tutta la procedura sia automatizzabile,la correzione del �le box rimane un passaggio da e�ettuare manualmente.

Nel caso di syOCR viene richiesto l'intervento dell'utente tramite unamaschera che lo aiuti nel processo, nascondendogli i dettagli implementativi.

Aggiornamento di addestramenti precedenti

Grazie alla procedura di addestramento Tesseract risulta molto versatile.Purtroppo può succedere che sia necessario aggiungere caratteri ad un �le dilingua generato in precedenza, piuttosto che crearne direttamente uno nuovo.

Esiste la possibilità di farlo, ma il procedimento richiede più attenzioneed è di�cilmente automatizzabile. Questo perché non è possibile aggiungeredati ad un �le traineddata in maniera incrementale.Le fasi attraverso le quali questo processo di aggiornamento si sviluppa sonole seguenti:

1. Filtrare tutti i box �le, selezionando e mantenendo solo i caratteridesiderati;

2. Lanciare il processo di addestramento descritto nella sezione precedentesui box �le ottenuti al passo 1. per ottenere i �le tr;

3. Modi�care i �le tr per ogni font (per esempio basandosi su quelli già pre-senti nei vecchi �le di lingua) aggiungendoci i propri dati per ottenerel'insieme di caratteri desiderato;

4. Ripetere il passo 3. per ogni box �le ottenuto dall'esecuzione del passo1.;

5. Terminare il processo di addestramento con i �le tr appena generati.

Tale procedura è complessa, e richiede una certa attenzione per poter essereeseguita correttamente.

Una soluzione alternativa e più semplice consiste nel generare via vianuovi �le box e tr e poi utilizzarli tutti insieme nel corso della procedura diaddestramento. Il limite di questa strategia è che, per la generazione di unsingolo �le di lingua, vi è un limite massimo di 32 �le tr.

Siccome un �le tr può contenere informazioni su uno ed un solo font,anch'essi sono limitati ad essere 32. Nel caso di syOCR un font corrispondeal risultato di un addestramento, in quanto non è possibile fare distinzioniprecise (a priori) su quelli utilizzati nelle tavole.

Page 14: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

8 Strumenti Utilizzati

Inoltre i box �le devono contenere la stessa sequenza di caratteri dei �letr, e vanno dunque raggruppati ed aggiornati nello stesso ordine.

1.2 Framework AForge.NET

AForge.NET è un framework scritto in linguaggio C# utilizzato principal-mente nei campi dell'intelligenza arti�ciale4 e della visione arti�ciale5 ed inminor misura anche per elaborazione di immagini, reti neurali, algoritmigenetici, robotica ed altro ancora.

Caratteristiche utilizzate in syOCR

In questo progetto AForge viene sfruttato solamente per l'elaborazione delleimmagini, con l'obiettivo di restringere l'area dove Tesseract deve e�ettuareil riconoscimento del testo.

In particolare vengono sfruttati i namespace AForge.Imaging e AFor-ge.Imaging.Filters.

Il primo contiene metodi e interfacce per l'elaborazione di immagini intesanel senso più ampio possibile, dalla ricerca di forme alla semplice modi�ca diesse mediante l'applicazione di �ltri (campo dell'altro namespace utilizzato).

Il secondo fornisce metodi ed interfacce per trasformare, mediante l'uti-lizzo di �ltri come già accennato, l'immagine sorgente in un oggetto nuovodirettamente manipolabile.

1.3 Libreria ITextSharp

ITextSharp è il porting per il framework .NET della libreria Open SourceJava IText. Viene utilizzata per la creazione, la modi�ca e l'elaborazione didocumenti in PDF ed è molto popolare, come dimostrano i cinque milioni didownload a metà 2013 dichiarati dal solo sito di �le hosting SourceForge.

4Insieme di algoritmi e tecniche che consentano alle macchine di mostrare capacitàintellettive il più possibile simili a quelle possedute dall'uomo.

5Insieme dei processi e degli studi aventi come obiettivo la costruzione di un modelloapprossimato del mondo reale a partire da immagini bidimensionali. Suo scopo principaleè riprodurre la vista umana in modo quanto più possibile completo.

Page 15: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

1.3 Libreria ITextSharp 9

Caratteristiche utilizzate in syOCR

In syOCR ITextSharp è stata utilizzata per elaborare il contenuto dei ca-taloghi ricambi in PDF al �ne di costruire documenti pronti per essere resinavigabili, evidenziando le aree che dovranno essere linkate6.

Viene utilizzato il namespace itextsharp.text, ed in particolare le classiPdfWriter e PdfReader, oltre a tutta una serie di classi utilizzate pergestire il contenuto dei documenti (PdfRectangle, Document, Image edaltre).

La classe PdfReader serve semplicemente per leggere il contenuto di undocumento PDF, e fornisce metodi utili per navigarlo. In questo progettoviene sfruttata per ricavare le pagine contenenti le tavole, che saranno quelleche andremo ad elaborare una volta trasformate in immagini.

Le classi PdfWriter e PdfStamper servono entrambe per scrivere contenu-to su un documento PDF. La prima sia su documenti già creati che da creare,mentre la seconda deve essere associata ad un oggetto di classe PdfReadere quindi ad un PDF già esistente. In syOCR vengono entrambe utilizzateper scrivere il contenuto risultato dell'elaborazione sul documento PDF darestituire come output.

6Con area linkata si intende un'area del documento PDF nella quale sia presente uncollegamento ipertestuale, con determinati parametri, ad un'altra risorsa o programma.

Page 16: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi
Page 17: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

Capitolo 2

Problematiche A�rontate

In questo capitolo vengono introdotte ed illustrate le problematiche che han-no portato alla realizzazione di questo progetto e quelle emerse durante losviluppo.

2.1 Considerazioni Iniziali

Il programma syOCR può manipolare due tipi di input diversi:

� Catalogo ricambi in formato PDF: è un documento contenente una seriedi tavole tecniche (solitamente generate con sistemi CAD1), ognunadelle quali associata ad una distinta dei pezzi disegnati in essa;

� Immagine (in formato tif, png oppure jpg) di una singola tavola, inquesto caso senza la distinta dei singoli pezzi. Queste immagini sonosolitamente il risultato di scansioni di vecchi cataloghi ricambi cartacei.

La distinta è una tabella dove ad ogni codice presente nella tavola associatavengono collegate e mostrate varie informazioni (ad esempio la descrizione ola marca).

Nel caso dei cataloghi in formato PDF ciò che si richiede al programmaè il recupero di tutti i codici presenti nella tavola in modo tale da poterassociare ad ognuno di essi i dati presenti nella distinta. Per le immagini sivogliono solo ricavare i codici presenti nella tavola, in quanto la distinta è giàpresente in un altro formato.

Come accennato nel capitolo precedente, l'utilizzo di AForge ha lo scopodi restringere l'area nella quale Tesseract e�ettuerà la sua scansione. I codici

1Computer Aided Design, termine che indica le tecnologie software volte a supportarel'attività di disegno tecnico di modelli di manufatti reali.

Page 18: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

12 Problematiche A�rontate

contenuti nelle tavole sono spesso (anche se non sempre) contenuti in areedelimitate da cerchi, quindi lo scopo di AForge è appunto trovare queste aree,che chiameremo blob.

2.2 Ricerca dei Blob

Per AForge un blob è una forma o un'area dell'immagine che si sta elaborandoche abbia determinate proprietà, tipicamente de�nite da utente.

I problemi legati alla ricerca di questi blob sono principalmente due:

� I codici presenti nelle tavole non sono sempre contenuti in aree di for-ma circolare. Potrebbero essere di un'altra forma (spesso ellittica) op-pure potrebbero non essere delimitate, rendendo di fatto impossibileidenti�carne la posizione;

� Queste aree potrebbero non essere sempre della stessa dimensione. Imetodi forniti da AForge limitano la dimensione dei blob da cercare adun certo valore. Nel nostro caso, i cerchi dovranno avere un diametrodi lunghezza non superiore a tale valore massimo.

Il secondo problema è aggirabile, in quanto AForge permette di stabilirequesta dimensione massima. I rischi nascono dal fatto che tale parametropuò variare molto da catalogo a catalogo e talvolta anche da tavola a tavola.

Invece il primo problema non è risolvibile con l'utilizzo degli strumentipresentati �no ad ora: AForge non è in grado di riconoscere le forme ellittiche,e comunque i codici non delimitati non riusciremmo a riconoscerli.

2.3 Riconoscimento dei Valori dei Codici

Tesseract è accurato, ma non infallibile. Può capitare che una tavola presentidei caratteri che non riesce a riconoscere, o per i quali restituisce un valoreerrato.

Per questo è necessario introdurre una procedura che consenta all'uten-te di addestrare l'OCR sui caratteri non riconosciuti (quelli erroneamentevalutati non sono univocamente determinabili).

Bisogna perciò mettere in piedi un sistema per automatizzare il più pos-sibile il procedimento senza generare troppi �le di lingua, che potrebberorallentare parecchio l'esecuzione del programma. Inoltre i �le così generatidovranno essere già disponibili per la successiva scansione.

Per quanto riguarda i codici erroneamente valutati (e quelli non trovati)è necessario introdurre una procedura di veri�ca che consenta all'utente di

Page 19: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

2.4 Problemi Legati alla Veri�ca 13

correggerne, aggiungerne o rimuoverne, il tutto nella maniera più intuitivapossibile.

2.4 Problemi Legati alla Veri�ca

La procedura di veri�ca non è banale, in quanto deve consentire all'utentedi visualizzare ciò che sta modi�cando. Durante la scansione di Tesseract idati relativi a coordinate, dimensione e valore dei blob vengono gestite inte-ramente dal programma. Invece durante la veri�ca tali informazioni devonoessere estrapolate dal lavoro dell'utente.

Il problema principale è la gestione delle coordinate, in quanto le dimen-sioni della tavola utilizzata durante la scansione e le dimensioni della tavolamostrata durante la veri�ca possono essere diverse (e nella maggioranza deicasi lo sono).

Serviranno dei metodi che e�ettuino correttamente la conversione tra ledimensioni e che separino la gestione delle coordinate utilizzate in fase diveri�ca dalla gestione delle coordinate e�ettive sull'immagine. Queste ultimesaranno quelle che verranno utilizzate per evidenziare le aree da linkare suldocumento PDF �nale.

2.5 Ricerca del Codice della Tavola

Nella maggior parte delle tavole è anche presente il codice della tavola stes-sa, utilizzato per distinguere tra di loro le distinte. Visto che è contenutonell'immagine, Tesseract può essere utilizzato per riconoscerlo.

Il problema è che il codice tavola non è contenuto in un'area circolare,quindi non possiamo considerarlo alla stregua degli altri blobs. Ci serve unaprocedura per selezionare l'area nella quale Tesseract dovrà andare a cer-care questo codice. Per fare questo è comoda una maschera simile a quellautilizzata nella procedura di veri�ca.

In questo caso la gestione delle coordinate è più semplice, ma è comun-que presente a causa del fatto che le immagini delle singole tavole verrannoridimensionate.

Page 20: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi
Page 21: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

Capitolo 3

Soluzioni Adottate

In questo capitolo viene spiegato come le problematiche illustrate nel capi-tolo precedente sono state analizzate e risolte all'interno del programma, inaccordo con le tecnologie ed i metodi utilizzati.

3.1 Ricerca dei Blob

Nel capitolo precedente sono stati introdotti due problemi relativi alla ricercadei blob nell'immagine della tavola: la forma dell'area che delimita il codicenon è univoca e la sua dimensione può variare molto anche all'interno dellostesso catalogo.

Per quanto riguarda il primo problema non si può lanciare Tesseract suun'area troppo vasta, perché non riusciremmo a disambiguare il testo relativoai codici dal restante testo contenuto nella tavola. Quindi sfruttiamo AForgeper restringere la ricerca ai soli codici delimitati da aree circolari.

Per i codici non delimitati o delimitati da aree di forma non circolare,si introduce una procedura di veri�ca che consenta all'utente di selezionaremanualmente l'area contenente il codice stesso e di assegnarle un valore. Taleprocedura mostra all'utente la tavola e memorizza le nuove selezioni fatte, lemodi�che e�ettuate e i blob rimossi (per esempio perché falsi positivi1).

Tale procedura è soggetta ai problemi legati alle coordinate spiegati nelcapitolo precedente, per i quali vedremo la soluzione adottata nel prosieguodi questo capitolo.

Per quanto riguarda il secondo problema è stata parametrizzato il valoreda attribuire alla dimensione massima dei blob, in modo tale che l'utente

1Nel nostro caso un falso positivo è un'area circolare contenente un valore che nonè un codice valido ma per le quali Tesseract restituisce un valore (che dunque non saràsigni�cativo).

Page 22: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

16 Soluzioni Adottate

(che ha un'idea di quanto sia questa dimensione massima) possa modi�carlacome crede.

Chiaramente aumentando la dimensione massima aumenta anche il nu-mero di falsi positivi riscontrati ed, essendo in generale più alto il numero diblob trovati all'interno della tavola, aumenta anche il tempo di elaborazionecomplessivo.

3.2 Riconoscimento dei Valori dei Codici

Oltre ai falsi positivi, c'è anche il problema relativo ai valori che Tesseractnon riesce a riconoscere. Per questi valori è stata introdotta una proceduradi addestramento dell'OCR che, a partire dalle immagini dei singoli blob nonriconosciuti (ricavate durante la scansione della tavola) permette all'utentedi speci�care per essi il valore corretto.

Tale valore verrà utilizzato per modi�care dinamicamente il box �le ge-nerato dal primo passo della procedura di training prima di terminare lesuccessive fasi del processo, che sono automatizzate.

Essendo una procedura che presenta molti vincoli, si è scelto di nasconderetali limitazioni all'utente adottando soluzioni quanto più possibile generiche.Di seguito vengono elencate tutte le strategie adottate:

� Quando Tesseract non riconosce dei caratteri, assegna loro il nomedi font UnknownFont. Questo aiuta la modi�ca del �le tr e del �lefont_properties, in quanto è su�ciente generare un nome di font a li-vello di programma e sostituirlo all'interno dei due �le sopracitati. Perquanto riguarda le caratteristiche del font, siccome nella maggioranzadei casi i caratteri sono cifre, tutti i valori di tali proprietà sarannosettati a 0 (ovvero False);

� Nel momento in cui capita di dover aggiornare un addestramento svoltoin precedenza, verranno utilizzati i �le box e tr generati in precedenza(che quindi resteranno memorizzati �no alla chiusura del programma),oltre a quelli appena ottenuti, per terminare la procedura. Nel caso incui si superi il limite di 32 �le, verrà generato un nuovo �le di lingua;

� La sincronizzazione tra le informazioni contenute nei vari �le è facileda mantenere, in quanto la procedura automatica svolge sempre glistessi passi, seguendo l'ordine necessario a�nché i �le vengano generaticorrettamente.

La procedura di addestramento può essere eseguita solamente se i caratterisui quali istruire Tesseract sono almeno cinque. In caso contrario non viene

Page 23: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

3.3 Veri�ca dei Risultati e Ricerca del Codice Tavola 17

generato il box �le perché sono stati raccolti troppi pochi dati per potercreare un �le di lingua signi�cativo.

3.3 Veri�ca dei Risultati e Ricerca del Codice

Tavola

Le maschere che si occupano della veri�ca dei risultati ottenuti dalla scan-sione di Tesseract e della selezione dell'area dove cercare il codice tavole sibasano sullo stesso principio di funzionamento.

In entrambi i casi viene visualizzata una pagina del documento PDF allavolta (quindi anche le pagine contenenti le distinte, che in questo caso sarannoignorate) e per ognuna di esse viene data all'utente la possibilità di:

� Intervenire sui valori dei blob riconosciuti da Tesseract, con lo scopo diaggiungerne, modi�carne o rimuoverne (nel caso della veri�ca);

� Selezionare un'area della pagina dove verrà ricercato il codice tavola.Tale area è unica, nel senso che Tesseract cercherà il codice tavola,per ogni pagina, solo nello spazio contenuto all'interno della selezionedell'utente.

L'immagine che viene utilizzata per e�ettuare queste operazioni non è l'im-magine originale della pagina del documento. Per agevolare la ricerca di Tes-seract le singole pagine vengono ingrandite ad una risoluzione di 600 DPI2,e durante la veri�ca tale immagine viene ridimensionata per poter esserecontenuta all'interno della maschera.

Per ogni �le elaborato viene mantenuto un �le in formato XML conte-nente una riga per ogni blob rilevato con varie informazioni, tra le quali lecoordinate dell'angolo superiore sinistro dell'area, la sua larghezza e la suaaltezza (oltre ovviamente al valore riconosciuto).

Tali valori si riferiscono inizialmente all'immagine scalata a 600 DPI, etutte le modi�che e le aggiunte che l'utente farà sulla sua controparte ridi-mensionata andranno memorizzate tenendo conto del fattore di conversionetra le coordinate originale e quelle dell'immagine contenute nella maschera.

Questa conversione va eseguita con attenzione, in quanto risulta diretta-mente sull'impressione che l'utente ha dell'intuitività di tutta la procedura(in quanto tali aree vengono visualizzate se l'utente lo richiede). Grazie ai

2Dots Per Inch, è un valore che indica la quantità di punti stampati o visualizzati suuna linea lunga un pollice (2.54 centimetri).

Page 24: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

18 Soluzioni Adottate

dati in possesso del programma, si calcola il rapporto tra le dimensioni al ca-ricamento dell'immagine nella maschera e poi tale rapporto viene utilizzatoogniqualvolta ce ne sia bisogno per ricavare delle coordinate.

Page 25: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

Capitolo 4

Implementazione di syOCR

In questo capitolo verranno descritte le classi e le maschere implementateper il programma syOCR. Nella prima sezione viene illustrata la strutturautilizzata, giusti�cando la scelta di dividere l'applicazione in due program-mi distinti. Nelle successive due sezioni sono dedicate alla descrizione deidue programmi, indicando le principali maschere e classi realizzate. L'ulti-ma sezione tratta dell'interazione tra i due programmi durante un ciclo diesecuzione completo.

4.1 Considerazioni Iniziali

La procedura di addestramento di Tesseract e la procedura di scansioneprecedente alla veri�ca dei risultati sono due processi che devono essereseparati.

Questo perché la procedura di training assume che i dati sui quali si lavoranon siano sicuri, e quindi non prevede di dover realizzare il documento PDF�nale. Invece la scansione precedente al processo di veri�ca considera chel'OCR sia in grado di riconoscere la maggior parte dei codici presenti nellevarie tavole.

Per questo motivo si è deciso di separare questi due processi scrivendodue programmi distinti, che presentano molte somiglianze, e collaborano tradi loro.

I programmi possono essere lanciati separatamente oppure uno di se-guito all'altro, prima quello che implementa la procedura di addestramentoe successivamente quello che e�ettua scansione, veri�ca e realizzazione deldocumento PDF �nale.

I programmi sono stati chiamati TrainingMode e NormalMode, e nelseguito di questo documento verranno indicati utilizzando questi nomi.

Page 26: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

20 Implementazione di syOCR

4.2 Programma TrainingMode

La maschera iniziale del programma contiene due TextBox nelle quali inserireil percorso della cartella contenente i �le da elaborare ed il percorso dellacartella dove mettere i �le generai dall'elaborazione. Queste TextBox sonoassociate a due pulsanti ... che consentono di selezionare le cartelle desideratetramite una maschera minimale di explorer.

Figura 4.1: Maschera iniziale del programma

Inoltre presenta tre pulsanti:

� Con�gura - Per aprire la maschera di con�gurazione;

� Training - Per lanciare la scansione di Tesseract al termine della qualesi aprirà (se necessario) la maschera di addestramento;

� Elabora PDF - Per chiudere la maschera e passare all'esecuzione delprogramma NormalMode.

Nelle sezioni successive verranno prima illustrate le maschere di con�gu-razione e addestramento, per poi passare alla descrizione delle classi piùsigni�cative del programma.

4.2.1 Maschera di con�gurazione

La maschera di con�gurazione viene utilizzata per consentire all'utente dimodi�care i valori prede�niti dei parametri che Tesseract richiede per lasua scansione. La dimensione dei blob (espressa in pixel) indica la lunghezzamassima del diametro delle aree circolari che AForge cercherà all'interno della

Page 27: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

4.2 Programma TrainingMode 21

Figura 4.2: Maschera di con�gurazione

tavola. Tale valore è inizialmente settato a 200, ma può essere modi�cato aseconda delle esigenze dell'utente.

Sono poi presenti due ListBox che elencano rispettivamente le lingue di-sponibili e le lingue che verranno utilizzate per la scansione. Di default sonoselezionate tutti �le di lingua trovati sotto la cartella Tesseract\tessdata1, mal'utente può scegliere di aggiungerne o rimuoverne, sia tutte che solo alcunedi esse.

In�ne è presente un pulsante Annulla per chiudere la maschera senzamodi�care nulla all'interno del �le di con�gurazione.

Una volta che l'utente ha operato le modi�che che ritiene necessarie (an-che se non ha variato nulla) ed ha premuto il pulsante Salva, tutte le infor-mazioni vengono salvate in un �le denominato config.ini. Durante le suc-cessive esecuzioni del programma verranno sempre utilizzati i valori salvatiall'interno di tale �le.

4.2.2 Maschera di addestramento

La maschera di addestramento viene lanciata al termine della scansione ese-guita da Tesseract e serve appunto per eseguirne la procedura di training.

1È la cartella contenente tutti i �le di lingua di cui l'OCR dispone e che può utilizzaredurante le scansioni.

Page 28: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

22 Implementazione di syOCR

A�nché tale processo possa essere eseguito è necessario che i caratteri chevogliamo insegnare all'OCR siano almeno cinque. Se così non fosse, Tesse-ract non riuscirebbe a generare il box �le ed il processo si interromperebbeimmediatamente. Questa maschera contiene una PictureBox nella quale ven-

Figura 4.3: Maschera di addestramento

gono visualizzate una alla volta le immagini dei singoli blob non riconosciuti.L'utente può navigare tra le immagini mediante una serie di controlli:

� I pulsanti � e �, per passare rispettivamente all'immagine precedenteo all'immagine successiva;

� I pulsanti |� e �|, per passare rispettivamente all'ultima immagine oalla prima immagine;

Page 29: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

4.2 Programma TrainingMode 23

� Una TextBox nella quale inserire il numero (nella sequenza) del blobche si desidera vedere. Dopo aver premuto il tasto Invio sulla tastierail programma carica l'immagine corrispondente.

Per ogni blob visualizzato c'è la possibilità di speci�care un valore, che ilprogramma scriverà nel box �le modi�cato alla posizione corretta. Inoltre,siccome potrebbero essere considerati come blob non riconosciuti anche partidel disegno contenute in aree circolari ma non contenenti un codice, si puòspuntare la CheckBox Non è un numero per indicare al programma di nonaddestrare l'OCR su tale simbolo.

Inoltre sono presenti dieci Label, inizialmente colorate di rosso, rappre-sentanti tutte le dieci cifre. Ogni volta che viene speci�cato il valore di unodei blob, vengono colorate di verde tutte le cifre presenti in quel numero.

Questo serve perché se l'utente deve insegnare a Tesseract un font cheesso non conosca, riesce a tenere traccia di quante cifre ha già inserito. Ciò sirende necessario in quanto i cataloghi ricambi sono tipicamente molto grandi,e se Tesseract sbaglia tutti i codici scritti con un determinato font i blob nonriconosciuti possono essere in numero molto elevato.

Se invece, come in �gura 4.3, è stato semplicemente scansionato un �leche presenta i caratteri girati di 90 gradi, non è importante quante cifre sianostate inserite, perché probabilmente Tesseract conosce già il font utilizzato.

Una volta che l'utente ha speci�cato un valore per ogni blob, può pre-mere il pulsante Avvia training per lanciare e�ettivamente la proceduradi addestramento. La procedura genera il box �le, lo modi�ca con i datiforniti da utente, e poi esegue tutti i passi successivi. Durante il processogenera e modi�ca automaticamente i �le tr e font_properties, decidendoautonomamente il nome del font e il nome della lingua sulla base dei trai-ning precedentemente eseguiti. Una volta generato il �le di lingua, esso vienespostato sotto la cartella Tesseract\tessdata.

La TextBox posta sotto al pulsante Avvia training segnala all'utente ipassi eseguiti ed eventuali errori riscontrati durante l'addestramento.

Quando sono stati terminati tutti i passaggi, l'utente può uscire dallamaschera mediante il pulsante Fine training.

4.2.3 Classe OCREngine

La classe OCREngine è la classe principale del programma TrainingMode.Contiene infatti tutti i metodi utilizzati durante la scansione di Tesseract edurante la procedura di addestramento, oltre ad alcuni metodi di supporto.Di seguito ne viene presentata una lista:

Page 30: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

24 Implementazione di syOCR

� �1 Public Function RetrieveFiles(pathManag As pathManager)

As System.Collections.Generic.List(Of String) � �Restituisce la lista dei �le da esaminare durante l'elaborazione corrente;

� �1 Public Function UnifyNotRecognized(pathManag As

pathManager , outFileName As String , paths As System.

Collections.Generic.List(Of String)) As String � �Unisce tutte le immagini dei singoli blob non riconosciuti in un'unica imma-gine da usare per il processo di training;

� �1 Public Sub GenerateBoxFile(pathManag As pathManager ,

outFileName As String) � �Genera il box �le a partire dall'immagine contenente tutti i blob non ricono-sciuti;

� �1 Public Sub UpdateBoxFile(pathManag As pathManager ,

outfileName As String) � �Aggiorna il box �le con le informazioni fornite dall'utente;

� �1 Public Function UpdateFontProperties(pathManag As

pathManager , outFileName As String , cont As Integer)

As String � �Crea o aggiorna il �le font_properties usando come nome del font la combi-nazione nomeImmagineNumProgressivo;

� �1 Public Sub GenerateTrFile(pathManag As pathManager ,

outFileName As String) � �Genera il �le tr a partire dal box �le modi�cato;

� �1 Public Sub CorrectFontName(pathManag As pathManager ,

outFileName As String , fontName As String) � �

Page 31: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

4.2 Programma TrainingMode 25

Cambia il nome del font nel �le font_properties per renderlo uguale al nomedel font nel �le tr;

� �1 Private Function GetConfigFiles(pathManag As pathManager ,

fileNames As System.Collections.ObjectModel.

ReadOnlyCollection(Of String), extension As String)

As String � �Restituisce la lista dei parametri, a seconda del contenuto del �le di con�gura-zione, per i comandi unicharset_extractor, shapeclustering, mftrainingo cntraining;

� �1 Public Sub ExtractUnicharset(pathManag As pathManager ,

outfilename As String) � �Esegue il comando unicharset_extractor;

� �1 Public Sub Execute_shapeclustering(pathManag As

pathManager , outfilename As String) � �Esegue il comando shapeclustering;

� �1 Private Function GetMaxIndex(pathManag As pathManager) As

Integer � �Ritorna l'indice presente nel nome del �le di con�gurazione relativo all'ulti-ma lingua memorizzata;

� �1 Private Function GetAllFilesToAdd(pathManag As

pathManager , outFileName As String) As System.

Collections.Generic.List(Of String) � �Restituisce una lista contenente tutti i nomi dei box �le e dei �le tr daaggiungere al �le di con�gurazione relativo alla lingua che verrà generatadall'esecuzione corrente;

� �1 Public Function GenerateHeader(pathManag As pathManager ,

outFileName As String) As String � �

Page 32: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

26 Implementazione di syOCR

Crea il �le di con�gurazione relativo al �le di lingua che si sta creando du-rante l'esecuzione corrente;

� �1 Public Function UpdateHeader(pathManag As pathManager ,

outFileName As String) As String � �Aggiorna il �le di con�gurazione con i nomi dei �le utilizzati durante la fasedi addestramento corrente;

� �1 Public Sub Execute_mftraining(pathManag As pathManager ,

outfilename As String) � �Esegue il comando mftraining;

� �1 Public Sub Execute_cntraining(pathManag As pathManager ,

outfilename As String) � �Esegue il comando cntraining;

� �1 Public Sub RenameTrainedFiles(pathManag As pathManager ,

outFileName As String) � �Rinomina con un'intestazione comune tutti i �le necessari all'addestramentodi Tesseract;

� �1 Public Sub CombineTessdata(pathManag As pathManager) � �

Combina i �le ottenuti dal processo di training ed ottiene il �le di linguatraineddata;

� �1 Public Sub DeleteUsedBlobs(pathManag As pathManager) � �

Elimina tutte le immagini dei blob non riconosciuti durante la scansione pre-cedente;

� �1 Public Sub AnalyzePNG_Tesseract(pM As pathManager ,

imageName As String , ByRef balloons As Pallini ,

outputFileName As String , debug As Boolean , language

As String , dimension As Integer) � �

Page 33: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

4.2 Programma TrainingMode 27

Analizza una pagina e restituisce una nuova immagine in cui tutti i blob trova-ti sono contrassegnati dal valore ricavato da Tesseract, oltre ad un'immagineper ogni blob non riconosciuto.

4.2.4 Classe pathManager

La classe pathManager serve per gestire tutti gli indirizzi assoluti dellecartelle utilizzate dal programma. Questi indirizzi sono:

� Il percorso della cartella sorgente del processo dalla quale verrannoprelevati i �le (PDF o immagini) da elaborare;

� Il percorso della cartella destinazione del processo nella quale verrannosalvati i risultati dell'esecuzione del programma;

� Il percorso della cartella attuale, creata all'interno della directory didestinazione, dove vengono salvati i �le relativi all'analisi del �le cor-rente.

La classe pathManager tiene memorizzate queste informazioni durante l'in-tera esecuzione del programma, fungendo di fatto da struttura di appoggio.Inoltre contiene l'intestazione che verrà utilizzata per generare il �le di linguaal termine del processo di addestramento, se necessario.

4.2.5 Classe Analyzer

La classe Analyzer implementa i metodi necessari alla gestione dell'esecu-zione del programma nella sua completezza. Oltre alla procedura costruttoreNew, presenta solo altre tre procedure:

� �1 Public Sub Analyze(debug As Boolean) � �

Avvia il processo di scansione del documento corrente, analizzando una pa-gina alla volta. Se il �le di input è una singola immagine, viene ridimensionasecondo dimensioni standard e poi analizzata. Al termine della scansione lan-cia la maschera di addestramento, se necessario;

� �1 Public Sub AnalyzePage(pageNum As Integer , totalPages As

Integer , debug As Boolean) � �Trasforma la pagina corrente in immagine a 600 DPI ed esegue la ricerca diblob e il riconoscimento di Tesseract su di essa;

Page 34: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

28 Implementazione di syOCR

� �1 Private Function resizeImage(image As Bitmap , ratio As

Single , ByRef stdWidth As Single , ByRef stdHeight As

Single) As Bitmap � �Ridimensiona la Bitmap passata come parametro relativamente alle dimen-sioni standard, che nel nostro caso sono quelle di un'immagine a 600 DPI dirisoluzione ovvero 7017x4961.

4.2.6 Altre classi

Oltre a quelle descritte nelle sezioni precedenti, vi sono altre quattro classi,tutte di supporto all'esecuzione del programma TrainingMode. Tali classisono:

� La classe Pallino modella un'entità rappresentante le aree circolari,presenti nelle varie tavole, contenenti i codici. Essendo un'astrazionedel concetto di area contenente un codice questa classe presenta solouna lista di proprietà e nessun metodo. Quindi viene mostrata peresteso� �

1 Public Class Pallino

2

3 Public isEmpty As Boolean = False

4 Public xPng As Single = 0 'X angolo sup sx

5 Public yPng As Single = 0 'Y angolo sup sx

6 Public xPngMax As Single = 0 'Larghezza immagine

7 Public yPngMax As Single = 0 'Altezza immagine

8 Public widthPng As Single = 0 'Larghezza pallino

9 Public heightPng As Single = 0 'Altezza pallino

10 Public value As String = "" 'Valore riconosciuto

11

12 End Class � �� La classe Pallini implementa una collezione di oggetti di tipo Pallino efornisce un metodo per l'aggiunta di un elemento alla collezione. Anchequesta classe viene mostrata per esteso� �

1 Public Class Pallini

2 Inherits System.Collections.Generic.List(Of

Pallino)

3

Page 35: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

4.2 Programma TrainingMode 29

4 Public Sub addElement(xPng As Single , yPng As

Single , xPngMax As Single , yPngMax As Single ,

widthPng As Single , heightPng As Single ,

value As String)

5

6 Dim p As New Pallino

7 p.xPng = xPng

8 p.yPng = yPng

9 p.xPngMax = xPngMax

10 p.yPngMax = yPngMax

11 p.widthPng = widthPng

12 p.heightPng = heightPng

13 p.value = value

14

15 If (value <> "") Then

16 p.isEmpty = True

17 End If

18 Me.Add(p)

19

20 End Sub

21 End Class � �� La classe Logger gestisce operativamente gli output che vengono mo-strati all'utente durante l'esecuzione del programma. Viene utilizza-ta per mostrare il conteggio dei �le (metodo LogFile) e delle pagine(metodo LogPage), man mano che vengono scansionate, nelle due La-bel presenti nella maschera iniziale del programma. È inoltre usataper scrivere nella TextBox della maschera relativa alla procedura diaddestramento i passi eseguiti e gli errori riscontrati (metodo Log);

� La classe Utils fornisce metodi per lavorare su �le. Siccome in questoprogramma vengono svolte molte operazioni di spostamento e cancella-zione di �le, si è reso necessario implementare una classe che raccoglies-se i metodi più frequentemente utilizzati. Utils ha due soli metodi (mapossono esserne aggiunti altri): deleteFile, per cancellare un �le datoil percorso, emoveFile, per spostare un �le dalla sua locazione inizialead una data nuova posizione, espressa tramite un indirizzo assoluto.

Tutte le classi illustrate in questa sezione e nelle due sezioni precedentisono presenti anche nel programma NormalMode, ma subiscono alcunemodi�che, dovute al fatto che la struttura dei due applicativi è di�erente.

Page 36: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

30 Implementazione di syOCR

4.3 Programma NormalMode

La maschera iniziale del programma NormalMode presenta più controllirispetto alla maschera iniziale del programma TrainingMode, seppure similenella struttura.

Anche in questo caso abbiamo due TextBox associate a due pulsantiper la selezione delle cartelle sorgente e destinazione, un pulsante Con�guraper aprire la maschera di con�gurazione (che però presenta delle di�erenze)ed un pulsante Scansiona PDF per avviare la scansione di Tesseract. Inoltre

Figura 4.4: Maschera iniziale del programma NormalMode

sono presenti due CheckBox:

� Abilita veri�ca che, se spuntata, speci�ca di lanciare la maschera ela relativa procedura dei risultati ottenuti al termine della scansione;

� Genera PDF automaticamente che, se spuntata, indica che al ter-mine della procedura di veri�ca verranno generati automaticamente iPDF pronti per essere linkati, senza che l'utente li selezioni a manotramite la CheckedListBox sottostante.

Page 37: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

4.3 Programma NormalMode 31

In�ne, è presente una GroupBox relativa alla generazione del PDF �nale.Contiene una CheckedListBox che elenca i nomi dei �le originali trovati nellacartella sorgente.

Ognuno di essi può essere selezionato oppure no (di default sono tuttideselezionati). Per ogni �le selezionato quando l'utente preme il pulsanteGenera PDF, viene creato un nuovo �le PDF che ha, in corrispondenzadelle coordinate dei codici (sia quelli trovati da Tesseract che quelli aggiuntidall'utente durante la veri�ca), il valore ad essi associato scritto in modo danon essere visibile ma soltanto selezionabile.

4.3.1 Maschera di veri�ca

La maschera di veri�ca è piuttosto complessa, e viene sempre lanciata atutto schermo (vedere la �gura 4.5 nella pagina successiva), per dar modoall'utente di visualizzare nel modo più chiaro possibile ciò che sta facendo.Di seguito vengono elencati tutti i controlli presenti nella maschera:

� Una PictureBox contenente l'immagine della tavola corrente, oppor-tunamente ridimensionata in caso sia troppo grande o troppo piccolarispetto alle dimensioni della maschera;

� Due coppie di pulsanti < e > per navigare tra i �le e tra le paginedi ogni �le, associate a due Label indicanti la posizione del �le o dellapagina nella sequenza;

� Due TextBox, relative alle due coppie di pulsanti del punto precedente,per caricare direttamente un �le o una pagina fornendone il numeroall'interno della sequenza;

� Un pulsante Aggiungi\Modi�ca per aggiungere o rimuovere il codi-ce della tavola. Tale valore verrà associato alle coordinate inserite inprecedenza, se presenti. A questo pulsante è collegata una Label cheindica il valore del codice tavola, sia esso ottenuto dalla scansione diTesseract o aggiunto dall'utente;

� Una ListBox contenente un elemento per ogni blob trovato nell'immagi-ne. Per ogni elemento sono mostrate le coordinate dell'angolo superioresinistro e le dimensioni del blob relative all'immagine ridimensionata,ed il valore riconosciuto dall'OCR;

� Un pulsanteChiudi per salvare i dati e terminare il processo di veri�ca,chiudendo la maschera.

Page 38: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

32 Implementazione di syOCR

Figura 4.5: Maschera di veri�ca

Page 39: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

4.3 Programma NormalMode 33

La procedura di veri�ca consiste nell'esaminare le singole pagine per con-trollare i valori che Tesseract ha riconosciuto, aggiungere quelli mancanti emodi�care (o rimuovere) quelli errati.

Facendo doppio click su uno degli elementi della ListBox viene visualiz-zata una piccola maschera che consente di modi�care il valore del blob o dirimuoverlo dalla lista.

Selezionando un'area all'interno dell'immagine, invece, viene data la pos-sibilità di aggiungere un blob che Tesseract non abbia riconosciuto durantela scansione. L'accuratezza di tale selezione e del valore ad essa associatodipenderà esclusivamente dall'utente.

Tutti i dati relativi ai blob ed al codice tavola di un documento vengonosalvati in un �le in formato xml. Ogni riga presenta i seguenti campi:

� Tutti gli attributi della classePallino ad eccezione del booleano isEmpty;

� Due campi indicanti rispettivamente l'azione che verrà associata al linkda sistemare sul blob ed i relativi parametri;

� Il codice della tavola presente nella pagina corrente. Tale valore vieneripetuto per ogni blob presente nella tavola.

Il nome di questo documento xml viene deciso dal programma e sarà ugualeal nome del �le originale senza l'estensione.

Maschera di modi�ca elemento

La maschera di modi�ca di un elemento viene visualizzata ogniqualvolta ven-ga e�ettuato un doppio click su un elemento della ListBox. Tale maschera è

Figura 4.6: Maschera di modi�ca elemento

molto semplice e presenta solo quattro controlli:

� Una TextBox contenente il valore associato al blob corrispondente al-l'elemento della ListBox, liberamente modi�cabile;

� Un pulsante Salva per salvare la modi�ca al valore, anche se non èstato modi�cato;

Page 40: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

34 Implementazione di syOCR

� Un pulsante Rimuovi per eliminare l'elemento corrente dal �le xml e,di conseguenza, anche dalla ListBox;

� Un pulsante Annulla per chiudere la maschera senza modi�care nulla.

Questa maschera opera direttamente sul �le xml, quindi ogni modi�ca e�et-tuata verrà salvata immediatamente sul �le. Invece l'aggiunta di un nuovoelemento viene salvata quando si passa ad un �le di�erente oppure quandosi chiude l'intera maschera di veri�ca.

4.3.2 Maschera di aggiunta area codice tavola

La maschera utilizzata per aggiungere l'area dove Tesseract dovrà cercare ilcodice della tavola è molto simile alla maschera di veri�ca ma è più semplicein quanto deve tenere traccia di una sola entità per ogni �le distinto. Comeper la maschera di veri�ca, sono presenti due coppie di pulsanti < e > pernavigare tra pagine e �le. Tali coppie sono associate a due TextBox utilizzabiliper accedere direttamente ad una pagina o ad un �le fornendone il numeroall'interno della sequenza.

Inoltre, è presente un pulsante Chiudi per salvare le coordinate e ledimensioni dell'area selezionata in un �le di con�gurazione e chiudere lamaschera.

Ogni volta che viene caricata una nuova pagina o un nuovo �le viene evi-denziata l'area selezionata, in modo che l'utente possa decidere se cambiarlaoppure no. È importante ricordare che ogni �le ha una sola area dove cercareil codice tavola.

A di�erenza della maschera di veri�ca, dove viene creato ed aggiorna-to un �le xml per ogni documento elaborato, qui viene salvato un �le dicon�gurazione2 per ogni documento elaborato.

Durante la scansione di Tesseract, al termine dell'analisi di tutti i blobriscontrati da AForge, viene ritagliata l'area indicata nel �le di con�gurazione(dopo aver e�ettuato le dovute conversioni) dove l'OCR cerca di riconoscereil codice della tavola. Se viene rilevato un valore viene salvato nel �le xml inogni riga della pagina che si sta analizzando.

4.3.3 Di�erenze con il programma TrainingMode

Pur essendo due programmi molto simili, perché vengono costruiti per fornireuna serie di supporti alla scansione dell'OCR, le di�erenze tra di essi sonosostanziali e necessitano di un'analisi per poter essere comprese e spiegate.

2Il cui nome è (come nel caso del nome del �le xml) uguale al nome del documentooriginale privato della sua estensione.

Page 41: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

4.3 Programma NormalMode 35

Figura 4.7: Maschera per l'aggiunta dell'area del codice tavola

Page 42: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

36 Implementazione di syOCR

Nelle successive due sezioni verranno illustrate le principali di�erenzepresenti tra le maschere e le classi dei due programmi.

Maschere

Per quanto riguarda le maschere le di�erenze non sono molte, ma sono so-stanziali. Oltre ad aggiungere tre nuove maschere, il programma NormalModepresenta delle minime di�erenze rispetto al suo gemello.

Le maschere iniziali dei due programmi sono simili tra di loro, perché ge-stiscono principalmente l'esecuzione della scansione, ma il programma Nor-malMode presenta dei controlli in più, che sono stati già illustrati nell'appo-sita sezione.

Figura 4.8: Maschera di con�gurazione del programma NormalMode

Per quanto riguarda la maschera di con�gurazione, nel programma Nor-malMode presenta un parametro in più e la gestione del codice tavola.

Con Tolleranza selezione si intende il valore massimo (in pixel) da utiliz-zare quando l'utente seleziona un'area all'interno delle maschere di veri�caed aggiunta dell'area del codice della tavola, al �ne di controllare se tale areanon sia già stata associata ad un blob riconosciuto durante la scansione diTesseract.

Il valore di default è 50, ma può variare a seconda della vicinanza deicodici all'interno della tavola. Se i codici sono molto vicini tra di loro, infatti,

Page 43: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

4.3 Programma NormalMode 37

si renderà necessario diminuire questa tolleranza ma l'utente dovrà essere piùpreciso durante la selezione.

Il pulsante Tavola... apre la maschera di aggiunta delle coordinade del-l'area dove verrà cercato il codice della tavola, che è stata descritta in prece-denza.

Classi

Invece, le classi presentano di�erenze più signi�cative per sopperire alle dif-ferenze sostanziali tra gli obiettivi dei due programmi.

Innanzitutto è presente una nuova classe, dTableXML che viene utiliz-zata per gestire tramite un oggetto di tipo DataTable3 il contenuto del �lexml associato al �le corrente. I metodi che questa classe fornisce sono i se-guenti:

� �1 Public Sub Add(pdfName As String , pageNum As Integer ,

tavCode As String , x As Integer , y As Integer , wPage

As Integer , hPage As Integer , wBall As Integer , hBall

As Integer , value As String , action As String ,

actionParameters As String) � �Aggiunge una riga al DataTable contenente i valori delle singole colonne pas-sati come parametri;

� �1 Public Sub Remove(item As DataRow) � �

Rimuove dal DataTable l'oggetto DataRow passato come parametro;

� �1 Public Sub Write(xmlFileName As String) � �

Scrive tutto il contenuto del DataTable su un �le xml, dato il suo percorsopassato come parametro;

� �1 Public Sub Read(xmlFileName As String) � �

Legge il contenuto di un �le xml, il cui percorso viene passato come parame-tro, e lo scrive sul DataTable.

3Rappresenta una tabella di dati in memoria, divisa in tanti oggetti DataRow chepossono avere un numero arbitrario di campi.

Page 44: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

38 Implementazione di syOCR

La classe OCREngine presenta molti meno metodi, perché non ha biso-gno di tutte le procedure che vengono utilizzate per il processo di addestra-mento. I metodi che vengono aggiunti sono soltanto tre:

� �1 Public Function GetTableCodeInfo(filename As String) As

System.Collections.Generic.List(Of Single) � �Restituisce le coordinate dell'angolo superiore sinistro e le dimensioni del ret-tangolo dove cercare il codice tavola ricavate dal �le di con�gurazione;

� �1 Private Function GetTableCodeRectangle(source As Bitmap ,

pnt As Point , size As Size , fileName As String) As

Rectangle � �Trova la posizione e le dimensioni del rettangolo (nell'immagine a 600 DPI)contenente il codice tavola;

� �1 Private Function SearchTableCode(pathManag As pathManager

, dT As dTableXML , pgNum As Integer , source As Bitmap

, language As String , fileName As String) As Boolean � �Cerca il codice tavola nella pagina o nell'immagine che si sta scansionandocon Tesseract.

Per quanto riguarda le classi Utils, pathManager e Logger, esse nonpresentano nuove caratteristiche rispetto alle corrispondenti classi contenutenel programma TrainingMode.

In�ne è presente il modulo4 Main. Questo modulo contiene due proce-dure e viene utilizzato come punto di partenza del programma NormalModequando esso viene lanciato dal programma TrainingMode (come vedremonella prossima sezione). Le due procedure sono le seguenti:

� �1 Sub Main() � �

Entry point del programma: legge i parametri e li passa alla maschera inizialeoppure restituisce un errore se tali parametri sono errati o incompleti;

4Un modulo è una raccolta di variabili, procedure e funzioni che, a di�erenza delleclassi, non può essere istanziato come oggetto in altre parti del programma. È una sortadi namespace.

Page 45: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

4.4 Collaborazione tra i Due Programmi 39

� �1 Private Sub DisplayHelp () � �

Mostra il messaggio di aiuto, elencando i parametri obbligatori e quelli fa-coltativi dello script a riga di comando.

4.4 Collaborazione tra i Due Programmi

È stato detto che si è resa necessaria la realizzazione di due programmi se-parati a causa della sequenza di operazioni che devono essere svolte per ese-guire un riconoscimento completo dei codici contenuti all'interno di tutto ilcatalogo ricambi.

Come accennato alla �ne della sezione precedente, il programma Normal-Mode può anche essere lanciato da riga di comando sfruttando le procedurecontenute nel moduloMain. Durante il ciclo di esecuzione completo vengonosvolti i seguenti passi:

1. Viene lanciata la prima scansione dei �le contenuti nella cartella sor-gente tramite il programma TrainingMode;

2. Se non sono stati riconosciuti alcuni blob viene avviata la procedura diaddestramento di Tesseract che, tramite input dell'utente, genera unnuovo �le di lingua contenente i caratteri mancanti;

3. Viene ripetuto il passo 2 tutte le volte che l'utente ritiene necessarie;

4. Il programma TrainingMode lancia (tramite l'applicativo a riga di co-mando) il programma NormalMode passandogli come parametri la car-tella sorgente, la cartella destinazione ed un parametro che indica cheè richiesta la procedura di veri�ca;

5. Il programma NormalMode è pronto per essere lanciato con questi para-metri, ma fornisce all'utente la possibilità di modi�carli e di aggiungerele coordinate dell'area dove cercare il codice tavola;

6. Al termine della scansione di Tesseract lanciata dal programma Nor-malMode viene avviata la procedura di veri�ca (se richiesto) e vengonogenerati i documenti PDF pronti per essere linkati (se richiesto).

A questo punto risulta chiaro come mai i due programmi siano così simili:essi condividono molte informazioni ed operano sugli stessi �le.

Ovviamente è possibile lanciare direttamente il programma NormalModeda riga di comando. Questo può essere necessario se si conoscono a priori

Page 46: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

40 Implementazione di syOCR

le caratteristiche dei cataloghi da analizzare e non c'è bisogno di addestrareTesseract su nuovi caratteri.

Page 47: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

Conclusioni

Il lavoro svolto per questa tesi ha avuto lo scopo di implementare un program-ma per supportare il processo di estrazione di testo signi�cativo contenutoall'interno di tavole tecniche.

In particolare nel capitolo 1 sono stati descritti gli strumenti utilizzatiper sviluppare i due programmi, speci�cando quali caratteristiche sono statesfruttate. Nel capitolo 2 sono state analizzate le problematiche che hannorichiesto di implementare i due programmi e gli ostacoli emersi durante losviluppo. Nel capitolo 3 sono stati illustrati i metodi utilizzati per risolverele problematiche introdotte nel capitolo precedente, in accordo con gli stru-menti utilizzati. Nel capitolo 4 è stata descritta l'implementazione di syOCR,mostrando le varie maschere e le classi principali.

Nel complesso il progetto realizzato è un ottimo punto di partenza e risultasu�cientemente accurato nella maggior parte dei casi esaminati. Sebbene nonmanchino margini di miglioramento.

Per quanto riguarda l'utilizzo di Tesseract e di AForge per il riconosci-mento di caratteri è stato raggiunto un buon livello di a�dabilità dei risultati,anche grazie alla procedura di addestramento. Questa parte può essere estesaper cercare di riconoscere anche i codici non delimitati da aree circolari, maè necessario trovare un'alternativa ad AForge.

La procedura di veri�ca è stata realizzata per sopperire ai limiti di AForgee di Tesseract. Nel caso in cui i blob riconosciuti all'interno del catalogo sianosolo una minima parte, il processo di veri�ca risulta lungo e, purtroppo,necessario. Si può estendere il programma anche da questo punto di vista,per esempio consentendo di salvare il lavoro svolto �no ad un certo momentoper poterlo riprendere successivamente.

In�ne, relativamente alla generazione del documento PDF �nale, i risul-tati raggiunti si sono dimostrati soddisfacenti le richieste iniziali. L'unicapiccola miglioria consisterebbe nel parametrizzare le dimensioni del testoutilizzato per evidenziare le aree riconosciute durante l'elaborazione.

Page 48: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi
Page 49: UNIVERSITÀ DEGLI STUDI DI PARMA Dipartimento di Matematica … · 2017-01-05 · immagini) e la libreria ITextSharp (per la creazione e modi ca di documenti PDF). Il lavoro di tesi

Bibliogra�a

[1] Documentazione online u�ciale del framework AForge.NET. url: http://www.aforgenet.com/framework/docs/.

[2] Guida all'addestramento di Tesseract. url: https://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3.

[3] Guida di base al linguaggio Visual Basic .NET. url: http://www.html.it/guide/guida-visual-basic-net/.

[4] Sito u�ciale del framework AForge.NET. url: http://www.aforgenet.com.

[5] Sito u�ciale della libreria ITextSharp. url: http://itextpdf.com.

[6] Sito u�ciale dell'OCR Tesseract. url: https://code.google.com/p/tesseract-ocr/.


Recommended