46
#CDays14 – Roma - 23, 24 e 25 Settembre 2014 KIN01 - LAB KINECT Massimo Bonanni [email protected] @massimobonanni http://codetailor.blogspot.com/

KInect Lab @ Community Days 2014 - Roma

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

Page 1: KInect Lab @ Community Days 2014 - Roma

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

KIN01 - LAB KINECT

Massimo Bonanni

[email protected]

@massimobonanni

http://codetailor.blogspot.com/

Page 2: KInect Lab @ Community Days 2014 - Roma

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Grazie a

Sponsor

Page 3: KInect Lab @ Community Days 2014 - Roma

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Agenda• Prerequisiti HW/SW

• Kinect V1 vs Kinect V2

• Architettura

• Sources

• WPF / Window Store App

Page 4: KInect Lab @ Community Days 2014 - Roma

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

Page 5: KInect Lab @ Community Days 2014 - Roma

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

SensorUSB hub

Power supply

Hardware

Page 6: KInect Lab @ Community Days 2014 - Roma

#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

Page 7: KInect Lab @ Community Days 2014 - Roma

#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

Page 8: KInect Lab @ Community Days 2014 - Roma

#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

Page 9: KInect Lab @ Community Days 2014 - Roma

#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

Page 10: KInect Lab @ Community Days 2014 - Roma

#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

Page 11: KInect Lab @ Community Days 2014 - Roma

#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

Page 12: KInect Lab @ Community Days 2014 - Roma

#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

Page 13: KInect Lab @ Community Days 2014 - Roma

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

Page 14: KInect Lab @ Community Days 2014 - Roma

#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

Page 15: KInect Lab @ Community Days 2014 - Roma

#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

Page 16: KInect Lab @ Community Days 2014 - Roma

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

demoInfraredSource

Page 17: KInect Lab @ Community Days 2014 - Roma

#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

Page 18: KInect Lab @ Community Days 2014 - Roma

#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

Page 19: KInect Lab @ Community Days 2014 - Roma

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

Page 20: KInect Lab @ Community Days 2014 - Roma

#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

Page 21: KInect Lab @ Community Days 2014 - Roma

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

Page 22: KInect Lab @ Community Days 2014 - Roma

#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

Page 23: KInect Lab @ Community Days 2014 - Roma

#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

Page 24: KInect Lab @ Community Days 2014 - Roma

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

Page 25: KInect Lab @ Community Days 2014 - Roma

#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

Page 26: KInect Lab @ Community Days 2014 - Roma

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

demoBodyIndexSource

Page 27: KInect Lab @ Community Days 2014 - Roma

#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

Page 28: KInect Lab @ Community Days 2014 - Roma

#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

Page 29: KInect Lab @ Community Days 2014 - Roma

#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

Page 30: KInect Lab @ Community Days 2014 - Roma

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Audio

• Il metodo AcquireBeamFrames restituisce l’elenco degli AudioBeamFrames.

Page 31: KInect Lab @ Community Days 2014 - Roma

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

Page 32: KInect Lab @ Community Days 2014 - Roma

#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

Page 33: KInect Lab @ Community Days 2014 - Roma

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

demoMultiFrameSource

Page 34: KInect Lab @ Community Days 2014 - Roma

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

WPF

• Referenziare Microsoft.Kinect e Microsoft.Kinect.Wpf.Controls

Page 35: KInect Lab @ Community Days 2014 - Roma

#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;

Page 36: KInect Lab @ Community Days 2014 - Roma

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

Page 37: KInect Lab @ Community Days 2014 - Roma

#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

Page 38: KInect Lab @ Community Days 2014 - Roma

#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>

Page 39: KInect Lab @ Community Days 2014 - Roma

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

demoWPF

Page 40: KInect Lab @ Community Days 2014 - Roma

#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

Page 41: KInect Lab @ Community Days 2014 - Roma

#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;

Page 42: KInect Lab @ Community Days 2014 - Roma

#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

Page 43: KInect Lab @ Community Days 2014 - Roma

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

demoWindows Store App

Page 44: KInect Lab @ Community Days 2014 - Roma

#CDays14 – Roma - 23, 24 e 25 Settembre 2014

Page 45: KInect Lab @ Community Days 2014 - Roma

#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

Page 46: KInect Lab @ Community Days 2014 - Roma

#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