Applicazioni Windows Store con Kinect 2

30
WIN07 - Applicazioni Windows Store con Kinect Massimo Bonanni [email protected] @massimobonanni http://codetailor.blogspot.com/

Transcript of Applicazioni Windows Store con Kinect 2

WIN07 - Applicazioni Windows Store con Kinect Massimo Bonanni

[email protected]

@massimobonanni

http://codetailor.blogspot.com/

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Agenda

• Kinect Recap• Architettura

• Sources & Reader

• Kinect sensor in Windows Store

• Face Detection

• Gesture Recognition

• XAML - Window Store App

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Prerequisiti• Sistemi Operativi Supportati

• Windows 8, Windows 8.1

• Configurazione Hardware

• Processore 64 bit (x64) i7 2.5Ghz (o superiore)

• Memoria 4 GB (o più)

• Built-in USB 3.0 host controller (chipset Intel o Renesas);

• Scheda grafica DirectX11: ATI Radeon (HD 5400 series, HD 6570, HD 7800), NVidia Quadro (600, K1000M), NVidia GeForce (GT 640, GTX 660), Intel HD 4000

• Sensore Kinect v2 (con alimentatore e USB hub)

• Software Requirements

• Visual Studio 2012 (2013)

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Funzionalità

• Color camera con risoluzione 1920x1080 pixel, 30 fps

• Infrared camera con risoluzione 512x424 pixel, 30 fps

• Range di profondità da 0.5 a 4.5 m

• Utilizzo di camera ad infrarossi e a colori contemporaneamente

• No motore per “brandeggiamento” verticale

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Kinect Sensor

Kinect Drivers

Kinect Runtime

Native API .NET API WinRT API

Native Apps .NET Apps WSA

Maggior parte delleelaborazioni anchesfruttando la GPU

ApplicazioniCOM/C++

ApplicazioniDesktop

Windows Store Apps

Architettura – Building Block

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Architettura – Sorgenti & Reader

• L’architettura prevede delle sorgenti (source) e dei reader

• Ogni stream fornito dal device è una sorgente dalla quale possiamoricavare uno o più reader

• Ogni reader fornisce degli eventi per recuperare dei reference aisingoli frame provenienti dal device

• Dal singolo frame si possono recuperare i dati relativi al tipo di sorgente (ad esempio lo scheletro del giocatore)

Sensor Source Reader Frame Ref Frame

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Sensor

• Utilizzo del sensore1. Recuperare un’istanza di KinectSensor

2. Aprire il sensore

3. Usare il sensore

4. Chiudere il sensore

• In caso di sconnessione del device• L’istanza di KinectSensor rimane valida

• Non vengono inviati più frame

• La proprietà IsAvailable ci dice se il sensore è attaccato o meno.

Sensor = KinectSensor.GetDefault()Sensor.Open()

'''

Sensor.Close()

Sensor Source ReaderFrame

RefFrame

Sensor = KinectSensor.GetDefault(); Sensor.Open(); // // // Sensor.Close();

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Source

• Espone i metadati della sorgente e permette di accedere al reader

• Il sensore espone una sorgente per ogni tipo di funzionalità

Sensor Source ReaderFrame

RefFrame

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Reader

• Permette di accedere ai frame• Polling• Eventi

• Si possono avere più reader per una singola sorgente

• Un reader può essere messo in pausa

Sensor Source ReaderFrame

RefFrame

InfraredFrameReader infraredReader = Sensor.InfraredFrameSource.OpenReader(); infraredReader.FrameArrived += InfraredFrameArrivedHandler; // // infraredReader.Dispose();

Dim infraredReader As InfraredFrameReader = Sensor.InfraredFrameSource.OpenReader()AddHandler infraredReader.FrameArrived, AddressOf InfraredFrameArrivedHandler''infraredReader.Dispose()

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Frame Reference

• Permette di accedere al frame corrente attraverso il metodoAcquireFrame()

• Nell’intervallo di tempo in cui l’applicazione richiama AcquireFrame() il frame stesso potrebbe essere scaduto

• RelativeTime permette di mettere in correlazione frame differenti

Sensor Source ReaderFrame

RefFrame

using (ColorFrame frame = e.FrameReference.AcquireFrame()) {if (frame != null) {

//////

}}

Using frame As ColorFrame = e.FrameReference.AcquireFrame()If frame IsNot Nothing Then

'''

End IfEnd Using

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Frame

• Permette l’accesso ai dati effettivi del frame• Eseguire una copia locale dei dati

• Accedere al buffer raw direttamente

• Contiene i metadati del frame (ad esempio, per il colore formato, altezza, larghezza)

• Va gestito rapidamente e rilasciato (se un frame non viene rilasciato sipotrebbe non ricevere più alcun frame)

Sensor Source ReaderFrame

RefFrame

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Multi Frame

• MultiSourceFrameReader è, di fatto, un reader che può agire su più sorgenti contemporaneamente sincronizzando i frame;

• Viene generato un evento quando i frame delle sorgenti collegati sono disponibili

Sensor Source ReaderFrame

RefFrame

