Guest Post: Introduzione al Kinect SDK v1.7

Questo post è stato scritto da Massimo Bonanni , MVP Visual Basic

In questo post daremo un’occhiata alle novità e i miglioramenti introdotti nella versione 1.7 dell’SDK rilasciata il 18 Marzo 2013.

Tra le novità più importanti troviamo:

  • Introduzione del KinectInteraction Framework, un insieme di classi e componenti che forniscono funzionalità di base per l’implementazione dell’interazione tra il device e le nostre applicazioni;
  • Miglioramento dell’engagement model, cioè della parte dell’SDK che si occupa di capire quale player è attualmente tracciato dal device e garantire che tale tracciamento sia quanto più consistente;
  • Kinect Fusion: permette di utilizzare il device come uno “scanner” 3D per disegnare a run-time modelli tridimensionali ripresi direttamente dal Kinect.

KinectInteraction Framework

KInectInteraction framework mette a disposizione dello sviluppatore una serie di componenti per gestire, appunto, l’interazione tra utente che utilizza il device e applicazione.

Nella seguente figura è rappresentata l’architettura del framework:

clip_image001

Possiamo utilizzare i tre differenti blocchi:

  • KinectInteraction Native API: sono API di basso livello (utilizzabili in C++), dedicate ad applicazioni particolari e con ben determinati requisiti non standard, che consentono di accedere a basso livello allo stream di interazione. Lo stream di interazione è un’altra delle novità introdotte con questa versione dell’SDK e si tratta di uno stream molto simile a quelli già forniti dal Kinect (Depth, Skeletal Tracking, ect., ect.) ma che contiene le informazioni di interazione dell’utente con l’applicazione;
  • KinectInteraction Managed API: sono le API .NET che wrappano le API native. Queste API forniscono la possibilità di accedere ai frame di interazione dell’utente con l’applicazione ad un livello più astratto rispetto alle API native;
  • KinectInteraction Controls: sono controlli managed (WPF) che implementano già un’interazione grafica con l’utente all’interno della nostra applicazione.

Il KinectInteraction Framework introduce tutta una serie di nuove funzionalità e concetti nuovi non presenti nelle versioni precedenti dell’SDK.

Una nuova funzionalità è la possibilità di tracciare delle mani dell’utente: il framework utilizza lo skeletal tracking e il depth stream per recuperare lo stato delle mani dell’utente.

Viene definito il concetto di Physical Interaction Zone (PhIZ), cioè di una mappatura tridimensionale tra lo spazio fisico davanti all’utente e lo spazio logico che lo sviluppatore può utilizzare definire le interazioni ed esiste un PhIZ per ogni mano dell’utente, per ogni utente tracciato (quindi fino a 2 in questo momento). Praticamente PhIZ è la zona attiva in cui la maggior parte delle interazioni sono attive.

Il framework è in grado di tracciare le mani di ogni utente (fino a due). Nel momento in cui davanti al Kinect sono presenti due utenti, uno di questi viene “designato” come primario (tipicamente il primo che viene rilevato dal sensore). Questo utente mantiene il controllo dell’interazione con l’applicazione fino a che il sistema stesso non è più in grado di rilevare lo stesso. All’utente primario viene assegnata una mano principale con cui gestisce l’interazione con il sistema. L’utente è in grado di gestire l’interazione solo con tale mano anche se può cambiare la mano primaria semplicemente portandola al di fuori della PhIZ e portando dentro la PhIZ l’altra mano.

In questa versione dell’SDK, il framework fornisce, “di serie” le seguenti interazioni:

  • Grip and Release: la gesture di grip si ottiene nel momento in cui l’utente pone la propria mano aperta con il palmo rivolto al sensore e la chiude a pugno. Il release è ottenuto aprendo il pugno. Può essere utilizzata in associazione con il controllo Kinect Scroll Viewer per fornire l’interazione di Grip and Scroll ma anche con altri controlli di interfaccia;
  • Press : il press si ottiene quando l’utente pone la propria mano con il palmo rivolto al sensore e il braccio leggermente piegato verso se ed estende il braccio stesso avvicinando il palmo al sensore;
  • Scroll : lo scroll viewer permette di fornire all’utente la capacità di scorrere liste di oggetti utilizzando, ad esempio, il grip.

Kinect Fusion

Kinect Fusion permette di utilizzare il device come uno scanner tridimensionale per il “disegno” di modelli 3D riprendendo direttamente l’oggetto fisico.

Per poter utilizzare Kinect Fusion sulla propria macchina occorrono delle specifiche hardware ben precise. In particolare occorre un processore multi-core a 3Ghz con una scheda grafica con almeno 2Gb di memoria dedicata (il software del Fusion si basa sulla potenza della GPU per il disegno a runtime). Le schede su cui il Fusion è stato testato sono la NVidia GeForce GTX560 e la AMD Radeon 6950. Fusion dovrebbe funzionare con tutte le schede “superiori” rispetto a quelle elencate.

Dal punto di vista software, richiede DirectX11.

Kinect Fusion utilizza il depth stream e basa il proprio algoritmo (del quale non parleremo in dettaglio qui) sulle variazioni di profondità tra un fotogramma ed il successivo (ad esempio ottenute muovendo il device come un “pennello”).

Interessante è la possibilità di esportare i modelli realizzati secondo alcuni degli standard di modellazione esistenti.

Maggiori informazioni sono disponibili all’indirizzo http://msdn.microsoft.com/en-us/library/dn188670.aspx

Human Interface Guidelines

Assieme all’aggiornamento dell’SDk, Microsoft ha rilasciato anche la nuova versione della Human Interface Guidelines, la guida relativa al corretto utilizzo del Kinect nella realizzazione delle interfacce NUI.

La guida è stata rivista alla luce delle gesture previste in questo nuovo SDK.

Aggiornamento da 1.6 a 1.7

L’aggiornamento dell’SDK e del developer toolkit si fa semplicemento lanciando l’installazione della nuova versione che sostituisce la vecchia senza creare problemi.

Il codice scritto per la versione 1.6 funziona ancora per la versione 1.7 con l’unico accorgimento (non sempre necessario) di dover referenziale la nuova dll.