SlideShare une entreprise Scribd logo
1  sur  55
Kinect + .NET = NUI : Interfacce
naturali facili con Kinect!!!
Massimo Bonanni

massimo.bonanni@domusdotnet.org
http://codetailor.blogspot.com
@massimobonanni
Agenda
• Natural User Interface
• Introduzione al Kinect
  – Cosa c’è dentro
  – Architettura
• Kinect SDK
  –   Camera Data
  –   Depth data
  –   Skeletal tracking
  –   Audio
• Q&A
                                   2
Natural User Interface
Si definisce NUI l’interfaccia di un sistema in cui gli utenti riescono ad
interagire utilizando un approccio «naturale» cioè riescono ad utilizzare
le funzionalità del sistema senza l’uso di dispositivi artificiali (come
mouse, trackball o tastiera)
                                 Una NUI è rivolta ad utenti in grado di
                                 effettuare movimenti relativamente
                                 naturali, azioni e gesti che devono
                                 controllare l’applicazione del
                                 computer o manipolare contenuti sullo
                                 schermo.

                                                                         3
NUI : Evoluzione delle interfacce




                                    4
NUI: Vantaggi
• Rapido apprendimento delle funzionalità;

• L’utente è in grado di diventare «esperto»
  sull’interfaccia in minor tempo;

• Può aiutare portatori di handicap nell’utilizzo
  del sistema.

                                                    5
Kinect: Cosa c’è dentro
                                                              Video Camera
                                                                  RGB



                      Sensori di
                      profondità


                                          Batteria di 4
                                           microfoni
•   Video Camera RGB (CMOS)                                       Inclinazione
                                                                  Motorizzata
•   Sensori di profondità: proiettore IR + Camera IR (CMOS)
•   Inclinazione motorizzata (±27 gradi)
•   4 Microfoni
                                                                                 6
Kinect: Cosa c’è dentro




                          7
Kinect: Architettura hardware




                                8
Kinect: Come funziona
                                                             La nostra
Il proiettore ad                                             applicazione
infrarossi illumina il                                       utilizza le info
soggetto con dei                                             dell’SDK
pattern
                                      L’SDK è in grado di
                                      convertire lo stream della
                                      depth cam in dati
                                      utilizzabili
                         La camera infrarossi
                         misura la distanza
                         con un approccio «a
                         luce strutturata»
                                                                          9
Kinect: Cosa serve

• Kinect;
• Cavo usb per
  collegamento a pc;
• Kinect SDK;
• DirectX9;
• .........tanta fantasia!!!

                                        10
Kinect: Requisiti minimi
•   Sistema Operativo
    – Windows 7 (x86 and x64)
•   Hardware
    –   Processore dual-core 2.66GHz o superiore
    –   2Gb ram
    –   Scheda grafica DiretcX9 o superiore
    –   USB 2.0 dedicata
    –   Kinect con cavo usb per collegamento al pc
•   Software
    –   Visual Studio 2010 Express o superiori
    –   .NET Framework 4.0
    –   Runtime DirectX 9
    –   Microsoft Speech Platform SDK v11 (solo per lo speech recognition)

                                                                             11
Kinect: Architettura
L’SDK mette a disposizione una serie di strumenti e una
libreria di classi in grado di interagire con i sensori del
dispositivo fornendo allo sviluppatore oggetti ed eventi.




                                                          12
Kinect: Architettura
I componenti dell’SDK sono i seguenti:
                                                 Applications
                                  Video Components                              Audio Components
                                                                                 Windows Core Audio        5
                                              A/V capture and transcoding
       3               NUI API                                                    and Speech APIs
                                               Media Foundation | DirectShow                               4
                                                                                 DMO codec for mic array

       2   Device      Device
                                          Video stream control                 Audio stream control        User Mode
           setup       access

           WinUSB device stack           WinUSB camera stack                   USBAudio audio stack        Kernel Mode


                                 Kernel-mode drivers for Kinect for Windows


                                                     USB Hub                                               Hardware
       1
                    Motor                            Cameras                         Audio mic array
                                                  Kinect sensor

              Kinect for                      Windows                           User-created
              Windows SDK                     components                        components


                                                                                                                         13
Kinect: Architettura
•   Hardware
    L’hardware comprende i sensori visti in precedenza è l’hub USB che permette
    il loro collegamento al pc.

•   Microsoft Kinect drivers :
    a)   Permettono l’accesso all’array di microfoni con le API Audio standard di Windows.
    b)   Forniscono gli stream della video camera e dei sensori di profondità.
    c)   Forniscono la possibilità di utilizzare più device contemporaneamente.




                                                                                       14
Kinect: Architettura
•   NUI API
    Un insieme di API che permettono di recuperare i dati dai sensori di immagine
    e di controllare il device stesso (ad esempio brandeggiare il dispositivo).

•   KinectAudio DMO
    Estende le funzionalità dell’array di microfoni supportato in Windows 7 per
    fornire le funzionalità di Beamforming (mappatura sonora dell’area) e
    localizzazione della sorgente sonora.

