Visualizzazione post con etichetta UWP. Mostra tutti i post
Visualizzazione post con etichetta UWP. Mostra tutti i post

domenica 11 marzo 2018

C# Ocr riconoscimento del testo nel file immagine tramite UWP

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_riconoscimento-del-testo-da-un-file-imma_1553.aspx

In questo articolo vedremo come realizzare un progetto utilizzando l’architettura Universal Windows Platform ( UWP) utilizzando il linguaggio di programmazione C# per rilevare il testo da un file di tipo immagine.
In questo articolo vedremo come utilizzare le classi per la gestione dei file immagini e quelle di OCR.

Creazione del progetto

Si crea un file immagine con il testo, possiamo anche scrivere del testo in un file di videoscrittura e poi tramite il programma di Windows “Strumento di cattura” lo salviamo come immagine.
A questo punto una volta creato o rimediato il file immagine lo salviamo in una nostra cartella o sul desktop.
Apriamo Visual Studio 2017 community e dopo aver selezionato il linguaggio di programmazione C#, selezioniamo la voce “Universal di Windows” e tra i modelli quello con la dicitura “App vuota”.
Aggiungiamo al file “MainPage.xaml” ossia la pagina che riguarda la parte grafica delle applicazioni un controllo di tipo Textblock, un controllo button ed un controllo image.
Qui di seguito il codice XAML


        <TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="55,269,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"/>

  <Button x:Name="BtnOcr" Content="Ocr" HorizontalAlignment="Left" Margin="55,471,0,0" VerticalAlignment="Top" Click="BtnOcr_Click"/>

        <Image Name="imgImmagineRilevata" HorizontalAlignment="Left" Height="274" Margin="731,151,0,0" VerticalAlignment="Top" Width="424"/>



Passiamo in visualizzazione anche tramite doppio click sul pulsante.
Nella parte di codice, inseriamo lo spazio dei nomi, per gestire le immagini , finestra di dialogo e il testo nei file immagini.
Qui di seguito la dichiarazione, che va inserito in alto sopra ai vari eventi e metodi.


C#

using Windows.Graphics.Imaging;

using Windows.Storage.Pickers;

using Windows.UI.Xaml.Media.Imaging;

using Windows.Media.Ocr;

Nell’evento, che dev’esser di tipo asincrono, scriviamo il codice per la gestione dei file immagine.
In particolare, avremo un oggetto che visualizza una finestra di dialogo per selezionare il file immagine creato in precedenza, che contiene il testo, un oggetto di tipo Softwabitmap per la gestione dei file immagini e gli oggetti per gli ocr, in particolare un oggetto di tipo OcrEngine e OcrResult, per ricavare il testo.
Qui di seguito si riporta il codice completo per l’evento click del pulsante.
Inoltre nel controllo texblock verrà visualizzato il testo, mentre nel controllo image viene visualizzata l’immagine selezionata.


C#

private async void BtnOcr_Click(object sender, RoutedEventArgs e)

        {

 

            SoftwareBitmap bitmapImmagine;

            var pickerFinestraDialogo = new FileOpenPicker()

            {

                SuggestedStartLocation = PickerLocationId.PicturesLibrary,

                FileTypeFilter = { ".jpg", ".jpeg", ".png" },

            };

 

            var fileRilevato = await pickerFinestraDialogo.PickSingleFileAsync();

            if (fileRilevato != null)

            {

                

               

               

                using (var stream = await fileRilevato.OpenAsync(Windows.Storage.FileAccessMode.Read))

                {

                    var decoder = await BitmapDecoder.CreateAsync(stream);

 

                    bitmapImmagine = await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);

 

                    var imgSource = new WriteableBitmap(bitmapImmagine.PixelWidth, bitmapImmagine.PixelHeight);

                    bitmapImmagine.CopyToBuffer(imgSource.PixelBuffer);

                    imgImmagineRilevata.Source = imgSource;

                }

                OcrEngine ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages();

               

 

                if (ocrEngine != null)

                {

                    OcrResult ocrRisultato = await ocrEngine.RecognizeAsync(bitmapImmagine);

                    textBlock.Text = "Testo rilevato: " + ocrRisultato.Text;

 

 

 

                }

 

              

            }

 

 

        }


Conclusioni

