Riconoscimento caratteri da un’immagine

Posted on 27 dicembre 2014. Filed under: Senza categoria |

Grazie alle giornate festive, riesco a recuperare un po’ di arretrato e includere delle modifiche in un gestionale.

Da qualche settimana ero anche in attesa di studiare come riconoscere del testo da un’immagine.

 

Ovviamente programmi freeware e shareware ne esistono, ma a me interessava un SDK da includere in un progetto WPF in VB.NET con .NET 4.0

 

Ho trovato una libreria di Google ma non mi ha entusiasmato perché crashava.

Così facendo un giro su Nuget ho trovato Aspose OCR, una libreria che oltre a fare al caso nostro fa anche altre cose (che ora non ci interessa).

 

Vediamo come funziona. Per dovere di cronaca ho usato Visual Studio 2013 ma funziona bene anche con Visual Studio 2011. Non ho provato altre versioni.

Apriamo Visual Studio 2013 e creiamo un nuovo progetto WPF, ovviamente in Visual Basic (io adoro il VB). Poi lo salviamo, passaggio obbligatorio per potere installare un pacchetto da Nuget.

 

Nella ricerca scriviamo OCR e quindi installiamo Aspose.OCR for .NET, come nella seguente figura:

 

image

 

image

 

 

 

Una volta accettato e installato, vedremo che nel progetto sono state aggiunte delle Reference:

 

image

 

 

Purtroppo non siamo ancora pronti per scrivere il codice.

 

Dobbiamo andare a scaricare un file di risorse dal sito di Aspose, da questo link: http://www.aspose.com/community/files/51/.net-components/aspose.ocr-for-.net/entry580924.aspx e quindi installarlo. Scaricando il codice di esempio, verrà creta la cartella C:\Users\nomeutente\Documents\Aspose\Aspose.OCR for .NET\Resources

 

Qui dentro troviamo il file di risorse da copiare nel progetto (o direttamente in bin\Debug) o includerlo nel progetto come risorsa e poi farlo copiare da Visual Studio nella cartella di destinazione. Ricordate comunque che questo file più i due della Reference vanno inclusi nel pacchetto per il setup.

Una volta fatta questa incombenza possiamo scrivere quindi il codice.

Questo lo XAML:

    <Grid>         <Grid.RowDefinitions>             <RowDefinition Height="Auto"/>             <RowDefinition Height="*"/>         </Grid.RowDefinitions>         <Button Grid.Row="0" Name="RicognizeButton" Content="Ricognizione caratteri da immagine" Width="200" Height="50" Margin="10"/>         <TextBox Grid.Row="1" Name="RecognizeTextBox" Margin="10"/>     </Grid>

 

In pratica mettiamo un pulsante che darà il via alla ricognizione dei caratteri su un file che si sarà selezionato e una TextBox con i caratteri che saranno riconosciuti.

Questo il code-behind:

Imports Aspose.OCR

Imports System.IO

Public Class MainWindow

    Private Sub RicognizeButton_Click(sender As Object, e As RoutedEventArgs) Handles RicognizeButton.Click

        Const resourceFileName As String = "Aspose.OCR.Resouces.zip"


        Dim uploadedImage As String

        Dim dlg As New Microsoft.Win32.OpenFileDialog()

        dlg.FileName = "Caricamento file immagine" ‘ Default file name

        dlg.DefaultExt = ".xls" ‘ Default file extension

        dlg.Filter = "Image Files|*.gif;*.jpg;*.png;*.bmp;*.tif|All Files (*.*)|*.*"

        ‘ Show open file dialog box

        Dim result? As Boolean = dlg.ShowDialog()

        ‘ Process open file dialog box results

        If result = True Then

            ‘ Open document

            uploadedImage = dlg.FileName

            ‘Dim uploadedImage As String = "c:\ppp\eurotext.tif"

            Try

                ‘Create OcrEngine instance and assign

                ‘image, language and image configuration

                Dim ocr As New OcrEngine()

                ocr.Image = ImageStream.FromFile(uploadedImage)

                ocr.Languages.AddLanguage(Aspose.OCR.Language.Load("english"))

                ocr.Config.UseDefaultDictionaries = True

                Dim fileStream As New FileStream(resourceFileName, FileMode.Open)

                ocr.Resource = fileStream

                Try

                    If ocr.Process() Then

                        RecognizeTextBox.Text = ocr.Text.ToString()

                    End If

                Catch ex As Exception

                    MsgBox("Exception: " & ex.Message)

                End Try

                fileStream.Close()

                ocr = Nothing

            Catch ex As Exception

                MsgBox("Exception: " & ex.Message)

            End Try

        End If

    End Sub

End Class

 

Mandiamo in esecuzione il programma, clicchiamo sul pulsante e quindi selezioniamo un’immagine dal nostro computer.

image

 

image

 

image

 

Come potete vedere non è il massimo però può aiutare in molti casi.

 

Purtroppo l’OCR di Aspose non supporta l’italiano ma da quello che vedo non riconosce bene neanche le parole in inglese.

E’ un sistema questo dell’OCR che deve ancora migliorare molto ma si vedono però già dei risultati rispetto al passato.

Make a Comment

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Liked it here?
Why not try sites on the blogroll...