•   Windows 7 standard APIs
    Le API audio, speech e media presenti in Windows 7 e Microsoft Speech.

                                                                                  15
Kinect: Architettura
Il device restituisce 3 stream:
     – Video
     – Depth
     – Audio




                                              16
Kinect: XBox o Windows
• Attualmente esistono due versioni di Kinect:
   – Kinect for XBox
   – Kinect for Windows


• E’ possibile utilizzare il Kinect for XBox per fare esperimenti
  con l’SDK per Windows

• Si ottiene un errore se si utilizza il Kinect per XBox in
  produzione
                                                                    17
Kinect : SDK
•   L’SDK è scaricabile dall’indirizzo http://kinectforwindows.org
•   Vengono installati contestualmente l’SDK (con il Kinect Sample Browser), i
    drivers, il Runtime (quello da distribuire con le applicazioni ) e lo Speech
    Recognition Language Pack.




                                                                               18
Kinect: Default Mode vs Near Mode
Il Kinect può gestire oggetti a differenti distanze in base
alla modalità selezionata:
   – Default Mode: oggetti tra 80 cm e 4 metri;
   – Near Mode: oggetti tra 40 cm e 3 metri




                                                          19
Kinect: La classe KinectSensor
La classe
KinectSensor
permette l’accesso
alle funzionalità del
Kinect:




                                         20
Kinect: La classe KinectSensor
Recuperiamo l’istanza del KinectSensor a partire dalla
collezione KinectSensors:
                                               Recupero il primo dei
                                                sensori disponibili




                                                 Abilito lo stream video
                          Avvio la ricezione        640x480 30 fps
                           dei frame video



                                                                       21
Kinect: Camera Data
La classe KinectSensor mette a disposizione l’evento
ColorFrameReady per la gestione dei frame video.




                                                       22
Kinect: ColorImageFrameReadyEventArgs




                                    23
Kinect: Camera Data
Per utilizzare l’evento VideoFrameReady è necessario:
    1.   Recuperare il device dalla collezione KinectSensors della classe KinectSensor;
    2.   Abilitare lo stream video con la risoluzione/fps desiderato;
    3.   Sottoscriversi all’evento ColorFrameReady;
    4.   Avviare gli stream dell’istanza di KinectSensor.




E’ anche possibile eseguire un polling direttamente sullo stream video.
                                                                                          24
Kinect: Camera Data
•   Risoluzioni ammesse
     – 640x480
     – 1280x960

•   Numero di bytes per pixel 2 o 4

•   FPS
     – 12
     – 15
     – 30

•   Formato immagine:
     – RGB (pixel da 4 bytes: blu, verde, rosso e alfa)
     – YUV (pixel da 4 bytes: ciano, magenta, giallo e nero)
     – YUV-RAW (pixel da 2 bytes: ciano, magenta, giallo e nero, solo 640x480 15 fps)

                                                                                        25
26
Kinect: Depth Data
La classe KinectSensor mette a disposizione l’evento
DepthFrameReady per la gestione dei frame di profondità:




                                                           27
Kinect: DepthImageFrameReadyEventArgs




                                    28
Kinect: Depth Data
Per utilizzare l’evento DepthFrameReady è necessario:
    1.   Recuperare il device dalla collezione KinectSensors della classe KinectSensor;
    2.   Abilitare lo stream depth con la risoluzione/fps desiderato;
    3.   Sottoscriversi all’evento DepthFrameReady;
    4.   Avviare gli stream dell’istanza di KinectSensor.




E’ anche possibile eseguire polling direttamente sullo stream di profondità
                                                                                          29
Kinect: Depth Data
• Risoluzioni ammesse
   – 640x480 (30 fps)
   – 320x240 (30 fps)
   – 80x60 (30 fps)

• Numero di bytes per pixel 2

• Contenuto immagine:
   – Distanza (in millimetri, tra 400mm e 4000mm in base alla modalità)
   – Player index (player index 1, 2 o 0 se non c’è un player)


                                                                          30
Kinect: Depth Data
Per ogni punto (x,y), il valore di tipo Short (2 bytes) ottenuto dal Kinect ha la
seguente struttura:




 ed i valori di profondità e player index sono dati dalle formule




                                                                                    31
Kinect: Depth Data
Esempio:




                                32
Kinect: Depth Data
Possiamo sapere se un punto si trova troppo vicino, troppo lontano o nella
zona sconosciuta utilizzando tre proprietà dello stream di profondità:
                          KinectSensor.DepthStream.TooNearDepth




  KinectSensor.DepthStream.UnknownDepth     KinectSensor.DepthStream.TooFarDepth


                                                                             33
34
Kinect: Skeletal tracking
• L’SDK permette di avere informazioni riguardo la posizione di alcuni
  punti del corpo dei player rilevati.
• L’algoritmo di skeletal tracking è basato sul «Machine Learning»
• La classe KinectSensor mette a disposizione l’evento
  SkeletonFrameReady per la gestione dei frame di di skeletal
  tracking:




