Upload
massimo-bonanni
View
394
Download
5
Embed Size (px)
DESCRIPTION
Sessione "Kinect V2: what's new!!" tenuta durante il lab Kinect presso l'università di Ancona il 29/05/2014
Citation preview
@@Kinect V2 : What’s new!!!
Massimo Bonannihttp://[email protected]@massimobonanni
@ 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
@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
@Kinect for Windows v2 sensor
Kinect for Windows v2
USB hub
Kinect for Windows v2 power supply
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
Hardware
@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
@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
@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
@Architettura: V1 vs V2
Stream
Reader
Reader
Reader
Source
Una sola applicazione alla volta
Più applicazioni contemporanee
@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
@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
@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
@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
@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
@InfraredSource
DEMO
@Color sourceDepth sourceInfrared sourceBody Index sourceBody source (scheletro, hand tracking, espressioni…)Audio source
Funzionalità “di serie”
@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
@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
@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
@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
@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
@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
@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
@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
@BodyIndexSource
DEMO
@Audio Beam• “Cono” di ascolto orientabile• Può essere orientato
automaticamente o manualmente• Le API possono supportare più “coni“
contemporaneamente
Audio
@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
@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
@Il metodo AcquireBeamFrames restituisce l’elenco degli AudioBeamFrames.
Audio
@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)
@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
@MultiFrameSource
DEMO
@• 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()
@Windows Store App
DEMO
@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
@ 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
@ 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
@ 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
@
@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