La versione 2 del Kinect, ed il suo SDK, consentono di implementare applicazioni Windows Store che possono essere pubblicate nello store ed essere disponibili da subito per l’utente consumer. In questa sessione vedremo le caratteristiche base del sensore, come questo possa essere utilizzato in una Windows Store App e quali tool ci mette a disposizione l’SDK per semplificare la realizzazione di nuove app e per abilitare le applicazioni già esistenti all’utilizzo del sensore stesso.
Sessione tenuta durante i CommunityDays 2015 a Milano il 26/03/2015.
3. #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
4. #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)
5. #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
6. #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 delle
elaborazioni anche
sfruttando la GPU
Applicazioni
COM/C++
Applicazioni
Desktop
Windows Store
Apps
Architettura – Building Block
7. #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 possiamo
ricavare uno o più reader
• Ogni reader fornisce degli eventi per recuperare dei reference ai
singoli 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
8. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Sensor
• Utilizzo del sensore
1. 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 Reader
Frame
Ref
Frame
Sensor = KinectSensor.GetDefault();
Sensor.Open();
//
//
//
Sensor.Close();
9. #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 Reader
Frame
Ref
Frame
10. #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 Reader
Frame
Ref
Frame
InfraredFrameReader infraredReader = Sensor.InfraredFrameSource.OpenReader();
infraredReader.FrameArrived += InfraredFrameArrivedHandler;
//
//
infraredReader.Dispose();
Dim infraredReader As InfraredFrameReader = Sensor.InfraredFrameSource.OpenReader()
AddHandler infraredReader.FrameArrived, AddressOf InfraredFrameArrivedHandler
'
'
infraredReader.Dispose()
11. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Frame Reference
• Permette di accedere al frame corrente attraverso il metodo
AcquireFrame()
• 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 Reader
Frame
Ref
Frame
using (ColorFrame frame = e.FrameReference.AcquireFrame()) {
if (frame != null) {
//
//
//
}
}
Using frame As ColorFrame = e.FrameReference.AcquireFrame()
If frame IsNot Nothing Then
'
'
'
End If
End Using
12. #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 si
potrebbe non ricevere più alcun frame)
Sensor Source Reader
Frame
Ref
Frame
13. #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 Reader
Frame
Ref
Frame
MultiSourceFrameReader MultiReader = Sensor.OpenMultiSourceFrameReader(FrameSourceTypes.Color |
FrameSourceTypes.BodyIndex | FrameSourceTypes.Body);
MultiReader = Sensor.OpenMultiSourceFrameReader(FrameSourceTypes.Color Or
FrameSourceTypes.BodyIndex Or
FrameSourceTypes.Body)
14. #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 Reader
Frame
Ref
Frame
frame = frameReference.AcquireFrame()
If frame IsNot Nothing Then
Using colorFrame = frame.ColorFrameReference.AcquireFrame(),
bodyFrame = frame.BodyFrameReference.AcquireFrame(),
bodyIndexFrame = frame.BodyIndexFrameReference.AcquireFrame()
'
'
'
End Using
End If
var frame = args.FrameReference.AcquireFrame();
if (frame != null) {
using (colorFrame = frame.ColorFrameReference.AcquireFrame())
using (bodyFrame = frame.BodyFrameReference.AcquireFrame())
using (bodyIndexFrame = frame.BodyIndexFrameReference.AcquireFrame())
{
//
//
//
}
}
16. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Sorgenti “indirette”
Le sorgenti indirette non sono esposte dalla classe KinectSensor e forniscono
funzionalità accessorie:
• FaceFrameSource
• HighDefinitionFaceFrameSource
• VisualGestureBuilderFrameSource
Le sorgenti indirette accettano un’istanza di KinectSensor per poter ricevere i dati
dal sensore e un BodyTrackingId per poter agire sullo specifico player (vengono
utilizzate in cooperazione con BodyFrameSource).
E’ un modo per poter estendere le funzionalità dell’SDK.
18. #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).
19. #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.
20. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
demo
Gesture Recognition - Euristica
21. #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
22. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Gesture Builder
Your Application
23. #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
24. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
demo
Gesture Recognition – Gesture Builder
25. #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
26. #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
27. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
XAML Controls - KinectUserViewer
KinectUserViewer permette di dare un dare un feedback visivo
all’utente del fatto che si tracciato o meno.
29. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Risorse
• Kinect for Windows Dev Center
http://www.microsoft.com/en-us/kinectforwindowsdev/default.aspx
• Kinect for Windows Web Site
http://www.microsoft.com/en-us/kinectforwindows/
• Kinect for Windows Blog
http://blogs.msdn.com/b/kinectforwindows/
• Kinect V2 on Microsoft Curah!
http://curah.microsoft.com/55200/kinect-v2-beta
30. #CDays14 – Milano 25, 26 e 27 Febbraio 2014
Q&A
Tutto il materiale di questa sessione su
http://www.communitydays.it/
Lascia subito il feedback su questa sessione,
potrai essere estratto per i nostri premi!
Seguici su
Twitter @CommunityDaysIT
Facebook http://facebook.com/cdaysit
#CDays15
Notas do Editor
Slide da mostrare prima di iniziare la sessione – non rimuovere!