E’ anche possibile eseguire polling sullo Skeleton Stream esposto dalla
KinectSensor.
                                                                          35
Kinect: Skeletal tracking




                            36
Kinect: Skeletal Tracking
Per utilizzare l’evento KeletonFrameReady è necessario:
   1.   Recuperare il device dalla collezione KinectSensors della classe KinectSensor;
   2.   Abilitare lo stream Skeletal Tracking;
   3.   Sottoscriversi all’evento SkeletonFrameReady;
   4.   Avviare gli stream dell’istanza di KinectSensor.




                                                                                         37
Kinect: La classe Skeleton
La classe Skeleton contiene le informazioni
sugli «scheletri» dei player rilevati:
 – Al massimo due player contemporanei (più altri
   4 con informazioni ridotte);
 – Ogni «scheletro» può essere Tracked o
   NotTracked;
 – Ogni scheletro prevede un array di 20 Joint
   ognuno con la propria posizione (x,y,z);
 – Ogni Joint può essere Tracked, NotTracked o
   Inferred (NotTracked è raro).



                                                    38
Kinect: Joints
•   Ogni scheletro ha 20 oggetti Joint che tracciano la posizione del corpo del player;
•   La posizione del joint nello spazio è contenuta nella proprietà Position (di tipo
    SkeletonPoint):
     – X: posizione x (compreso tra -1 e 1);
     – Y: posizione y (compreso tra -1 e 1);
     – Z: distanza dal device (in metri).




                                                                                          39
Kinect: Skeletal Tracking
•   Il rilevamento dei sensori è affetto da errore (problemi costruttivi, luminosità
    eccessiva dell’ambiente, rumore visivo e via discorrendo) e i dati restituiti
    hanno delle fluttuazioni che non sempre sono gradite nelle applicazioni.
•   Lo Skeleton Stream esposto dalla KinectSensor fornisce la possibilità di
    impostare dei filtri per eliminare il rumore:




                                                                                  40
Kinect: TransformSmoothParameters
•   Smoothing : specifica lo smoothing da applicare. I valori sono compresi tra 0 e 1.
    Più il valore si avvicia a 1 e più viene applicato il fattore di smoothing;
•   Correction : specifica la correzione da apportare ai dati. I valori sono compresi tra 0
    e 1. Più piccolo il valore inserito e meno è la correzione sui dati grezzi;
•   Prediction : specifica il numero di frame previsti;
•   Jitter Radius : specifica il raggio di riduzione del jitter (in metri). Ogni jitter esterno
    al raggio è riportato nel raggio impostato;
•   MaximumDeviation Radius : specifica il raggio massimo (in metri) che i punti filtrati
    possono deviare rispetto ai dati grezzi

Non esistono dei valori «buoni» da utilizzare, è necessario eseguire delle prove per
  capire quali sono i più adatti per la specifica applicazione

                                                                                             41
Kinect: «Default Mode» vs «Near Mode»
Il comportamento dello Skeletal Tracking varia in base
al fatto che ci si trovi in «Default Mode» o «Near Mode»




                                        Si tratta della proprietà
                                 Skeleton.Position valorizzata quando
                                    lo scheletro è completamente
                                                tracciato

                                                                   42
43
Kinect: AllFrameEvent
La classe KinectSensor mette a disposizione un evento per
ottenere contemporaneamente tutti e tre i frame visti in
precedenza:




L’FPS, in questo caso, è pari al più basso tra i differenti stream.
                                                                      44
Kinect: Audio
Il device dispone di una
batteria di 4 microfoni con
delle funzionalità di “audio
processing” hardware:

•   Multichannel echo cancellation (MEC)
•   Sound position tracking
•   Directional Microfone
•   Noise suppression e Noise reduction
                                           45
Kinect: KinectAudioSource
La classe KinectSensor espone
la proprietà AudioSource di tipo
KinectAudioSource attraverso la
quale è possibile gestire tutte le
funzionalità audio.




                                         46
Kinect : Sound Position
Il Kinect, permette di :

•Conoscere l’angolo e la «confidence» della sorgente sonora (Sound
Source Angle);

•Impostare la direzionalità dei microfoni del sensore in modo da rilevare
l’audio solo da una certa direzione (Beam Angle)

In entrambi i casi l’intervallo di copertura è:

      -50                           0                        +50
                                                                       47
Kinect : Sound Source Angle
Per gestire la variazione di angolo della sorgente sonora, è
sufficiente gestire l’evento SoundSourceAngleChanged della
classe KinectAudioSource:




                                                               48
Kinect : Audio Streaming
• La classe KinectAudioSource, grazie al metodo
  Start(), consente di recuperare lo stream
  dell’audio proveniente dal sensore.

• Lo stream può essere, ad esempio, registrato
  in tempo reale.

                                                 49
Kinect: Speech Recognition
L’SDK del Kinect si integra perfettamente con lo
Speech Platform SDK per implementare voice
recognition.