L’articolo ha voluto fornire al lettore le basi per la realizzazione di applicazione o funzionalità di tipo OCR, riguardante appunto il rilevamento del testo nei file immagini.
Le potenzialità offerte della varie classi, offrono allo sviluppatore opportunità per gestire e creare dei veri programmi di gestione documentale professionali, oltre che vari programmi.
La semplicità dell’utilizzo delle classi messi a disposizione dal Framework rendono la scrittura del codice molto semplice ed intuitiva, in particolare quelli di tipo UWP.

domenica 26 novembre 2017

.Net UWP una app per gestire video ed audio

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/programmazione/art_net-46-realizzare-una-app-per-la-gestion_1541.aspx


In questo articolo vedremo come realizzare in Visual Studio 2017, versione community, un progetto di tipo app, in particolare una Universal Windows Platform (UWP) tramite il linguaggio di programmazione VB.Net e C#.

Creazione del progetto

Si crea un nuovo progetto di tipo Universal Windows Platform, tramite il linguaggio di proprio gradimento.
Dopo la creazione selezioniamo il file di tipo “MainPage.xaml”.

Stesura del codice

Dopo aver selezionato il file di tipo “MainPage.xaml” che permette di visualizzare la parte grafica della nostra app, aggiungiamo un controllo di tipo pulsante ed un controllo di tipo Textblock, dove verrà riportato del testo. A questo punto dopo aver selezionato il controllo pulsante,  nella finestra delle proprietà, facciamo doppio click sull’evento “Click” in modo che viene visualizzata la parte del codice.
Qui di seguito si riporta il frammento di codice dell’evento click di tale pulsante, per entrambi i linguaggi.



VB.Net

Private Async Sub button_Click(sender As Object, e As RoutedEventArgs)

        Dim mediaElement As New MediaElement()

        Dim synthSpeech = New Windows.Media.SpeechSynthesis.SpeechSynthesizer()

        Dim streamSpeechSynthesis As Windows.Media.SpeechSynthesis.SpeechSynthesisStream = Await synthSpeech.SynthesizeTextToStreamAsync("Ciao ragazzi!")

        mediaElement.SetSource(streamSpeechSynthesis, streamSpeechSynthesis.ContentType)

        mediaElement.Play()

        textBlock.Text = mediaElement.NaturalDuration.TimeSpan.TotalMilliseconds.ToString()

    End Sub

C#

private async void button_Click(object sender, RoutedEventArgs e)

        {

            MediaElement mediaElement = new MediaElement();

            var synthSpeech = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();

            Windows.Media.SpeechSynthesis.SpeechSynthesisStream streamSpeechSynthesis = await synthSpeech.SynthesizeTextToStreamAsync("Ciao ragazzi!");

            mediaElement.SetSource(streamSpeechSynthesis, streamSpeechSynthesis.ContentType);

            mediaElement.Play();

            textBlock.Text =  mediaElement.NaturalDuration.TimeSpan.TotalMilliseconds.ToString();

        }



Come si vede dal codice precedente, si crea un oggetto di tipo “MediaElement”, uno di tipo SpeechSyntesizer con il quale andremo ad eseguire la lettura del testo tramite voce di default del pc.
Il metodo “Play” permette l’esecuzione della riproduzione del testo tramite voce.
Aggiungiamo nella nostra pagina, o form, tre pulsanti, ed un controllo di tipo “mediaElement”.
I pulsanti, avranno il compito rispettivamente di avviare l’esecuzione di un video, di metterlo in pausa o di fermarlo.
Mentre il controllo di tipo “MediaElement” di visualizzare il video.
Aggiungiamo nel nostro progetto, anche un file di tipo video.
Impostiamo nei vari pulsante, la proprietà “text” con i valori “Play”, “Ferma” e “Pausa” per ogni pulsante.
Qui di seguito si riporta il codice completo per la parte XAML



 Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

        <Button x:Name="button" Content="Messaggio" HorizontalAlignment="Left" Margin="55,237,0,0" VerticalAlignment="Top" Click="button_Click"/>

        <MediaElement x:Name="mediaElementControl" Source="Media\WP_20170505_001.mp4" HorizontalAlignment="Left" Height="100" Margin="155,210,0,0" VerticalAlignment="Top" Width="100" MediaOpened="mediaElement_MediaOpened"/>

        <TextBlock x:Name="textBlock" HorizontalAlignment="Left" Margin="55,269,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"/>

        <Button x:Name="BtnPlay" Content="Play" HorizontalAlignment="Left" Margin="55,294,0,0" VerticalAlignment="Top" Click="BtnPlay_Click"/>

        <Button x:Name="BtnPausa" Content="Pausa" HorizontalAlignment="Left" Margin="55,331,0,0" VerticalAlignment="Top" Width="62" Click="BtnPausa_Click"/>

        <Button x:Name="BtnFerma" Content="Ferma" HorizontalAlignment="Left" Margin="55,368,0,0" VerticalAlignment="Top" Click="BtnFerma_Click"/>

 

    </Grid


