Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1907, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Xamarin.Forms e i Cognitive Services di Microsoft - Celebrity recognition

Dopo aver parlato di OCR nel post precedente, sempre nell'ambito dei Microsoft Cognitive Services utilizzati con Xamarin.Forms, stavolta parliamo dell'ultima area di Computer Vision, ossia quella nota col nome di Celebrity recognition.

Come il nome lascia intendere, questo servizio consente di riconoscere celebrità in una foto. Ma è solo l'inizio.

Considerazioni sul Domain-specific Model

Ciò che abbiamo visto finora sull'analisi di immagini è un qualcosa di alto livello, inteso come analisi generica dei contenuti. Microsoft sta lavorando su un sistema di analisi più specifico, attraverso i c.d. domain-specific model, che consentiranno di eseguire analisi specializzate su categorie ben precise di immagini e/o persone. L'unico domain-specific model disponibile ad oggi è quello delle celebrità, ma in futuro ce ne potrebbero essere altri e soprattutto il servizio dovrebbe essere estendibile.

Gli oggetti con cui lavoriamo

(Utilizziamo ancora Peek Definition e Go To Definition....)
Anche in questo caso abbiamo già le librerie necessarie e la subscription key è la stessa. L'analisi funziona in questo modo: con VisionServiceClient.ListModelsAsync otteniamo un elenco di domain model, rappresentati dalla classe ModelResult. Questa ha una proprietà Models di tipo array di Model ed ogni istanza contiene il nome del domain model e le categorie di immagini che rappresenta. Sappiamo che ad oggi c'è un solo domain model, quindi prenderemo il primo dell'array. Ottenuto il domain-specific model, chiamiamo il metodo AnalyzeImageInDomainAsync a cui passiamo l'immagine da analizzare e il domain stesso. Il risultato viene restituito sotto forma di oggetto AnalysisInDomainResult che, tra le altre, ha una proprietà Result di tipo object. Perchè? Perché di fatto è JSON e quindi il suo contenuto va prima deserializzato e poi usato. Per farlo utilizzeremo Newtonsoft.Json.

La pagina
Avevamo iniziato, come ricorderete, con una TabbedPage a cui vanno aggiunte le ContentPage. Ne creiamo una chiamata CelebrityPage.xaml che andremo ad aggiungere alla TabbedPage tramite il costruttore di MainPage.xaml.cs così:

public partial class MainPage : TabbedPage 
{
     public MainPage()
     {
         InitializeComponent();
         this.Children.Add(new ComputerVisionPage());
         this.Children.Add(new OcrPage());
         this.Children.Add(new CelebrityPage());
     }
}

Il codice XAML

La UI è molto semplice, ed è costituita da una ListView che mostra l'elenco di celebrità:


Nulla di particolarmente difficile fino a questo punto.

Il codice C#

Il codice C# ha qualche spunto di riflessione in più stavolta. Sicuramente ci sono ancora i due event handlers per i pulsanti che fanno anche la chiamata ad un metodo che ho chiamato AnalyzePictureAsync, che si occupa di ottenere il domain model e di inviare al servizio l'immagine. Il domain model viene rilevato tramite un metodo che ho chiamato GetDomainModelAsync. Il risultato di AnalyzePictureAsync è un'istanza di AnalysisInDomainResult, la cui proprietà Result contiene il JSON del risultato. Quest'ultimo contiene un array di stringhe che definiscono le categorie dei domain model e i nomi delle persone riconosciute in ciascuna categoria. La deserializzazione avviene quindi tramite Newtonsoft.Json.Linq.JObject.Parse e tramite poi una query LINQ. La collection ottenuta viene restituita al chiamante per popolare la ListView:


Il risultato

Ecco come l'app, tramite i Cognitive Services, rileva le celebrità sulla foto (sono su Android qui ma il risultato è identico anche con UWP e iOS):



Come detto, al momento il domain-specific model è sulle celebrità, ma la prospettiva è quella che sia estendibile ad altre categorie di persone.

Sorpresa... Vision e celebrità

Vi ricordate la parte di Computer Vision che abbiamo visto due post fa? Beh, provate ad analizzare una foto con delle celebrità. Il servizio riconoscerà le celebrità e descriverà cosa stanno facendo (sempre con un grado di approssimazione buono ma non infallibile ):



Concludiamo così i tre post dedicati alle Computer Vision API usando Xamarin.Forms e librerie client. Prossimamente vedremo invece come utilizzare l'approccio basato su HttpClient in applicazioni ASP.NET Core.

Alessandro

Print | posted on lunedì 30 gennaio 2017 00:00 | Filed Under [ Xamarin ]

Powered by:
Powered By Subtext Powered By ASP.NET