Il sensore altro non fa che supportare uno
SpeechRecognizer utilizzabile dallo
SpeechRecognitionEngine dello Speech Platform.

                                                   50
51
Conclusioni
L’SDK è in continua evoluzione con continui rilasci.

Ad ogni rilascio viene migliorata la stabilità dei driver,
Skeletal Tracking e precisione dei dati recuperati dal
sensore di profondità.

Attualmente abbiamo un SDK maturo per cominciare a
sviluppare nuove tipologie di applicazioni

                                                             52
Q&A (non sparate sul Kinect )




                                 53
Best Kinect hack




Premio : un Kinect XBox (Microsoft)

                                      54
Riferimenti
•   Kinect SDK Web Site
        http://www.microsoft.com/en-us/kinectforwindows/
•   Coding4Fun Kinect Toolkit
        http://c4fkinect.codeplex.com/
•   Kinect Toolbox
        http://kinecttoolbox.codeplex.com/
•   Channel 9 Kinect for Windows SDK Quickstarts
        http://channel9.msdn.com/Series/KinectQuickstart
•   Coding4Fun @ Channel 9
        http://dev9.channel9.msdn.com/coding4fun/kinect

                                                           55

Contenu connexe

Tendances

Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su Linux
Majong DevJfu
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-max
DotNetCampus
 
Gam04 introduzione a-netduino_final
Gam04   introduzione a-netduino_finalGam04   introduzione a-netduino_final
Gam04 introduzione a-netduino_final
DotNetCampus
 

Tendances (14)

Meetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functions
 
Are you a Gadgeteer? - NetMF@Work
Are you a Gadgeteer? - NetMF@WorkAre you a Gadgeteer? - NetMF@Work
Are you a Gadgeteer? - NetMF@Work
 
Traffic Shaping Su Linux
Traffic Shaping Su LinuxTraffic Shaping Su Linux
Traffic Shaping Su Linux
 
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
 
Del furia signalr-to-the-max
Del furia   signalr-to-the-maxDel furia   signalr-to-the-max
Del furia signalr-to-the-max
 
Power BI data flow and Azure IoT Central
Power BI data flow and Azure IoT CentralPower BI data flow and Azure IoT Central
Power BI data flow and Azure IoT Central
 
70-485: ADVANCED OF DEVELOPING WINDOWS STORE APPS USING C#
70-485: ADVANCED OF DEVELOPING WINDOWS STORE APPS USING C#70-485: ADVANCED OF DEVELOPING WINDOWS STORE APPS USING C#
70-485: ADVANCED OF DEVELOPING WINDOWS STORE APPS USING C#
 
Microsoft Azure per l'IT Pro
Microsoft Azure per l'IT ProMicrosoft Azure per l'IT Pro
Microsoft Azure per l'IT Pro
 
Predictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoTPredictive Maintenance per le aziende del nord-est con Azure e IoT
Predictive Maintenance per le aziende del nord-est con Azure e IoT
 
Gam04 introduzione a-netduino_final
Gam04   introduzione a-netduino_finalGam04   introduzione a-netduino_final
Gam04 introduzione a-netduino_final
 
Soluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie MicrosoftSoluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie Microsoft
 
Applicazioni Windows Store con Kinect 2
Applicazioni Windows Store con Kinect 2 Applicazioni Windows Store con Kinect 2
Applicazioni Windows Store con Kinect 2
 
Python <3 Azure
Python <3 AzurePython <3 Azure
Python <3 Azure
 
Protocol Rollercoaster: da HTTP a AMQP, passando per CoAP e MQTT
Protocol Rollercoaster: da HTTP a AMQP, passando per CoAP e MQTTProtocol Rollercoaster: da HTTP a AMQP, passando per CoAP e MQTT
Protocol Rollercoaster: da HTTP a AMQP, passando per CoAP e MQTT
 

Similaire à Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!

Present kinect4 windows
Present kinect4 windowsPresent kinect4 windows
Present kinect4 windows
I3P
 
Gam01 introduzione a kinect
Gam01   introduzione a kinectGam01   introduzione a kinect
Gam01 introduzione a kinect
DotNetCampus
 
Smau milano 2012 arena expo comm maurizio-palermo
Smau milano 2012   arena expo comm maurizio-palermoSmau milano 2012   arena expo comm maurizio-palermo
Smau milano 2012 arena expo comm maurizio-palermo
SMAU
 
Gam05 costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...
Gam05   costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...Gam05   costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...
Gam05 costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...
DotNetCampus
 
Smau milano 2012 arena expo comm francesco-abbo
Smau milano 2012   arena expo comm francesco-abboSmau milano 2012   arena expo comm francesco-abbo
Smau milano 2012 arena expo comm francesco-abbo
SMAU
 
TBIZ 2011- Integra solution. Web Eye
TBIZ 2011- Integra solution. Web EyeTBIZ 2011- Integra solution. Web Eye
TBIZ 2011- Integra solution. Web Eye
TechnologyBIZ
 

Similaire à Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!! (20)

