Applicazioni Windows Store con Kinect 2
-
Upload
massimo-bonanni -
Category
Technology
-
view
67 -
download
2
Transcript of Applicazioni Windows Store con Kinect 2
WIN07 - Applicazioni Windows Store con Kinect Massimo Bonanni
@massimobonanni
http://codetailor.blogspot.com/
#CDays15 – Milano 24, 25 e 26 Marzo 2015
Grazie a
PlatinumSponsor
#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
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
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
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 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
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
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