In questo articolo vedremo come estrapolare del testo dai file immagini, che in ambito tecnologico sta per applicazioni di tipo OCR. Per estrapolare il testo, useremo la libreria gratuita Tesseract che possiamo installare tramite Nuget di Visual Studio per i linguaggi di programmazione VB.Net e C#.
L’articolo vuole fornire al lettore le funzioni basi di questa libreria e come estrapolare del testo in italiano.
Creazione del progetto e form
Si crea un nuovo progetto di tipo “Windows Application” e nella form aggiungiamo due controlli di tipo button, due controlli di tipo Textbox ed un controllo di tipo labe, il tutto come mostrato in figura 1.
Figura 1 – La form con i vari controlli
Terminata la fase di progettazione non dobbiamo altro che inserire la libreria, “Tesseract” la quale ci permette di gestire il testo presente nelle immagini.
Apriamo Nuget, e dalla finestra che viene aperta, scriviamo “Tesseract” senza virgolette, il tutto come mostrato in figura 2.
Figura 2 - L’aggiunta del componente per la gestione dei OCR.
A questo punto dobbiamo scaricare dal seguente sito https://github.com/tesseract-ocr/tesseract/wiki/Data-Files il dizionario italiano nel caso che il testo presente nelle immagini e di lingua italiana.
Scaricato il file “ita.traineddata” per la lingua italiana, dobbiamo creare una cartella denominata “tessdata” nella cartella “Bin” del nostro progetto e nella cartella creata copiare il file appena scaricato.
Terminata questa operazione possiamo, iniziare a scrivere il codice.
Stesura del codice.
Per utilizzare la libreria per la gestione del testo nelle immagini, dobbiamo aggiungere lo spazio dei nomi di tale componente, in alto sopra ad ogni dichiarazione scriviamo lo spazio dei nomi di questa libreria, qui di seguito si riporta il frammento di codice per entrambi i linguaggi.
VB.Net
Imports Tesseract
C#
using Tesseract;
Terminata questa operazione, nell’evento click del pulsante con i tre pulsanti, dobbiamo scrivere il codice per visualizzare una dialogo nel quale rilevare il percorso e nome del file immagine dove estrapolare il testo.
Nell’evento click di tale pulsante, scriviamo il codice per aprire la dialog, qui di seguito il frammento di codice per il linguaggio VB.Net e C#.
VB.Net
Private Sub btnDialog_Click(sender As Object, e As EventArgs) Handles btnDialog.Click
Dim selezionFile As New OpenFileDialog()
If selezionFile.ShowDialog() = DialogResult.OK Then
txtPercorsoFile.Text = selezionFile.FileName
End If
End Sub
C#
private void btnDialog_Click(object sender, EventArgs e)
{
OpenFileDialog selezionFile = new OpenFileDialog();
if (selezionFile.ShowDialog() == DialogResult.OK)
{
txtPercorsoFile.Text = selezionFile.FileName;
}
}
Il codice è facilmente comprensibile, in pratica riporta nella casella di testo, il percorso e nome del file immagine a cui vogliamo estrapolare il testo.
Ora scriviamo il codice per estrapolare il testo nel file immagine.
Utilizzeremo la classe “TessercactEngine” il quale accetta nel costruttore, il percorso dove si trova il file delle lingue, la nazionalità, e la modalità di utilizzo. Con la classe Pix, tramite il metodo LoadFromFile impostiamo il percorso e nome del file immagine, mentre con il metodo Process, della classe TesseractEngine viene generato un oggetto di tipo “Page” con il quale abbiamo la possibilità di ottenere il testo, tramite il metodo “GetText”. Qui di seguito si riporta il codice, con il quale si estrapola il testo nel file immagine e si copia nella casella di testo.
VB.Net
Private Sub btnEsegui_Click(sender As Object, e As EventArgs) Handles btnEsegui.Click
Me.Cursor = Cursors.WaitCursor
Try
Dim ita_LANGUAGE = "ita"
Dim PathImage = txtPercorsoFile.Text
Using ocrEngine = New TesseractEngine(".\tessdata", ita_LANGUAGE, EngineMode.Default)
Using imageWithText = Pix.LoadFromFile(PathImage )
Using page = ocrEngine.Process(imageWithText)
Dim text = page.GetText()
txtTesto.Text = text
End Using
End Using
End Using
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
Me.Cursor = Cursors.[Default]
End Try
End Sub
C#
private void btnEsegui_Click(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;
try
{
var ita_LANGUAGE = @"ita";
var PathImage = txtPercorsoFile.Text;
using (var ocrEngine = new TesseractEngine(@".\tessdata", ita_LANGUAGE, EngineMode.Default))
{
using (var imageWithText = Pix.LoadFromFile(PathImage))
{
using (var page = ocrEngine.Process(imageWithText))
{
var text = page.GetText();
txtTesto.Text = text;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
this.Cursor = Cursors.Default;
}
}
Ora non ci resta che eseguire la nostra applicazione e selezionare un file immagine con testo, vedremo che verrà rilevato il testo.
Conclusioni
L’articolo ha voluto fornire al lettore un possibile scenario per realizzare delle applicazione o dotare quelle realizzate di funzionalità ocr ossia di lettura del testo nelle immagini. La libreria gratuita ed open source, fornisce interessanti funzioni al pari di quelle professionali. Una valida scelta da valutare per i propri progetti.