Upload
massimo-bonanni
View
1.177
Download
5
Tags:
Embed Size (px)
DESCRIPTION
Sessione tenuta a Codemotion Roma 2014 l'11 Aprile 2014. La seconda versione del Kinect, nonostante sia ancora nella fase di beta, porta con se grandi novità sia dal punto di vista hardware che delle funzionalità. Una sessione per capire come è cambiato e cosa mette a disposizione per la realizzazione di interfacce NUI di nuova generazione.
Citation preview
ROME 11-12 april 2014ROME 11-12 april 2014
Kinect V2: NUI for dummies!!
[email protected]@massimobonannihttp://codetailor.blogspot.com
Massimo Bonanni
ROME 11-12 april 2014 - Speaker’s name
Agenda
• Prerequisiti• Hardware• Architettura• Kinect Source
ROME 11-12 april 2014
Prerequisiti
Sistemi Operativi SupportatiWindows 8, Windows 8.1
Configurazione HardwareProcessore 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 4000Sensore Kinect v2 (con alimentatore e USB hub)
Software RequirementsVisual Studio 2012 (2013)
ROME 11-12 april 2014
Kinect for Windows v2 sensor
Hardware
Kinect for Windows v2
USB hub
Kinect for Windows v2 power supply
ROME 11-12 april 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
ROME 11-12 april 2014
Kinect V1 vs Kinect V2Feature 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 TBD
ROME 11-12 april 2014
Architettura
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
ROME 11-12 april 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)
Sensor Source Reader Frame Ref Frame
ROME 11-12 april 2014
Architettura: V1 vs V2
Stream
Reade
r
Reader
Reader
Source
Una sola applicazione alla
volta
Più applicazioni
contemporanee
ROME 11-12 april 2014
SensorUtilizzo del sensore
Recuperare un’istanza di KinectSensorAprire il sensoreUsare il sensoreChiudere il sensore
In caso di sconnessione del deviceL’istanza di KinectSensor rimane validaNon vengono inviati più frameLa proprietà IsAvailable ci dice se il sensore è attaccato o meno.
Possono essere gestiti più sensori
Sensor = KinectSensor.DefaultSensor.Open() ' ' 'Sensor.Close()
Dim kinectList = KinectSensor.KinectSensors _ .Where(Function(k) k.IsAvailable = True)
Sensor Source Reader Frame Ref Frame
ROME 11-12 april 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
ROME 11-12 april 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()
ROME 11-12 april 2014
Frame reference• Permette di accedere al frame corrente attraverso il
metodo AcquireFrame()
• Nell’intervallo di tempo in cui l’app 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
ROME 11-12 april 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
ROME 11-12 april 2014
DemoInfraredSource
ROME 11-12 april 2014
Funzionalità “di serie”
Color sourceDepth sourceInfrared sourceBody Index sourceBody source (scheletro, hand tracking, espressioni…)Audio source
ROME 11-12 april 2014
Infrared source512 x 424 pixel @ 30 fps
Due sorgenti:Infrared: singolo frame infrarossoLongExposureInfrared: 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 riflessioneinfrarossa.
L’SDK recupera solo la riflessione della luceinfrarossa proiettata dal device
ROME 11-12 april 2014
Color source1920 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 rawconvertiti 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).
ROME 11-12 april 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 mDepthMaxReliableDistance = 4,5 m
ROME 11-12 april 2014
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)
Body Index source
ROME 11-12 april 2014
Body sourceOgni frame restituisce un array di oggetti di tipo Body
Ogni body espone:25 jointHand 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
ROME 11-12 april 2014
NU
I
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 TrackedTrackedInferred
Migliorata affidabilità e accuratezza
Tracciati completamente fino a 6 player
ROME 11-12 april 2014
La classe Body espone lo stato delle mani attraverso le proprietà HandLeftState e HandRightState:
UnknownNot TrackedOpenClosedLasso
“Confidence” dello stato:HighLow
Il tracking delle mani è attualmente limitato a 2 player ma è possibile decidere quali player tracciare. Il numero di player tracciati verrà aumentato in futuro.
Body – Hand Tracking
ROME 11-12 april 2014
Body – Activity, Appearance, ExpressionActivity:
EyeLeftClosedEyeRightClosedMouthOpenMouthMovedLookingAway
AppearanceWearingGlasses
Expression:HappyNeutral
Tre dictionary La chiave è l’ activity, l’appearance o l’expression da verificare (ad esempio EyeLeftClosed o WearingGlasses);Il valore indica la probabilità che l’activity, l’appearance o l’expression sia in atto (Unknown, MayBe, Yes, No)
In futuro verranno aggiunte altre activity, appearance e expression.
ROME 11-12 april 2014
DemoBodyIndexSource
ROME 11-12 april 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)
ROME 11-12 april 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
ROME 11-12 april 2014
DemoMultiFrameSource
ROME 11-12 april 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