martedì 26 marzo 2013

Le novità di Kinect SDK 1.7 sul Blog MSDN

Vi segnalo un mio Guest Post uscito oggi sul blog italiano di MSDN e relativo alle novità della nuova versione dell’SDK di Kinect.

Se volete dargli una letta, l'indirizzo è il seguente http://blogs.msdn.com/b/italy/archive/2013/03/26/guest-post-introduzione-al-kinect-sdk-v1-7.aspx

 

lunedì 18 marzo 2013

Kinect for Windows SDK 1.7 is out!!!

E’ disponibile la nuova versione dell’SDK per Kinect.

Siamo arrivati alla versione 1.7 ed il download è disponibile sul sito ufficiale di Kinect for Windows (http://www.microsoft.com/en-us/kinectforwindows/).

In questa versione troviamo:

  • controlli “gesture” come push-to-press (bottone che viene premuto nel momento in cui si permane sullo stesso) o grip-to-pan (la possibilità di avere la “manina” che afferra un contenuto per poterlo spostare);
  • miglioramento nell’Engagment Model: è stata migliorata la capacità del device di capire quale utente sta, istante per istante, interagendo con il dispositivo. In questa versione, il modello di engagment è ridefinibile dallo sviluppatore;
  • Kinect Fusion: possibilità di creare rendering 3D utilizzando il Kinect (http://research.microsoft.com/en-us/projects/surfacerecon/)
  • sono stati aggiunti ulteriori sample (open source).

Nei prossimi giorni cercheremo di vedere in dettaglio le novità.

Potete trovare tutte le novità in dettaglio al seguente indirizzo http://msdn.microsoft.com/en-us/library/jj663803.aspx#SDK_1pt6_M2

Technorati Tags: ,,

martedì 5 marzo 2013

Kinect SDK 1.6 : Controllare i settings della web cam

E’ un pò di tempo che non scrivo più post tecnici su questo blog e vorrei riprendere con un argomento relativo all’SDK 1.6 di Kinect (non propriamente recentissima) poco trattato.

Si tratta delle funzionalità aggiunte all’SDK per il controllo dei parametri della web cam.

Come di consueto, partiamo dall’istanza di KinectSensor che corrisponde al device che vogliamo utilizzare (per maggiori info vedere "Kinect: cosa cambia nella nuova SDK").

La classe KinectSensor mette a disposizione la proprietà ColorStream, di tipo ColorImageStream, che permette di accedere allo stream video del device. E’ proprio questa che ci permette di avere accesso anche ai settaggi della web cam.

In particolare, la classe ColorImageStream, espone la proprietà CameraSettings (di tipo ColorCameraSettings).

image

Come possiamo vedere dal precedente disegno, la classe ColorCameraSettings espone tutta una serie di proprietà che corrispondono ai possibili parametri della camera che possono essere modificati.

AutoExposure

Permette di impostare la camera sull’esposizione automatica (true) o no (false). Se l’esposizione è automatica, il cambiamento di alcune proprietà, come ad esempio l’ExposureTime, non hanno effetto.

AutoWhiteBalance

Permette di impostare il bilanciamento del bianco automatico. Se impostato a true, il cambiamento della proprietà WhiteBalance non sortisce effetto.

BacklightCompensationMode

Imposta il comportamento per la compensazione della luce proveniente dallo sfondo in modo da poter separare facilmente oggetti in primo piano dallo sfondo stesso. I valori ammissibili sono contenuti nell’enumerazione BacklightCompensationMode e il valore di default è AverageBrightness.

Brightness

Imposta la luminosità della camera. Gli estremi dell’intervallo sono contenuti dale proprietà di sola lettura MinBrightness e MaxBrightness e, attualmente tale intervallo è [0.0, 1.0]. Il valore di default è 0.2156.

Contrast

Imposta il contrasto. Gli estremi dell’intervallo di valori ammessi sono contenuti nelle proprietà MaxContrast e MinContrast e, attualmente, tale intervallo è [0.5, 2.0]. Il valore di default è 1.0.

ExposureTime

Imposta il tempo di esposizione della camera con incrementi di 1/10000 di secondo. Gli estremi dell’intervallo ammesso sono contenuti nelle proprietà MaxExpopsureTime e MinExposureTime ed il range attuale è [0, 4000]. La proprietà non viene presa in considerazione se AutoExposure è true. Il valore di default è 0.0.

FrameInterval

Imposta il valore dell’intervallo di tempo tra un frame e l’altro (espresso in 1/10000 di secondo). Gli estremi dell’intervallo ammesso sono espressi dalle proprietà MaxFrameInterval e MinFrameInterval e, attualmente, l’intervallo è [0, 4000]. Anche questa proprietà non viene presa in considerazione se AutoExposure è true. Il valore di default è 0.

Gain

Permette di agire sul Gain dell’immagine, cioè su un moltiplicatore per il colore RGB dell’immagine stessa. Gli setremi dell’intervallo di valori ammessi sono contenuti nelle proprietà MaxGain e MinGain e, attualmente, tale intervallo è [1.0, 16.0]. Il valore di default è 1.0 (cioè guadagno nullo). Anche questa proprietà non ha effetto se AutoExposure è true.

Gamma

Imposta la correzione gamma relative all’immagine RGB (la correzione Gamma o semplicemente Gamma è una operazione non lineare che riguarda la luminanza dell’immagine, maggiori info su http://it.wikipedia.org/wiki/Correzione_di_gamma). Gli estremi dell’intervallo di valori ammessi sono contenuti nelle proprietà MaxGamma e MinGamma e, attualmente, l’intervallo ammesso è [1.0, 2.8]. Il valore di default è 2.2.

Hue

Permette di impostare il valore Hue (tonalità) dell’immagine RGB. Gli estremi dei valori ammessi sono contenuti nelle proprietà MaxHue e MinHue e, attualmente, tale intervallo è [–22.0, 22.0]. Il valore di default è 0.0.

PowerLineFrequency Imposta il valore della frequenza di aggiornamento dell’immagine. I valori ammessi sono contenuti nell’enumerazione PowerLineFrequency. Il valore di default è PowerLineFrequency.Disabled. La proprietà non ha effetto se AutoExposure è true.
Saturation Imposta il valore della saturazione (cioè la policromia di un colore rispetto alla propria luminosità) per l’immagine RGB. Gli estremi dell’intervallo ammesso sono contenuti nelle proprietà MaxSaturation e MinSaturation e, attualmente, il range è [0.00, 2.00]. Il valore di default è 1.0.
Sharpness Imposta il valore della nitidezza dell’immagine (cioè la quantità di dettagli visibili). Gli estremi dell’intervallo di valori ammessi sono contenuti nelle proprietà MaxSharpness e MinSharpness e, attualmente, tale intervallo è [0.00, 1.00]. Il valore di default è 0.5.
WhiteBalance Imposta il valore di bilanciamento del bianco per la camera. Il bilanciamento del bianco è la temperatura di colore (espressa in gradi Kelvin) che il bianco ha in un determinato ambiente. Gli estremi dell’intervallo dei valori ammessi sono contenuti nelle proprietà MaxWhiteBalance e MinWhiteBalance e, attualmente, tale intervallo è [2700, 6500]. Il valore di default è 2700. Tale proprietà ha effetto solo se AutoWhiteBalance è false.

Per poter modificare le impostazioni della camera, dunque, è sufficiente impostare le proprietà desiderate.

Ad esempio, nel seguente codice, si rimuove l’auto esposizione e si impostano contrasto e luminosità rispettivamente a 0.5 e 1.

  1. Public Sub SetCameraProperties()
  2.     Sensor.ColorStream.CameraSettings.AutoExposure = False
  3.     Sensor.ColorStream.CameraSettings.Brightness = 1D
  4.     Sensor.ColorStream.CameraSettings.Contrast = 0.5D
  5. End Sub

La classe ColorCameraSettings, infine, permette di ripristinare le configurazioni di default utilizzando il metodo ResetToDefault().

Nella solution allegata è stata realizzata un’interfaccia di controllo della camera in cui è possibile modificare ogni singolo valore delle proprietà esposte dalla CameraSettings.

image

Le impostazioni rimangono valide all’interno della nostra applicazione e non sono permanenti all’interno del device, quindi, nel momento in cui eseguiamo il rilascio dell’istanza di KinectSensor, queste tornano al valore di default.

Attenzione all’utilizzo delle impostazioni della camera quando stiamo facendo le prove con Kinect for xBox: in questo caso, se proviamo a recuperare l’istanza di ColorCameraSettings esposta da CameraSettings, questa è sempre Nothing.

 

 

lunedì 4 marzo 2013

Kinecteer ai Community Days 2013

La scorsa settimana si sono svolti i Community Days, evento clou per le community italiane del mondo .NET.

Due giorni di sessioni a “raffica” con contenuti di ottimo livello e, soprattutto, gratis!!!

Grande affluenza di pubblico e tanto interesse per gli argomenti proposti.

Tra le varie sessioni c’è stata anche “Kinect e gadgeteer”, sessione tenuta a 6 mani da me, Marco Minerva e Marco Dal Pino.

Questo è il video del momento topico in cui il rover Gadgeteer prende vita e si muove grazie ad un’applicazione touchless comandata da Kinect.

Nella pagina della sessione potete trovare le slide e la demo completa.

Vorrei ringraziare i due Marco per aver avuto la pazienza di sopportarmi e per il lavoro svolto: siete grandi!!!