Upload
massimo-bonanni
View
263
Download
3
Tags:
Embed Size (px)
DESCRIPTION
Slide della sessione tenuta al Kinect Lab dei Community Days 2014 di Roma il 23/09/2014. La nuova versione del sensore Kinect ed il suo SDK portano grandi novità sia dal punto di vista hardware che delle funzionalità. Una giornata per capire cosa è cambiato, quali sono gli adattamenti da fare nelle applicazioni pensate per il Kinect V1 e cosa mette a disposizione per la realizzazione di interfacce NUI di nuova generazione. Una sessione introduttiva e device a disposizione per testare e sperimentare il nuovo SDK.
Citation preview
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
KIN01 - LAB KINECT
Massimo Bonanni
@massimobonanni
http://codetailor.blogspot.com/
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Grazie a
Sponsor
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Agenda• Prerequisiti HW/SW
• Kinect V1 vs Kinect V2
• Architettura
• Sources
• WPF / Window Store App
#CDays14 – Roma - 23, 24 e 25 Settembre 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 – Roma - 23, 24 e 25 Settembre 2014
SensorUSB hub
Power supply
Hardware
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Hardware• 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 – Roma - 23, 24 e 25 Settembre 2014
Feature Kinect for Windows 1 Kinect for Windows 2
Color Camera 640 x 480 @ 30 fps 1920 x 1080 @ 30 fps
Depth Camera 320 x 240 512 x 424
Max Depth Distance ~4.5 M ~4.5 M
Min Depth Distance 40 cm in near mode 50 cm
Horizontal Field of View 57 degrees 70 degrees
Vertical Field of View 43 degrees 60 degrees
Tilt Motor yes no
Skeleton Joints Defined 20 joints 25 joints
Full Skeletons Tracked 2 6
USB Standard 2.0 3.0
Supported OS Win 7, Win 8 Win 8-8.1 (WSA)
Price $299 $199
Kinect V1 vs Kinect V2
#CDays14 – Roma - 23, 24 e 25 Settembre 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
ApplicazioniCOM/C++
ApplicazioniDesktop
Windows Store Apps
Architettura
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Architettura
• 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)
Senso
r
Source
Reade
r
Frame Ref
Frame
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Architettura: V1 vs V2
Stream
Reader
Reader
Reader
Source
Una sola applicazione alla
volta
Più applicazioni contemporanee
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Sensor
• Utilizzo del sensore1. Recuperare un’istanza di KinectSensor2. Aprire il sensore3. Usare il sensore4. 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
#CDays14 – Roma - 23, 24 e 25 Settembre 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
#CDays14 – Roma - 23, 24 e 25 Settembre 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
Dim infraredReader As InfraredFrameReader = Sensor.InfraredFrameSource.OpenReader()AddHandler infraredReader.FrameArrived, AddressOf InfraredFrameArrivedHandler'''infraredReader.Dispose()
#CDays14 – Roma - 23, 24 e 25 Settembre 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 frame As ColorFrame = e.FrameReference.AcquireFrame() If frame IsNot Nothing Then ' ' ' End IfEnd Using
#CDays14 – Roma - 23, 24 e 25 Settembre 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
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demoInfraredSource
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Funzionalità “di serie”• Color source
• Depth source
• Infrared source
• Body Index source
• Body source (scheletro, hand tracking, espressioni…)
• Audio source
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
• 512 x 424 pixel @ 30 fps
• Due sorgenti: Infrared: singolo frame infrarosso LongExposureInfrared: sovrapposizione di 3 frame (miglior rapporto
segnale/rumore ma immagini meno precise e con effetto sfocato)
• Stesso sensore fisico della sorgente di profondità
• Ogni pixel è formato da 2 byte (16-bit) e rappresenta l’intensità della riflessione infrarossa.
• L’SDK recupera solo la riflessione della luce infrarossa proiettata dal device
Infrared source
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Color source• 1920 x 1080 pixel @ 30 fps (15 fps in scarsa luminosità)
• Formati multipli (RGBA, BGRA, YUY2, …), i frame arrivano dal device in formato raw (in questo momento YUY2)
• I dati del frame possono: essere utilizzati nel formato raw convertiti in un altro formato (con un costo computativo
leggermente maggiore)
• Il buffer è un array di bytes. Il numero di byte per pixel dipende dal formato raw dell’imagine (in questo momento 4 byte per pixel).
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Depth source• 512 x 424 pixel @ 30 fps
• Ogni pixel del frame è composto da 2 byte (16-bit) e contiene la distanza, in mm, dal piano focale del device
• Non c’è riferimento all’indice del player presente nel punto corrispondente
• Distanze di lavoro: DepthMinReliableDistance = 0,5 m DepthMaxReliableDistance = 4,5 m
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Body Index source• 512 x 424 @ 30 fps
• Ogni pixel del frame è composto da 1 byte: -1: nessun player in corrispondenza del punto 0 - 5: indice del player (tracciato con la sorgente Body)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Body source
• Ogni frame restituisce un array di oggetti di tipo Body
• Ogni body espone: 25 joint
Hand tracking (mano aperta, chiusa, “lasso”)
Activities (occhi chiusi, bocca aperta, ..)
Appearance (ad esempio indossare occhiali)
Espressioni del viso (neutral, sorridente)
Orientamento delle ossa del corpo
….
• Le API del body source sono ottimizzate per il consumo di memoria ed il riciclo degli oggetti
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Body - Joint
• La classe Body : Joints: tracciamento e posizione nello spazio del punto
corrispondente; Orientation: orientamento nello spazio dell’articolazione.
• Un joint può essere: Not Tracked
Tracked
Inferred
• Migliorata affidabilità e accuratezza
• Tracciati completamente fino a 6 player
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Body – Hand Tracking
• La classe Body espone lo stato delle mani attraverso le proprietà HandLeftState e HandRightState:
Unknown
Not Tracked
Open
Closed
Lasso
• “Confidence” dello stato:
High
Low
• Il tracking delle mani è attualmente limitato a 2 player ma è possibile decidere quali player tracciare. Il numero di player tracciati verrà aumentato in futuro.
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Body – Altre informazioni
• Engaged
• Lean
• TrackingId : id univoco a 64bit assegnato ad ogni nuovo body rilevato;
• ClippedEdge: fornisce informazioni riguardo all’eventuale lato dell’imagine che taglia il body del player
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demoBodyIndexSource
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Audio
• Audio Beam “Cono” di ascolto orientabile Può essere orientato automaticamente o manualmente Le API possono supportare più “coni“ contemporaneamente
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
• Audio Beam Frame
Ogni frame contiene i campioni audio relativi al cono d’ascolto acquisiti in un intervallo di tempo
I frame dei differenti “coni” sono sincronizzati tra loro
Audio
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
• Il meccanismo di gestione dell’audio prevede un reader e un evento sollevato nel momento in cui dei frame sono disponibili
Audio
AudioReader = Sensor.AudioSource.OpenReader() AddHandler AudioReader.FrameArrived, AddressOf AudioFrameArrivedHandler
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Audio
• Il metodo AcquireBeamFrames restituisce l’elenco degli AudioBeamFrames.
#CDays14 – Roma - 23, 24 e 25 Settembre 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
MultiReader = Sensor.OpenMultiSourceFrameReader(FrameSourceTypes.Color Or FrameSourceTypes.BodyIndex Or FrameSourceTypes.Body)
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Multi Frame• MultiSourceFrame contiene il riferimento ad ogni frame delle sorgenti
• Il frame rate è il minore tra i frame rate delle sorgenti selezionate
frame = frameReference.AcquireFrame()If frame IsNot Nothing Then
Using colorFrame = frame.ColorFrameReference.AcquireFrame(), bodyFrame = frame.BodyFrameReference.AcquireFrame(), bodyIndexFrame = frame.BodyIndexFrameReference.AcquireFrame()
' ' ' End UsingEnd If
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demoMultiFrameSource
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
WPF
• Referenziare Microsoft.Kinect e Microsoft.Kinect.Wpf.Controls
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
WPF
• Il controllo KinectRegion delimita una «porzione» di XAML all’interno della quale l’utente può utilizzare il Kinect;
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
WPF
• Gesture disponibili “out-of-the-box” in una KinectRegion: Click Grab Pan Zoom
• La region va collegata al KinectSensor;
Wpf.Controls.KinectRegion.SetKinectRegion(Me, kinectRegion) Me.kinectRegion.KinectSensor = KinectSensor.GetDefault()
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
WPF
• KinectUserViewer permette di dare un dare un feedback visivo all’utente del fatto che si tracciato o meno;
KinectRegion
KinectUserViewer
HandPointer
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
WPF
• KinectRegion espone anche delle attached property per gestire I controlli in essa contenuti
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto " controls:KinectRegion.IsHorizontalRailEnabled="true" controls:KinectRegion.IsVerticalRailEnabled="true" controls:KinectRegion.ZoomMode="Enabled"> <Image Source="{Binding Photo}" AutomationProperties.Name="{Binding Title}" Margin="10"/> </ScrollViewer>
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demoWPF
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Windows Store App
• Referenziare WindowsPreview.Kinect (invece di Microsoft.Kinect), Microsoft.Kinect.Xaml.Controls e Microsoft.Kinect.Toolkit.Input;
• E’ necessario l’assembly la Microsoft Visual C++ 2013 Runtime Package for Windows
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Windows Store App
• 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
• Non serve collegare la region al KinectSensor;
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
WPF
• KinectUserViewer permette di dare un dare un feedback visivo all’utente del fatto che si tracciato o meno;
KinectUserViewer
HandPointer
KinectRegion
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demoWindows Store App
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Risorse• Kinect for Windows Dev Center
http://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 – Roma - 23, 24 e 25 Settembre 2014
Q&ATutto il materiale di questa sessione su
http://www.communitydays.it/
Lascia il feedback su questa sessione dal sito,
potrai essere estratto per i nostri premi!
Seguici su
Twitter @CommunityDaysIT
Facebook http://facebook.com/cdaysit
#CDays14