Kinect v2: NUI for dummies - Bonanni

29
ROME 11-12 april 2014 ROME 11-12 april 2014 Kinect V2: NUI for dummies!! [email protected] @massimobonanni http://codetailor.blogspot.com Massimo Bonanni

description

Le slide di Massimo Bonanni presentate a Codemotion Roma 2014

Transcript of Kinect v2: NUI for dummies - Bonanni

Page 1: Kinect v2: NUI for dummies - Bonanni

ROME 11-12 april 2014ROME 11-12 april 2014

Kinect V2: NUI for dummies!!

[email protected]@massimobonannihttp://codetailor.blogspot.com

Massimo Bonanni

Page 2: Kinect v2: NUI for dummies - Bonanni

ROME 11-12 april 2014 - Speaker’s name

Agenda

• Prerequisiti• Hardware• Architettura• Kinect Source

Page 3: Kinect v2: NUI for dummies - Bonanni

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)

Page 4: Kinect v2: NUI for dummies - Bonanni

ROME 11-12 april 2014

Kinect for Windows v2 sensor

Hardware

Kinect for Windows v2

USB hub

Kinect for Windows v2 power supply

Page 5: Kinect v2: NUI for dummies - Bonanni

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

Page 6: Kinect v2: NUI for dummies - Bonanni

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

Page 7: Kinect v2: NUI for dummies - Bonanni

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

Page 8: Kinect v2: NUI for dummies - Bonanni

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

Page 9: Kinect v2: NUI for dummies - Bonanni

ROME 11-12 april 2014

Architettura: V1 vs V2

Stream

Reade

r

Reader

Reader

Source

Una sola applicazione alla

volta

Più applicazioni

contemporanee

Page 10: Kinect v2: NUI for dummies - Bonanni

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

Page 11: Kinect v2: NUI for dummies - Bonanni

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

Page 12: Kinect v2: NUI for dummies - Bonanni

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()

Page 13: Kinect v2: NUI for dummies - Bonanni

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

Page 14: Kinect v2: NUI for dummies - Bonanni

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

Page 15: Kinect v2: NUI for dummies - Bonanni

ROME 11-12 april 2014

DemoInfraredSource

Page 16: Kinect v2: NUI for dummies - Bonanni

ROME 11-12 april 2014

Funzionalità “di serie”

Color sourceDepth sourceInfrared sourceBody Index sourceBody source (scheletro, hand tracking, espressioni…)Audio source

Page 17: Kinect v2: NUI for dummies - Bonanni

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

Page 18: Kinect v2: NUI for dummies - Bonanni

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).

Page 19: Kinect v2: NUI for dummies - Bonanni

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

Page 20: Kinect v2: NUI for dummies - Bonanni

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

Page 21: Kinect v2: NUI for dummies - Bonanni

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

Page 22: Kinect v2: NUI for dummies - Bonanni

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

Page 23: Kinect v2: NUI for dummies - Bonanni

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

Page 24: Kinect v2: NUI for dummies - Bonanni

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.

Page 25: Kinect v2: NUI for dummies - Bonanni

ROME 11-12 april 2014

DemoBodyIndexSource

Page 26: Kinect v2: NUI for dummies - Bonanni

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)

Page 27: Kinect v2: NUI for dummies - Bonanni

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

Page 28: Kinect v2: NUI for dummies - Bonanni

ROME 11-12 april 2014

DemoMultiFrameSource

Page 29: Kinect v2: NUI for dummies - Bonanni

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