Present kinect4 windows
Present kinect4 windowsPresent kinect4 windows
Present kinect4 windows
 
Kinect : Just for fun?
Kinect : Just for fun?Kinect : Just for fun?
Kinect : Just for fun?
 
Kinect and brave new applications
Kinect and brave new applicationsKinect and brave new applications
Kinect and brave new applications
 
DotNetCampus 2014 - Introduzione a Kinect
DotNetCampus 2014 - Introduzione a KinectDotNetCampus 2014 - Introduzione a Kinect
DotNetCampus 2014 - Introduzione a Kinect
 
Kinect, wp8 & human recognition
Kinect, wp8 & human recognitionKinect, wp8 & human recognition
Kinect, wp8 & human recognition
 
Gam01 introduzione a kinect
Gam01   introduzione a kinectGam01   introduzione a kinect
Gam01 introduzione a kinect
 
HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile Applications
 
Smau milano 2012 arena expo comm maurizio-palermo
Smau milano 2012   arena expo comm maurizio-palermoSmau milano 2012   arena expo comm maurizio-palermo
Smau milano 2012 arena expo comm maurizio-palermo
 
Gam05 costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...
Gam05   costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...Gam05   costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...
Gam05 costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...
 
Smau milano 2012 arena expo comm francesco-abbo
Smau milano 2012   arena expo comm francesco-abboSmau milano 2012   arena expo comm francesco-abbo
Smau milano 2012 arena expo comm francesco-abbo
 
OpenGL e realtà aumentata
OpenGL e realtà aumentataOpenGL e realtà aumentata
OpenGL e realtà aumentata
 
Sviluppare applicazioni Metro con Windows 8 e WinRT
Sviluppare applicazioni Metro con Windows 8 e WinRTSviluppare applicazioni Metro con Windows 8 e WinRT
Sviluppare applicazioni Metro con Windows 8 e WinRT
 
Webinar porting e ottimizzazione per x86
Webinar   porting e ottimizzazione per x86Webinar   porting e ottimizzazione per x86
Webinar porting e ottimizzazione per x86
 
Vavn364
Vavn364Vavn364
Vavn364
 
Vavn364
Vavn364Vavn364
Vavn364
 
Vavn363
Vavn363Vavn363
Vavn363
 
Makers Italy: Virtual robotix e le piattaforme di prototipazione rapida vr br...
Makers Italy: Virtual robotix e le piattaforme di prototipazione rapida vr br...Makers Italy: Virtual robotix e le piattaforme di prototipazione rapida vr br...
Makers Italy: Virtual robotix e le piattaforme di prototipazione rapida vr br...
 
Vavn362
Vavn362Vavn362
Vavn362
 
TBIZ 2011- Integra solution. Web Eye
TBIZ 2011- Integra solution. Web EyeTBIZ 2011- Integra solution. Web Eye
TBIZ 2011- Integra solution. Web Eye
 
Vavn263 v
Vavn263 vVavn263 v
Vavn263 v
 

Plus de Massimo Bonanni

Plus de Massimo Bonanni (20)

Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!
 
Durable Functions vs Logic App : la guerra dei workflow!!
Durable Functions vs Logic App : la guerra dei workflow!!Durable Functions vs Logic App : la guerra dei workflow!!
Durable Functions vs Logic App : la guerra dei workflow!!
 
Stateful pattern con Azure Functions
Stateful pattern con Azure FunctionsStateful pattern con Azure Functions
Stateful pattern con Azure Functions
 
Architetture Serverless con SQL Server e Azure Functions
Architetture Serverless con SQL Server e Azure FunctionsArchitetture Serverless con SQL Server e Azure Functions
Architetture Serverless con SQL Server e Azure Functions
 
IoT in salsa serverless
IoT in salsa serverlessIoT in salsa serverless
IoT in salsa serverless
 
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
 
Stateful patterns in Azure Functions
Stateful patterns in Azure FunctionsStateful patterns in Azure Functions
Stateful patterns in Azure Functions
 
IoT in salsa Serverless
IoT in salsa ServerlessIoT in salsa Serverless
IoT in salsa Serverless
 
The art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringThe art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoring
 
Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!
 
The art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringThe art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoring
 
