download Parte1 - download Parte2

 

 

Seconda parte dell'articolo .....

 

Riconoscimento ottico dei caratteri (1° parte)

Cos'è il riconoscimento ottico dei caratteri?
1° Parte

Facciamo un semplice esempio. Avete un bloccaccio di carta dove ci sono degli appuntacci scritti a mano che volete riportare su PC. Avete due possibilità:

 

- Memorizzare il documento in un formato grafico (ad 

  esempio miofile.jpg) acquisendo l’immagine con uno

  scanner

- Ricopiare manualmente il documento facendo uso di un

  programma di elaborazione testi (Word ad esempio)

La prima soluzione è certamente più rapida ma, non permette, ne’ di effettuare modifiche, ne’ di effettuare ricerche sul testo in quanto gli appunti sono stati memorizzati in un formato grafico e vengono trattati dalla macchina alla stessa stregua di un’immagine.

 

La seconda soluzione invece, è certamente più elegante ma, ha l’inconveniente di costringerci a fare il lavoro di leggere e riscrivere il testo. Bene, il riconoscimento ottico dei caratteri o OCR (Optical Character Recognition) è un campo dove si studia come sia possibile sostituire la macchina a noi in questo noioso lavoro di copiatura. I sistemi OCR, in pratica, sono programmi dedicati alla conversione di un’immagine contenente testo in testo modificabile con un normale programma di videoscrittura. Solitamente le immagini sono acquisite da uno scanner di immagini o da un sistema digitale (telecamera o macchina fotografica). Il testo viene convertito in codici  ASCII o Unicod (codifiche standardizzate per la memorizzazione dei caratteri) o, nel caso dei sistemi più avanzati, in un formato in grado di contenere anche l' impaginazione del documento. Per far questo i programmi OCR si avvalgono di tecniche di Intelligenza Artificiale.

 

Cosa è possibile fare e cosa è ancora un sogno?

Mentre il riconoscimento esatto di testo scritto in alfabeto latino è oramai considerato un problema risolto quasi perfettamente, il riconoscimento di testi a scritti mano libera ed il riconoscimento degli alfabeti non latini è un problema che tuttora non ha trovato delle soluzioni realmente soddisfacenti e infatti, è ancora oggetto di studi e ricerche.

 

In parole povere, allo stato attuale, potete acquistare software che da una pagina di giornale letta da uno scanner vi restituisca un bel documento in formato testo (ad esempio Word), sollevandovi dall’incarico di digitarlo a mano ma, non potete “dar in pasto” quattro scarabocchi presi di fretta magari in una lezione all’università ed aspettarvi che un programma OCR vi fornisca un bel documento di testo pulito e ben scritto. Questo purtroppo è ancora un sogno! 

 

Un settore dove gli studi stanno dando buoni risultati, con l’impiego di Reti neurali artificiali, è il riconoscimento di caratteri singoli scritti a mano libera. Tali studi trovano applicazione, ad esempio, sui palmari dove i software integrati al loro interno permettono all’utente, dopo un’opportuna fase di addestramento, (tipica di quasi tutti i sistemi basati su reti neurali) di riconoscere i caratteri tracciati con un’accuratezza che supera il 98%.

 
Perché il riconoscimento del testo a mano libera è così difficile da effettuare?

Il problema principale che si pone quando dobbiamo riconoscere un carattere è che questo non possiede mai la stessa geometria e/o le stesse caratteristiche contraddistintive. Una lettera può variare nella forma, nelle dimensioni, nell’accuratezza con cui è definita e, non da meno, può variare in base a chi scrive!

 

Se a scrivere sono io, ad esempio, altro che riconoscimento di caratteri, ci vorrebbe un riconoscimento di scarabocchi!

 

Se poi, invece di riconoscere i caratteri, dobbiamo riconoscere parole appartenenti ad un testo, scritte in corsivo ed a  mano libera, le cose si complicano enormemente. E’ molto difficile, infatti, arrivare ad isolare i singoli caratteri perché non è facile capire dove ne finisce uno e dove ne inizia un altro. In questi casi, la ricerca è indirizzata verso il riconoscimento della parola a nel suo complesso. Per far ciò si affiancano al sistema OCR motori di analisi grammaticale,ortografica e contestuale. Conoscere il contesto dello scritto consente di eliminare molte ambiguità, per esempio un documento che parla di storia conterrà molte date e quindi in una frase del tipo : “La seconda guerra mondiale inizio nel 197S” il sistema ipotizzerebbe che la curva accanto al 197 sia un 5 e non una S.

Il Software

