venerdì 11 novembre 2011

OCR in .Net 4 tramite VB.Net e C#

Riporto l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_riconoscimento-ottico-ocr-tramite-vbnet-_1103.aspx





Introduzione
In questo articolo vedremo come utilizzare in .Net 4, una tecnica per rilevare il testo in un file immagine o quelli che vengono generati tramite l’utilizzo di uno scanner.
Questa tecnica è detta comunemente OCR, sul web, ci sono varie tecniche e componenti, noi utilizzeremo il componente di “Microsoft Office Document Imaging” che fa parte degli strumenti di Microsoft Office, ed in particolare, della versione 2003 o 2007 (purtroppo la versione 2010 non dispone).
Questo componente, fa parte del programma “Microsoft Office Document Imaging” che si trova nel menu di office e precisamente nella cartella “Strumenti di Microsoft Office”, come si vede dalla figura 1.







Figura 1





Creazione del progetto
Si crea un nuovo progetto di tipo “Windows Application”, in riferimento al linguaggio di programmazione di proprio interesse.
Dopo aver creato il progetto, andate nella barra degli strumenti, per aggiungere il controllo “Microsoft Office Document Imaging Viewer Control” un controllo activex, che permette di visualizzare nella nostra form, l’immagine tif.
Quindi facciamo click con il tasto destro nella barra degli strumenti, e nel menu di scelta rapida che viene visualizzato scegliamo la voce “Choose Items”, e nella finestra che viene aperta, selezionate la pagina “Com Components” e tra i vari elementi, mettete la spunta alla voce “Microsoft Office Document Imaging Viewer Control 12.0” dove il numero 12.0 indica la versione di office, in questo caso la versione di Office 2007, altrimenti potremmo avere 11 che sta per office 2003.
Nella figura 2, viene mostrata tale operazione.





Figura 2





Confermate il tutto, tramite il pulsante ok, trascinate nella form il controllo appena inserito ed aggiungete sempre nella form, un pulsante, il quale avrà il compito di visualizzare il testo della nostra immagine.



Aggiungete nella form, un riferimento all’oggetto “Microsoft Office Document Imaging”, in modo che si carica un oggetto per la gestione dei file immagini.
Nella finestra esplora soluzione, fate click con il tasto destro, sulla voce “Riferimenti”, nel menu di scelta rapida che viene aperto, selezionate, la voce “Aggiungi riferimento” o “Add Reference”, nella finestra che viene aperta, selezionate la pagina “Com” e tra i vari elementi, selezionate la voce “Microsoft Office Document Imaging 12.0 type library” il tutto come mostrato in figura 3.




Figura 3





Confermate il tutto, tramite il pulsante “Ok”.
In questo modo abbiamo aggiunto al progetto, un riferimento alla libreria di “Microsoft Office Document Imaging” che ci permette di leggere e manipolare i dati di una nostra immagine.



Stesura del codice
Passiamo in modalità codice, nell’evento load, utilizziamo il controllo ActiveX inserito precedemente per visualizzare la nostra immagine.
Qui di seguito si riporta un esempio di codice per il linguaggio VB.Net e C#



Vb.Net



Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load



AxMiDocView1.FileName = "C:\test\prova.tif"



End Sub





C#



private void Form1_Load(object sender, EventArgs e)



{



axMiDocView1.FileName = @"C:\test\prova.tif";



}





La proprietà “FileName” del controllo ActiveX “AxMiDocView1”, imposta il nome del file da visualizzare.
Nell’evento click del pulsante, scriviamo il codice per leggere il testo del file immagine.
Il codice farà uso della libreria (dll) Microsoft Office Document Imaging, aggiunta precedentemente.
Qui di seguito si riporta il codice di esempio per l’utilizzo di tale libreria, nei due linguaggi .Net VB.Net e C#.




VB.Net



Private Sub BtnLeggi_Click(sender As System.Object, e As System.EventArgs) Handles BtnLeggi.Click



Try



AxMiDocView1.FileName = ""



'oggetto per la gestione del documento



Dim modiDoc As New MODI.Document()



'imposto il file tif da leggere



modiDoc.Create("C:\test\prova.tif")



'imposto il formato - italiano



modiDoc.OCR(MODI.MiLANGUAGES.miLANG_ITALIAN, True, True)



'creo oggetto per la gestione delle singola pagina



Dim img As MODI.Image = modiDoc.Images(0)





'rilevo i dati



Dim layout As MODI.Layout = img.Layout





Dim testo As String = ""



'ciclo per tutte le parole



For elemento = 0 To layout.Words.Count - 1



Dim lettera As MODI.Word = layout.Words(elemento)



testo += lettera.Text + " "



Next



modiDoc.Close(False)



MessageBox.Show(testo)



Catch ex As Exception



MessageBox.Show(ex.Message)



End Try



End Sub





C#



private void BtnLeggi_Click(object sender, EventArgs e)



{



try



{



axMiDocView1.FileName = "";



//oggetto per la gestione del documento



MODI.Document modiDoc = new MODI.Document();



//imposto il file tif da leggere



modiDoc.Create(@"C:\test\prova.tif");



//imposto il formato - italiano



modiDoc.OCR(MODI.MiLANGUAGES.miLANG_ITALIAN, true, true);



//creo oggetto per la gestione delle singola pagina



MODI.Image img = (MODI.Image)modiDoc.Images[0];



//rilevo i dati



MODI.Layout layout = img.Layout;



string testo = "";



//ciclo per tutte le parole



for (int elemento = 0; elemento < layout.Words.Count; elemento++)



{



MODI.Word lettera = (MODI.Word)layout.Words[elemento];



testo += lettera.Text + " ";



}



modiDoc.Close(false);



MessageBox.Show(testo);



}



catch (Exception ex)



{





MessageBox.Show(ex.Message);



}



}





Come si vede dal codice, si è impostato il controllo “AxMiDocView1”, senza file, questo perché la lettura del file, non generi un errore.
Gli oggetti utilizzati sono Modi.Document, che permette di gestire i file, Modi.image, le singole pagine, perché possiamo avere file, formati da n pagine, la classe Modi.Layout, permette di gestire il testo di quella singola pagina.
Tramite la classe Modi.Word, rileviamo le singole parole.
Il metodo create di document, imposta il nome del file, mentre il metodo Ocr, che accetta argomenti la lingua e l’impostazione di pagina, permette di rilevare i documenti dall’immagine.
Ora non ci resta che creare il nostro file immagine, possiamo utilizzare il programma Paint, o file provenienti dallo scanner, o altro modo.
Il file prova.tif, si trova nella cartella test in C:\, naturalmente il lettore è libero di impostare un percorso e nome a propria scelta.
Terminata la creazione del file, non ci resta che testare la nostra applicazione, facendo click su esegui o su f5.






Conclusioni
L'articolo ha fornito le basi per utilizzare la libreria Microsoft document Imaging, presente in Microsoft Office 2003 o Microsoft Office 2007. Con questo componenti si è visto come creare un piccolo programma per la lettura del testo nei file immagine. Tecnica che si può utilizzare in qualsiasi tipologia di programma, in maggioranza nelle applicazioni per la gestione documentale.

2 commenti:

Anonimo ha detto...

Interested in OCR technology. This bolg is nice talk for OCR technology.

Release: .net ocr engine, c# ocr api

Emanuele ha detto...

Thank's for comment.
It's you component non free :-(