Everything you always wanted to know about API Management (but were afraid to...
Everything you always wanted to know about API Management (but were afraid to...Everything you always wanted to know about API Management (but were afraid to...
Everything you always wanted to know about API Management (but were afraid to...
 
Workflow as code with Azure Durable Functions
Workflow as code with Azure Durable FunctionsWorkflow as code with Azure Durable Functions
Workflow as code with Azure Durable Functions
 
Xmas Serverless Transformation: when the elf doesn’t scale!
Xmas Serverless Transformation: when the elf doesn’t scale!Xmas Serverless Transformation: when the elf doesn’t scale!
Xmas Serverless Transformation: when the elf doesn’t scale!
 
Welcome Azure Functions 2. 0
Welcome Azure Functions 2. 0Welcome Azure Functions 2. 0
Welcome Azure Functions 2. 0
 
Discovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelDiscovering the Service Fabric's actor model
Discovering the Service Fabric's actor model
 
Testing a Service Fabric solution and live happy!!
Testing a Service Fabric solution and live happy!!Testing a Service Fabric solution and live happy!!
Testing a Service Fabric solution and live happy!!
 
Discovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelDiscovering the Service Fabric's actor model
Discovering the Service Fabric's actor model
 
Soluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie MicrosoftSoluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie Microsoft
 
Project Gesture & Real Sense: il potere nelle mani!!
Project Gesture & Real Sense: il potere nelle mani!!Project Gesture & Real Sense: il potere nelle mani!!
Project Gesture & Real Sense: il potere nelle mani!!
 

Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!

  • 1. Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!! Massimo Bonanni massimo.bonanni@domusdotnet.org http://codetailor.blogspot.com @massimobonanni
  • 2. Agenda • Natural User Interface • Introduzione al Kinect – Cosa c’è dentro – Architettura • Kinect SDK – Camera Data – Depth data – Skeletal tracking – Audio • Q&A 2
  • 3. Natural User Interface Si definisce NUI l’interfaccia di un sistema in cui gli utenti riescono ad interagire utilizando un approccio «naturale» cioè riescono ad utilizzare le funzionalità del sistema senza l’uso di dispositivi artificiali (come mouse, trackball o tastiera) Una NUI è rivolta ad utenti in grado di effettuare movimenti relativamente naturali, azioni e gesti che devono controllare l’applicazione del computer o manipolare contenuti sullo schermo. 3
  • 4. NUI : Evoluzione delle interfacce 4
  • 5. NUI: Vantaggi • Rapido apprendimento delle funzionalità; • L’utente è in grado di diventare «esperto» sull’interfaccia in minor tempo; • Può aiutare portatori di handicap nell’utilizzo del sistema. 5
  • 6. Kinect: Cosa c’è dentro Video Camera RGB Sensori di profondità Batteria di 4 microfoni • Video Camera RGB (CMOS) Inclinazione Motorizzata • Sensori di profondità: proiettore IR + Camera IR (CMOS) • Inclinazione motorizzata (±27 gradi) • 4 Microfoni 6
  • 9. Kinect: Come funziona La nostra Il proiettore ad applicazione infrarossi illumina il utilizza le info soggetto con dei dell’SDK pattern L’SDK è in grado di convertire lo stream della depth cam in dati utilizzabili La camera infrarossi misura la distanza con un approccio «a luce strutturata» 9
  • 10. Kinect: Cosa serve • Kinect; • Cavo usb per collegamento a pc; • Kinect SDK; • DirectX9; • .........tanta fantasia!!! 10
  • 11. Kinect: Requisiti minimi • Sistema Operativo – Windows 7 (x86 and x64) • Hardware – Processore dual-core 2.66GHz o superiore – 2Gb ram – Scheda grafica DiretcX9 o superiore – USB 2.0 dedicata – Kinect con cavo usb per collegamento al pc • Software – Visual Studio 2010 Express o superiori – .NET Framework 4.0 – Runtime DirectX 9 – Microsoft Speech Platform SDK v11 (solo per lo speech recognition) 11
  • 12. Kinect: Architettura L’SDK mette a disposizione una serie di strumenti e una libreria di classi in grado di interagire con i sensori del dispositivo fornendo allo sviluppatore oggetti ed eventi. 12
  • 13. Kinect: Architettura I componenti dell’SDK sono i seguenti: Applications Video Components Audio Components Windows Core Audio 5 A/V capture and transcoding 3 NUI API and Speech APIs Media Foundation | DirectShow 4 DMO codec for mic array 2 Device Device Video stream control Audio stream control User Mode setup access WinUSB device stack WinUSB camera stack USBAudio audio stack Kernel Mode Kernel-mode drivers for Kinect for Windows USB Hub Hardware 1 Motor Cameras Audio mic array Kinect sensor Kinect for Windows User-created Windows SDK components components 13
  • 14. Kinect: Architettura • Hardware L’hardware comprende i sensori visti in precedenza è l’hub USB che permette il loro collegamento al pc. • Microsoft Kinect drivers : a) Permettono l’accesso all’array di microfoni con le API Audio standard di Windows. b) Forniscono gli stream della video camera e dei sensori di profondità. c) Forniscono la possibilità di utilizzare più device contemporaneamente. 14
  • 15. Kinect: Architettura • NUI API Un insieme di API che permettono di recuperare i dati dai sensori di immagine e di controllare il device stesso (ad esempio brandeggiare il dispositivo). • KinectAudio DMO Estende le funzionalità dell’array di microfoni supportato in Windows 7 per fornire le funzionalità di Beamforming (mappatura sonora dell’area) e localizzazione della sorgente sonora. • Windows 7 standard APIs Le API audio, speech e media presenti in Windows 7 e Microsoft Speech. 15
  • 16. Kinect: Architettura Il device restituisce 3 stream: – Video – Depth – Audio 16
  • 17. Kinect: XBox o Windows • Attualmente esistono due versioni di Kinect: – Kinect for XBox – Kinect for Windows • E’ possibile utilizzare il Kinect for XBox per fare esperimenti con l’SDK per Windows • Si ottiene un errore se si utilizza il Kinect per XBox in produzione 17
  • 18. Kinect : SDK • L’SDK è scaricabile dall’indirizzo http://kinectforwindows.org • Vengono installati contestualmente l’SDK (con il Kinect Sample Browser), i drivers, il Runtime (quello da distribuire con le applicazioni ) e lo Speech Recognition Language Pack. 18
  • 19. Kinect: Default Mode vs Near Mode Il Kinect può gestire oggetti a differenti distanze in base alla modalità selezionata: – Default Mode: oggetti tra 80 cm e 4 metri; – Near Mode: oggetti tra 40 cm e 3 metri 19
  • 20. Kinect: La classe KinectSensor La classe KinectSensor permette l’accesso alle funzionalità del Kinect: 20
  • 21. Kinect: La classe KinectSensor Recuperiamo l’istanza del KinectSensor a partire dalla collezione KinectSensors: Recupero il primo dei sensori disponibili Abilito lo stream video Avvio la ricezione 640x480 30 fps dei frame video 21
  • 22. Kinect: Camera Data La classe KinectSensor mette a disposizione l’evento ColorFrameReady per la gestione dei frame video. 22
  • 24. Kinect: Camera Data Per utilizzare l’evento VideoFrameReady è necessario: 1. Recuperare il device dalla collezione KinectSensors della classe KinectSensor; 2. Abilitare lo stream video con la risoluzione/fps desiderato; 3. Sottoscriversi all’evento ColorFrameReady; 4. Avviare gli stream dell’istanza di KinectSensor. E’ anche possibile eseguire un polling direttamente sullo stream video. 24
  • 25. Kinect: Camera Data • Risoluzioni ammesse – 640x480 – 1280x960 • Numero di bytes per pixel 2 o 4 • FPS – 12 – 15 – 30 • Formato immagine: – RGB (pixel da 4 bytes: blu, verde, rosso e alfa) – YUV (pixel da 4 bytes: ciano, magenta, giallo e nero) – YUV-RAW (pixel da 2 bytes: ciano, magenta, giallo e nero, solo 640x480 15 fps) 25
  • 26. 26
  • 27. Kinect: Depth Data La classe KinectSensor mette a disposizione l’evento DepthFrameReady per la gestione dei frame di profondità: 27
  • 29. Kinect: Depth Data Per utilizzare l’evento DepthFrameReady è necessario: 1. Recuperare il device dalla collezione KinectSensors della classe KinectSensor; 2. Abilitare lo stream depth con la risoluzione/fps desiderato; 3. Sottoscriversi all’evento DepthFrameReady; 4. Avviare gli stream dell’istanza di KinectSensor. E’ anche possibile eseguire polling direttamente sullo stream di profondità 29
  • 30. Kinect: Depth Data • Risoluzioni ammesse – 640x480 (30 fps) – 320x240 (30 fps) – 80x60 (30 fps) • Numero di bytes per pixel 2 • Contenuto immagine: – Distanza (in millimetri, tra 400mm e 4000mm in base alla modalità) – Player index (player index 1, 2 o 0 se non c’è un player) 30
  • 31. Kinect: Depth Data Per ogni punto (x,y), il valore di tipo Short (2 bytes) ottenuto dal Kinect ha la seguente struttura: ed i valori di profondità e player index sono dati dalle formule 31
  • 33. Kinect: Depth Data Possiamo sapere se un punto si trova troppo vicino, troppo lontano o nella zona sconosciuta utilizzando tre proprietà dello stream di profondità: KinectSensor.DepthStream.TooNearDepth KinectSensor.DepthStream.UnknownDepth KinectSensor.DepthStream.TooFarDepth 33
  • 34. 34
  • 35. Kinect: Skeletal tracking • L’SDK permette di avere informazioni riguardo la posizione di alcuni punti del corpo dei player rilevati. • L’algoritmo di skeletal tracking è basato sul «Machine Learning» • La classe KinectSensor mette a disposizione l’evento SkeletonFrameReady per la gestione dei frame di di skeletal tracking: E’ anche possibile eseguire polling sullo Skeleton Stream esposto dalla KinectSensor. 35
  • 37. Kinect: Skeletal Tracking Per utilizzare l’evento KeletonFrameReady è necessario: 1. Recuperare il device dalla collezione KinectSensors della classe KinectSensor; 2. Abilitare lo stream Skeletal Tracking; 3. Sottoscriversi all’evento SkeletonFrameReady; 4. Avviare gli stream dell’istanza di KinectSensor. 37
  • 38. Kinect: La classe Skeleton La classe Skeleton contiene le informazioni sugli «scheletri» dei player rilevati: – Al massimo due player contemporanei (più altri 4 con informazioni ridotte); – Ogni «scheletro» può essere Tracked o NotTracked; – Ogni scheletro prevede un array di 20 Joint ognuno con la propria posizione (x,y,z); – Ogni Joint può essere Tracked, NotTracked o Inferred (NotTracked è raro). 38
  • 39. Kinect: Joints • Ogni scheletro ha 20 oggetti Joint che tracciano la posizione del corpo del player; • La posizione del joint nello spazio è contenuta nella proprietà Position (di tipo SkeletonPoint): – X: posizione x (compreso tra -1 e 1); – Y: posizione y (compreso tra -1 e 1); – Z: distanza dal device (in metri). 39
  • 40. Kinect: Skeletal Tracking • Il rilevamento dei sensori è affetto da errore (problemi costruttivi, luminosità eccessiva dell’ambiente, rumore visivo e via discorrendo) e i dati restituiti hanno delle fluttuazioni che non sempre sono gradite nelle applicazioni. • Lo Skeleton Stream esposto dalla KinectSensor fornisce la possibilità di impostare dei filtri per eliminare il rumore: 40
  • 41. Kinect: TransformSmoothParameters • Smoothing : specifica lo smoothing da applicare. I valori sono compresi tra 0 e 1. Più il valore si avvicia a 1 e più viene applicato il fattore di smoothing; • Correction : specifica la correzione da apportare ai dati. I valori sono compresi tra 0 e 1. Più piccolo il valore inserito e meno è la correzione sui dati grezzi; • Prediction : specifica il numero di frame previsti; • Jitter Radius : specifica il raggio di riduzione del jitter (in metri). Ogni jitter esterno al raggio è riportato nel raggio impostato; • MaximumDeviation Radius : specifica il raggio massimo (in metri) che i punti filtrati possono deviare rispetto ai dati grezzi Non esistono dei valori «buoni» da utilizzare, è necessario eseguire delle prove per capire quali sono i più adatti per la specifica applicazione 41
  • 42. Kinect: «Default Mode» vs «Near Mode» Il comportamento dello Skeletal Tracking varia in base al fatto che ci si trovi in «Default Mode» o «Near Mode» Si tratta della proprietà Skeleton.Position valorizzata quando lo scheletro è completamente tracciato 42
  • 43. 43
  • 44. Kinect: AllFrameEvent La classe KinectSensor mette a disposizione un evento per ottenere contemporaneamente tutti e tre i frame visti in precedenza: L’FPS, in questo caso, è pari al più basso tra i differenti stream. 44
  • 45. Kinect: Audio Il device dispone di una batteria di 4 microfoni con delle funzionalità di “audio processing” hardware: • Multichannel echo cancellation (MEC) • Sound position tracking • Directional Microfone • Noise suppression e Noise reduction 45
  • 46. Kinect: KinectAudioSource La classe KinectSensor espone la proprietà AudioSource di tipo KinectAudioSource attraverso la quale è possibile gestire tutte le funzionalità audio. 46
  • 47. Kinect : Sound Position Il Kinect, permette di : •Conoscere l’angolo e la «confidence» della sorgente sonora (Sound Source Angle); •Impostare la direzionalità dei microfoni del sensore in modo da rilevare l’audio solo da una certa direzione (Beam Angle) In entrambi i casi l’intervallo di copertura è: -50 0 +50 47
  • 48. Kinect : Sound Source Angle Per gestire la variazione di angolo della sorgente sonora, è sufficiente gestire l’evento SoundSourceAngleChanged della classe KinectAudioSource: 48
  • 49. Kinect : Audio Streaming • La classe KinectAudioSource, grazie al metodo Start(), consente di recuperare lo stream dell’audio proveniente dal sensore. • Lo stream può essere, ad esempio, registrato in tempo reale. 49
  • 50. Kinect: Speech Recognition L’SDK del Kinect si integra perfettamente con lo Speech Platform SDK per implementare voice recognition. Il sensore altro non fa che supportare uno SpeechRecognizer utilizzabile dallo SpeechRecognitionEngine dello Speech Platform. 50
  • 51. 51
  • 52. Conclusioni L’SDK è in continua evoluzione con continui rilasci. Ad ogni rilascio viene migliorata la stabilità dei driver, Skeletal Tracking e precisione dei dati recuperati dal sensore di profondità. Attualmente abbiamo un SDK maturo per cominciare a sviluppare nuove tipologie di applicazioni 52
  • 53. Q&A (non sparate sul Kinect ) 53
  • 54. Best Kinect hack Premio : un Kinect XBox (Microsoft) 54
  • 55. Riferimenti • Kinect SDK Web Site http://www.microsoft.com/en-us/kinectforwindows/ • Coding4Fun Kinect Toolkit http://c4fkinect.codeplex.com/ • Kinect Toolbox http://kinecttoolbox.codeplex.com/ • Channel 9 Kinect for Windows SDK Quickstarts http://channel9.msdn.com/Series/KinectQuickstart • Coding4Fun @ Channel 9 http://dev9.channel9.msdn.com/coding4fun/kinect 55