Il software che svilupperemo non vuole certo competere con i potenti tool che ci sono in circolazione; lo scopo è puramente didattico, ed è quello di mostrare come sia possibile impiegare una rete neurale artificiale per la realizzazione di un programma OCR.

 

Il linguaggio che useremo sarà il VB6. Qualcuno mi potrebbe dire :”Vuoi utilizzare un linguaggio che possieda un ambiente di sviluppo rapido ok; ma almeno utilizza il Vb.net! ”

 

Beh il punto è che, sinceramente, ancora non me lo sono’ studiato sto nuovo ambiente di Zio Bill! Qui di tempo ce ne è sempre poco!! Bah, lasciamo perdere il tempo, altrimenti ci tocca tirare in ballo pure la relatività! Torniamo a  noi. Si parte.

 

L’interfaccia del nostro programma è quella riportata nella figura in alto. Bella ma come si usa?

 

Allora, la prima cosa da fare è scaricare il file eseguibile ovviamente!

 
Utilizzo del programma

La prima cosa da fare è addestrare la rete a riconoscere i caratteri da voi definiti. Potete procedere in due modi: Caricare un addestramento precedente oppure effettuarne uno da zero.

 

-Carichiamo l’addestramento (contenuto nel file supply.

  txt) premendo il bottone LOAD

 

-Addestriamo la rete a riconoscere i caratteri “ i ”, “ L “,

  ” C  “,” E “,”F” (caricati al passo precedente) premendo il    bottone ADDESTRA.

 

-La rete è ora pronta a riconoscere i quattro caratteri.

Premete il bottone "CLEAR MATRIX"

-Disegnate la lettera F sulla matrice 5 x 6 (come in Fig1).

Per disegnare:

    spostate il mouse sulla matrice tenendo premuto il

    bottone sinistro del mouse oppure, fate click su un

    determinato punto per annerirlo.

Per cancellare:

    tenere premuto il tasto shift sulla tastiera e muovere il

    mouse sulla griglia tenendo premuto il tasto sinistro

    oppure, sempre tenendo lo shift premuto, fate click su

    un determinato punto per renderlo bianco.

 

-Premete il tasto RICONOSCI per effettuare il 

  riconoscimento. Se tutto  “fila liscio” nel riquadro

  arancione comparirà la lettera “F”.

Potete provare a disegnare la “ i ” o la  “ E ” o la  “ L ” o la “C” per verificare che la rete riesce a riconoscere questi caratteri. Infine, potete, provare a corrompere i caratteri in qualche punto, per vedere, fino a quando la rete riesce a discriminare un dato carattere.

 

OSS1:

 

La rete è molto rudimentale non possiede moduli software che effettuano l’autocentratura, la scalatura o la rotazione dei caratteri quindi, è necessario disegnarli sempre in modo che occupino il massimo dello spazio sulla matrice. E’ necessario inoltre, che lettere come la “ i ”, vengano posizionate sempre al centro della matrice!

 

Curiosità: Le operazioni di roto-traslazione vengono effettuate normalmente anche da noi quando muoviamo gli occhi. Il riconoscimento di una data immagine da parte del cervello, infatti, deve essere indipendente dalla posizione che l’immagine stessa questa occupa sulla nostra retina. Gli organismi biologici evoluti, come noi, hanno sviluppato una rete neurale in grado di apprendere questa trasformazione da coordinate Retiniche a coordinate Cranio Centriche. Questo tipo di rete può essere simulata artificialmente mediante un tipo particolare di apprendimento per rinforzo.  Si tratta di una variante dell’algoritmo ARP (associative Reward-Penality – Mazzoni, Andersen e jordan 1991)

 

Disegno da memoria e corruzione del carattere

Se volete, potete disegnare velocemente un carattere selezionandolo dalla lista di quelli disponibili. Per far questo dovete selezionare un carattere dalla lista che riporta la dicitura “N° Cicli” . Il carattere selezionato verrà disegnato direttamente nella matrice.

 

Ora potete provare a “Rovinare” il carattere per vedere fino a che punto la rete è in grado di riconoscerlo. Il Riconoscimento, come prima, si effettua premendo il tasto RICONOSCI

 

Addestramento della rete

Se non vi siete già rotti le scatole, potete effettuare un nuovo addestramento (invece di caricare quello con cui mi sono divertito io). Procedete nel seguente modo:

 

1.Re-Avviate il programma

2.Disegnate un carattere a vostro piacimento nella matrice

3.Inserite nella casella di testo, sottostante alla griglia, il

  carattere che volete associare. Questo verrà riportato nel

  box arancione.