MultiSourceFrameReader MultiReader = Sensor.OpenMultiSourceFrameReader(FrameSourceTypes.Color |FrameSourceTypes.BodyIndex | FrameSourceTypes.Body);

MultiReader = Sensor.OpenMultiSourceFrameReader(FrameSourceTypes.Color OrFrameSourceTypes.BodyIndex OrFrameSourceTypes.Body)

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Multi Frame

• MultiSourceFrame contiene il riferimento ad ogni frame delle sorgenti

• Il frame rate è il minore tra i frame rate delle sorgenti selezionate

Sensor Source ReaderFrame

RefFrame

frame = frameReference.AcquireFrame()If frame IsNot Nothing Then

Using colorFrame = frame.ColorFrameReference.AcquireFrame(),bodyFrame = frame.BodyFrameReference.AcquireFrame(),bodyIndexFrame = frame.BodyIndexFrameReference.AcquireFrame()

'''

End UsingEnd If

var frame = args.FrameReference.AcquireFrame(); if (frame != null) {

using (colorFrame = frame.ColorFrameReference.AcquireFrame())using (bodyFrame = frame.BodyFrameReference.AcquireFrame())using (bodyIndexFrame = frame.BodyIndexFrameReference.AcquireFrame()){

//////

}}

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

demoMultiFrameSource

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Sorgenti “indirette”

Le sorgenti indirette non sono esposte dalla classe KinectSensor e fornisconofunzionalità accessorie:

• FaceFrameSource

• HighDefinitionFaceFrameSource

• VisualGestureBuilderFrameSource

Le sorgenti indirette accettano un’istanza di KinectSensor per poter ricevere i datidal sensore e un BodyTrackingId per poter agire sullo specifico player (vengonoutilizzate in cooperazione con BodyFrameSource).

E’ un modo per poter estendere le funzionalità dell’SDK.

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

demoFace Detection

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Kinect Studio

• Permette di registrare gli stream provenienti dalle sorgenti del Kinect;

• Permette di riprodurre (anche in loop) registrazioni eseguite in precedenza;

• Può essere utilizzato per testare le nostre app in mancanza del sensore fisico;

• Sono disponibili delle API per poter gestire registrazione e riproduzione (deve essere installato l’SDK).

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Gesture recognition

Due possibili modalità:• Euristica : dobbiamo implementare algoritmicamente il riconoscimento della

gesture;

• Machine Learning : insegnamo al Kinect la gesture che dobbiamo riconoscere.

Nel primo caso ci si arma di pazienza, nel secondo del Gesture Builder.

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

demoGesture Recognition - Euristica

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Gesture Builder

• Nuovo strumento rilasciato con l’SDK del Kinect V2

• Permette di costruire le gesture utilizzando il machine learning• Adaptive Boosting (AdaBoost): determina se il player sta eseguendo una gesture;• Random Forest Regression (RFR) Progress: determina l’avanzamento di una gesture eseguita da un

player;

• Permette di dare un senso alle gesture utilizzando dei tag

• Organizza le gesture in solution e progetti

• Esegue l’analisi e il test per il gesture detection

• Live preview dei risultati

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Gesture Builder

Your Application

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Gesture Recognition

Euristica

• E’ un problema di coding

• Facile se le gesture/posture

sono semplici

• Possibili complicazioni

nell’evoluzione (regression)

Machine Learning (ML) con G.B.

• E’ un problema di dati

• La gesture potrebbe non essere

semplice da riprodurre a livello

di algoritmo (lo swing di una

mazza da baseball)

• Deve essere speso tempo per il

machine learning

• Attenzione ai troppi dati perche’

possono generare falsi positivi

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

demoGesture Recognition – Gesture Builder

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

XAML Controls

• Referenziare Microsoft.Kinect.Xaml.Controls e Microsoft.Kinect.Toolkit.Input;

• E’ necessario l’assembly la Microsoft Visual C++ 2013 Runtime Package for Windows

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

XAML Controls - KinectRegion

• Il controllo KinectRegion delimita una “porzione” di XAML all’interno della quale l’utente può utilizzare il Kinect;

• Gesture disponibili “out-of-the-box” in una KinectRegion:• Click

• Grab

• Pan

• Zoom

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

XAML Controls - KinectUserViewer

KinectUserViewer permette di dare un dare un feedback visivoall’utente del fatto che si tracciato o meno.

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

demoWindows Store App

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Risorse

• Kinect for Windows Dev Centerhttp://www.microsoft.com/en-us/kinectforwindowsdev/default.aspx

• Kinect for Windows Web Sitehttp://www.microsoft.com/en-us/kinectforwindows/

• Kinect for Windows Bloghttp://blogs.msdn.com/b/kinectforwindows/

• Kinect V2 on Microsoft Curah! http://curah.microsoft.com/55200/kinect-v2-beta

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

Q&A

Tutto il materiale di questa sessione suhttp://www.communitydays.it/

Lascia subito il feedback su questa sessione,potrai essere estratto per i nostri premi!

Seguici suTwitter @CommunityDaysITFacebook http://facebook.com/cdaysit#CDays15