Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, 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 - Emotion APIs

Nel post precedente abbiamo parlato delle Face API, utilizzandole in un'app cross-platform creata con Xamarin.Forms per il riconoscimento visivo su Android, iOS e Windows. Abbiamo visto come le Face API consentano di riconoscere tratti somatici e caratteristiche di un viso, inclusa l'età (approssimativa), genere, barba e baffi.

In questo post parliamo del naturale corollario alle Face API, ossia le Emotion API. Come il nome lascia intendere, le Emotion API consentono di rilevare le emozioni che una persona sta provando a partire da una foto o un video. Se non lo avete già fatto, dovete chiaramente attivare la sottoscrizione per queste API dal portale dei Cognitive Services al fine di ottenere la subscription key che servirà nel codice.

Progetto, librerie e pacchetti NuGet

Partiamo quindi da un nuovo progetto Xamarin.Forms basato su XAML e Portable Class Library. A livello di solution installeremo ancora il plugin Xam.Plugin.Media, che ci serve per la selezione delle immagini, mentre a livello di sola PCL stavolta installeremo la libreria Microsoft.ProjectOxford.Emotion.

Nulla vi vieta di estendere l'esempio della volta scorsa, faccio in questo modo per semplificare il discorso.

Gli oggetti con cui lavoriamo


Le Emotion API sono estremamente semplici da utilizzare. In primo luogo si utilizza la classe EmotionServiceClient, il cui costruttore riceve la nostra subscription key e che espone due metodi che si chiamano RecognizeAsync e RecognizeInVideoAsync. Il primo lavora con le immagini, ed è quello che utilizzeremo, il secondo con i video. RecognizeAsync è in grado di rilevare le emozioni su tutti i visi in una foto e restituisce un array di oggetti Emotion. Ciascuno di questi conterrà:

  • Le emozioni rilevate sotto forma di classe chiamata Scores. Questa espone una serie di proprietà di tipo float, ognuna corrispondente a uno stato d'animo. Questo perché le Emotion API non rilevano un'unica emozione, ma una serie di possibili emozioni secondo una scala di valori che va da 0 a 1. Il valore più alto indicherà l'emozione ritenuta prevalente.
  • La posizione dei vari visi all'interno della foto/video tramite oggetti Rectangle, con 4 proprietà int che rappresentano le coordinate del viso.
Scores è una classe e, così com'è, andrebbe analizzata nelle sue proprietà per capire le varie emozioni rilevate. Fortunatamente, espone anche un metodo che si chiama ToRankedList(), che restituisce una lista ordinata di emozioni rilevate dal valore più alto al più basso, sotto forma di Dictionary<string, int> dove la chiave è il testo dello stato d'animo e il valore è la sua rappresentazione numerica. Ciò che farà l'app dimostrativa sarà rilevare le emozioni su un singolo viso mostrandole nella UI; trattandosi di un array, il risultato può ovviamente essere iterato o analizzato in caso di più visi.

Il codice

Partiamo dallo XAML. L'interfaccia dell'app è veramente essenziale, con pulsanti per la selezione della foto da device o da fotocamera e una ListView in binding al Dictionary contenente gli scores:



Nel codice seguente, invece, sicuramente la selezione dell'immagine tramite fotocamera o gallery ma soprattutto l'analisi delle emozioni demandata ad un metodo che ho chiamato DetectEmotionAsync e il cui risultato verrà collegato in binding alla UI:


Il risultato
Il risultato ottenuto è simile al seguente, in cui l'app sta girando su Android e che sarà analogo in iOS e Windows:


 

In questo caso il valore più elevato è Neutral (in realtà Surprise e Disgust andrebbero convertiti) ed effettivamente è quello maggiormente corrispondente alla mia espressione in foto. Capite che la combinazione di Face ed Emotion API può portare un enorme valore alle app che sviluppate per le varie piattaforme.

Nel prossimo post cominceremo ad occuparci di Computer Vision APIs, partendo dal riconoscimento di ciò che ci circonda per poi analizzare OCR e celebrity recognition nei due post successivi.

Alessandro

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

Powered by:
Powered By Subtext Powered By ASP.NET