domenica 19 maggio 2019

.Net OCR con la libreria Tesseract estrapolare testo dalle immagini tramite VB.Net e C#

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_net-ocr-con-la-libreria-tesseract-estrap_1615.aspx

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.



.Net

Private Sub btnEsegui_Click(sender As Object, e As EventArgs) Handles btnEsegui.Click

        Me.Cursor = Cursors.WaitCursor

 

        Try

            Dim ita_LANGUAGE = "ita"

            Dim blogPostImage = txtPercorsoFile.Text

 

            Using ocrEngine = New TesseractEngine(".\tessdata", ita_LANGUAGE, EngineMode.Default)

 

                Using imageWithText = Pix.LoadFromFile(blogPostImage)

 

                    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 blogPostImage = txtPercorsoFile.Text;

 

                using (var ocrEngine = new TesseractEngine(@".\tessdata", ita_LANGUAGE, EngineMode.Default))

                {

                    using (var imageWithText = Pix.LoadFromFile(blogPostImage))

                    {

                        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.

Nessun commento: