kinect v2: what's new!!!

40
@ @ Kinect V2 : What’s new!!! Massimo Bonanni http:// codetailor.blogspot.co m massimo.bonanni@tiscal i.it @massimobonanni

Upload: massimo-bonanni

Post on 14-Jan-2015

394 views

Category:

Technology


5 download

DESCRIPTION

Sessione "Kinect V2: what's new!!" tenuta durante il lab Kinect presso l'università di Ancona il 29/05/2014

TRANSCRIPT

Page 1: Kinect V2: what's new!!!

@@Kinect V2 : What’s new!!!

Massimo Bonannihttp://[email protected]@massimobonanni

Page 2: Kinect V2: what's new!!!

@ Prerequisiti HW/SW Kinect V1 vs Kinect V2 Architettura

Source Reader Frame Reference Frame

Sources Infrared Color Depth BodyIndex Body MultiFrame

Window Store App Porting da Kinect V1

Agenda

Page 3: Kinect V2: what's new!!!

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

Prerequisiti

Page 4: Kinect V2: what's new!!!

@Kinect for Windows v2 sensor

Kinect for Windows v2

USB hub

Kinect for Windows v2 power supply

Hardware

Page 5: Kinect V2: what's new!!!

@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

Hardware

Page 6: Kinect V2: what's new!!!

@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 TBD

Kinect V1 vs Kinect V2

Page 7: Kinect V2: what's new!!!

@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

Page 8: Kinect V2: what's new!!!

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

Architettura

Sensor Source Reader Frame Ref Frame

Page 9: Kinect V2: what's new!!!

@Architettura: V1 vs V2

Stream

Reader

Reader

Reader

Source

Una sola applicazione alla volta

Più applicazioni contemporanee

Page 10: Kinect V2: what's new!!!

@Utilizzo del sensore1. Recuperare un’istanza di KinectSensor2. Aprire il sensore3. Usare il sensore4. Chiudere 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

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: what's new!!!

@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

Source

Page 12: Kinect V2: what's new!!!

@Permette di accedere ai framePollingEventi

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

Reader

Page 13: Kinect V2: what's new!!!

@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

Frame Reference

Page 14: Kinect V2: what's new!!!

@Permette l’accesso ai dati effettivi del frameEseguire una copia locale dei datiAccedere 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

Frame

Page 15: Kinect V2: what's new!!!

@InfraredSource

DEMO

Page 16: Kinect V2: what's new!!!

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

Funzionalità “di serie”

Page 17: Kinect V2: what's new!!!

@512 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

Infrared source

Page 18: Kinect V2: what's new!!!

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

Color source

Page 19: Kinect V2: what's new!!!

@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

Depth source

Page 20: Kinect V2: what's new!!!

@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: what's new!!!

@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

Body source

Page 22: Kinect V2: what's new!!!

@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

Body - Joint

Page 23: Kinect V2: what's new!!!

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

Body – Hand Tracking

Page 24: Kinect V2: what's new!!!

@Activity:EyeLeftClosed, EyeRightClosed, MouthOpen, MouthMoved, LookingAway

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.

Body – Activity, Appearance, Expression

Page 25: Kinect V2: what's new!!!

@BodyIndexSource

DEMO

Page 26: Kinect V2: what's new!!!

@Audio Beam• “Cono” di ascolto orientabile• Può essere orientato

automaticamente o manualmente• Le API possono supportare più “coni“

contemporaneamente

Audio

Page 27: Kinect V2: what's new!!!

@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

Page 28: Kinect V2: what's new!!!

@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

Page 29: Kinect V2: what's new!!!

@Il metodo AcquireBeamFrames restituisce l’elenco degli AudioBeamFrames.

Audio

Page 30: Kinect V2: what's new!!!

@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

Multi Frame

MultiReader = Sensor.OpenMultiSourceFrameReader(FrameSourceTypes.Color Or FrameSourceTypes.BodyIndex Or FrameSourceTypes.Body)

Page 31: Kinect V2: what's new!!!

@MultiSourceFrame contiene il riferimento ad ogni frame delle sorgenti

Il frame rate è il minore tra i frame rate delle sorgenti selezionate

Multi Frame

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 32: Kinect V2: what's new!!!

@MultiFrameSource

DEMO

Page 33: Kinect V2: what's new!!!

@• Referenziare WindowsPreview.Kinect (invece di Microsoft.Kinect);

• Recuperare l’istanza di default tramite il metodo GetDefault() invece che la proprietà Default

Windows Store Apps

Sensor = KinectSensor.GetDefault() Sensor.Open()

Page 34: Kinect V2: what's new!!!

@Windows Store App

DEMO

Page 35: Kinect V2: what's new!!!

@Applicazioni che utilizzano un solo sensore: Non serve più il componente Sensor

Chooser KinectSensor.Default restituisce sempre

una istanza valida (mai Nothing); Utilizzare KinectSensor.IsAvailable per

controllare l’effettiva presenza del device e gli eventi di cambio stato per gestire la riconnessione.

Porting da Kinect V1

Page 36: Kinect V2: what's new!!!

@ Eliminare i flag utilizzati per impostare le funzionalità del device (ad esempio risoluzione, near/far mode, standing/seated mode);

Stream model Source/Reader model

Evento AllFrameReady evento MultiSourceFrameArrived

Porting da Kinect V1

Page 37: Kinect V2: what's new!!!

@ L’indice del player è in una sorgente separata rispetto alla sorgente Depth;

6 player completamente tracciati (invece dei due della versione 1);

Numero maggiore di joint; Correzione anatomica dei joint

(specialmente per il baricentro); Alcuni joint rinominati

Porting da Kinect V1

Page 38: Kinect V2: what's new!!!

@ I nuovi joint possono essere ignorati dalle vecchie applicazioni (i valori della nuova enumerazione si aggiungono alla vecchia);

La maggior parte dei joint hanno lo stesso nome dei precedent ad eccezione di :

Porting da Kinect V1

Page 39: Kinect V2: what's new!!!

@

Page 40: Kinect V2: what's new!!!

@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

Risorse