Per il pulsante “Play” facciamo doppio click sull’evento click, in modo che passiamo in visualizzazione codice e scriviamo le istruzioni per avviare il video.


VB.Net

Private Sub BtnPlay_Click(sender As Object, e As RoutedEventArgs)

        mediaElementControl.Play()

       

    End Sub

C#

private void BtnPlay_Click(object sender, RoutedEventArgs e)

        {

            mediaElementControl.Play();

            

        }


Nel frammento di codice precedente, viene eseguito il metodo “Play” del controllo “MediaElement” posizionato in precedenza, ed impostato il percorso e nome del file video nella proprietà “Source”
Per ogni evento click del pulsante, utilizzeremo eventi, quale quello di pausa o ferma esecuzione del video, del controllo MediaElement.
Qui di seguito il frammento di codice di tali istruzioni.



VB.Net

Private Sub BtnPausa_Click(sender As Object, e As RoutedEventArgs)

        mediaElementControl.Pause()

 

    End Sub

 

    Private Sub BtnFerma_Click(sender As Object, e As RoutedEventArgs)

        mediaElementControl.Stop()

    End Sub

C#

   private void BtnFerma_Click(object sender, RoutedEventArgs e)

        {

            mediaElementControl.Stop();

        }

 

        private void BtnPausa_Click(object sender, RoutedEventArgs e)

        {

            mediaElementControl.Pause();

        }


Vediamo per concludere l’evento “MediaOpened” che si verifica quando il controllo MediaElement, prende lo stato attivo, ossia carica nella parte grafica l’immagine.


VB.Net

Private Sub mediaElement_MediaOpened(sender As Object, e As RoutedEventArgs)

        textBlock.Text = mediaElementControl.NaturalDuration.TimeSpan.TotalSeconds.ToString()

    End Sub

C#

private void mediaElement_MediaOpened(object sender, RoutedEventArgs e)

        {

            textBlock.Text = mediaElementControl.NaturalDuration.TimeSpan.TotalSeconds.ToString();

 

        }




Ora non ci resta che eseguire la nostra applicazione, ricordandoci di impostare nel nostro sistema operativo Windows 10 la modalità sviluppatore che permette l’esecuzione delle APP, in modo che possiamo testarle sul nostro dispositivo.

Conclusioni

L’articolo ha voluto fornire al lettore le basi per la multimedialità in particolare la gestione dei video, ed il sistema vocale, per rendere le nostre applicazioni di tipo  app con funzionalità vocale.
Le potenzialità offerte dal nuovo .Net, in particolare delle UWP, sono notevoli offrendo ai programmatori classi, di grande utilità che permettono di utilizzare a pieno le funzionalità offerte dal nuovo sistema operativo Windows 10.
La parte che riguarda la multimedialità offre molto e si possono creare applicazioni di una certa complessità, l'articolo ha voluto solo fornire al lettore come con poco si possono creare applicazioni di un certo tipo.

mercoledì 19 luglio 2017

UWP aggiungere un controllo dinamicamente XAML C#

Quando si realizzano applicazioni di tipo Universal Windows Platform, nel caso che si vuole aggiungere nella pagina XAML un controllo dinamicamente il frammento di codice qui di seguito illustra tale tecnica, aggiungendo un controllo di tipo texblock.

Il nome GridMaster, è il nome del controllo Grid della pagina XAML.


C#
   TextBlock txbTesto = new TextBlock();
            txbTesto.Margin = new Thickness(200, 500, 0, 0);
            txbTesto.Text = "Prova controllo runtime";
            gridMaster.Children.Add(txbTesto);