4.Premete memo per effettuare l’associazione. Il carattere

  verrà riportato nelle liste “N° Cicli” e “Neuroni associati”.

5.Ripetere i passi 2,3,4 per ogni carattere da far

  apprendere alla rete

6.Premere il tasto ADDESTRA per addestrare la rete.

  L’addestramento verrà confermato dalla dicitura:

  “Addestramento Neuroni completato”

 

Verifica:

 

Dovete verificare se le associazioni sono state apprese correttamente. Selezionate il primo carattere dalla lista “N° Cicli” e premete il bottone “Riconosci”. Se il carattere che compare nel box arancione è corretto andate avanti e ripetete l’operazione per il successivo carattere. Se il carattere non viene riconosciuto correttamente significa che la rete non è riuscita ad apprendere la trasformazione. E’ necessario quindi fornirgli un altro esempio dello stesso carattere. Per far questo procedete nel seguente modo:

 

1.    Assicurarsi che il carattere specificato sia visualizzato nella matrice altrimenti selezionarlo dalla lista “ N° Cicli ”. Supponiamo questo sia un “ 7 ”.

 

2.    Digitare il carattere “7” nella casella di testo sotto la griglia

 

3.    Modificare il carattere “7” nella griglia in modo  da fornire alla rete un esempio simile per lo stesso carattere oppure, lasciate il carattere inalterato (se non volete che la rete apprenda una variante per il carattere considerato).

 

4.    Premere il tasto memo per effettuare l’associazione (ora nella lista N° Cicli compaiono due esempi per lo stesso carattere).

 

5.    Premere ADDESTRA per effettuare l’addestramento.

 

6.    Selezionate uno dei due “7”, poi premere il tasto “Riconosci” e verificate se il carattere viene riconosciuto correttamente. In caso negativo bisogna ripetere questa procedura fino a quando il carattere non viene riconosciuto correttamente.

 

Una volta verificato che tutti i caratteri sono riconosciuti correttamente se volete potete salvare le associazioni premendo il tasto SAVE. Il Salvataggio  aggiorna  il File Supply.txt (o ne crea uno nuovo se questo non esiste) . Se ci tenete a non perdere il file Supplì.txt relativo ad un precedente addestramento, rinominate preventivamente il file Supply.txt. con supplyold.txt ad esempio. Quando avrete bisogno di ricaricare il vecchio addestramento sarà sufficiente ridare a supplyold.txt il suo nome originario!

 

NB: La lista N° Cicli può essere lunga al massimo 21 elementi

Limiti della Rete

La rete Neurale utilizzata è molto semplice (è ad un solo strato di neuroni).

 

Aumentando il numero di caratteri aumenta la probabilità che più neuroni si attivino contemporaneamente in risposta ad un determinato stimolo di ingresso .Questo fenomeno va sotto il nome d’interferenza. Per eliminarlo è necessario presentare alla rete più volte la stessa coppia di addestramento. In questo modo però, se da una parte si aumenta la selettività della rete, dall’altro si diminuiscono le capacità della rete di generalizzare, ossia, si diminuiscono le capacità della rete di riconoscere caratteri corrotti!

 

Per ovviare a queste limitazioni è necessario ricorrere a rete neurali  più potenti (ma anche più complesse) come il Back Propagation.

 

Bene nel resto dell’articolo chiarirò brevemente il funzionamento del programma ed il tipo di rete neurale utilizzata. Riguardo questa non scenderò in dettaglio, pure perché ci vorrebbero molte pagine e troppo tempo. Il tempo è una risorsa preziosa!

 

Ad ogni modo per chi non è interessato agli aspetti tecnici l’articolo finisce qui!

 

Se volete invece, prendere la via che ho preso io, ossia quella verso la pazzia, andate avanti e non pensateci più!

 

2° Parte

 

Roma, 15/07/2007

 

By Fabio Pacioni

Installazione ed esecuzione:

percept-OCR 
Setup

 

Il programma gira  su piattaforma Microsoft.

 

Per Win XP service pack2:

 

- scaricate il file

  percept-OCR.zip 

- decomprimere il 

  tutto in una cartella

- lanciate perceptron.

  exe

Per Windows98 è necessario disporre delle librerie Run Time di Visual basic 6.0 quindi, a meno che non le abbiate già installate sulla macchina, dovete scaricarvi il pacchetto di installazione:

 

- Scaricate  setup.zip

- decomprimere il 

  tutto in una cartella

- lanciare il file Setup.    exe 

- seguite le istruzioni

- alla fine lanciare da

  programmi il file

  percept-ocr.exe

Made with Namu6