free hit counter
July, 2011 - Pietro Brambati Blog - Site Home - MSDN Blogs

Pietro Brambati Blog

Developer's stories

July, 2011

  • Pietro Brambati Blog

    Kinect – divertirsi con PowerPoint

    • 5 Comments

    Da qualche settimana è disponibile la beta dell’ SDK che consente di sviluppare applicazioni Windows utilizzando Kinect. Per sviluppare con Kinect vi servirà avere quindi il dispositivo e il cavo di alimentazione che si attacca alla corrente, che è incluso nella scatola del Kinect stesso.

    Dato il periodo estivo ho avuto un po’ di tempo per fare qualche prova con Mario e divertirmi con il nuovo SDK.

    image

    Il Kinect è equipaggiato con:

    • Una videocamera a colori con risoluzione 640x480 a 30 fps
    • Due sensori di profondità
    • un motore che regola l’inclinazione
    • un microfono multi-array che offre funzioni multichannel di echo cancellation, sound position tracking, noise redution and suppression e che utilizzano un sistema hardware interno per l’elaborazione

    Installazione

    Per usare Kinect da Windows 7 potete scaricare la beta dell’ SDK da questo link. Alcuni degli esempi che utizzano il microfono interno richiedono l’installazione di altri componenti: Microsoft Speech Platform - Software Development Kit (SDK) (Version 10.2 x86),   Microsoft Speech Platform - Server Runtime (Version 10.2 x86) e il  Kinect for Windows Runtime Language Pack.

    In generale trovate i requisiti di sistema, il download del software, esempi e documentazione partendo da questo link.

    Un esempio di codice

    Per divertirmi un po’ con Kinect ho provato a realizzare un Add-in per PowerPoint 2010. L’idea è quella di riconocere almeno due semplici “gesture” per andare avanti ed indietro in una presentazione fatta di slide. Molto semplicemente ho deciso di rilevare:

    • il movimento della mano destra che passa (verso sinistra) la posizione X relativa alla testa,  per mandare anvanti delle slide.
    • il movimento della mano sinistra che passa (verso destra) la posizione X relativa alla testa  per mandare indietro delle slide.

    Inoltre ho fatto qualche modifica all’interfaccia e il risultato di come si presenta PowerPoint con l’Add-in installato è il seguente:

    clip_image002

    Ho aggiunto un Ribbon con due bottoni:

    • il primo serve per Abilitare/Disabilitare la rilevazione del Kinect, che entrerebbe subito in funzione appena l’utente fa partire la presentazione, premendo F5.
    • Il secondo tasto (Setting Panel) abilita il Panel che vedete a destra in PowerPoint, dal pannello potete vedere cosa “vede” Kinect e controllare che la persona sia inquadrata e sopratutto alzare e abbassare l’angolo del Kinect utilizzando lo slider e poi premendo il bottone SetTilt.

    Le modifiche all’interfaccia sono “cose in più”, non sarebbero necessarie se si volesse solo andare avanti indietro nelle slide, le ho aggiunte per comodità.

    Per la parte “core” ho creato un progetto da Visual Studio 2010 di tipo PowerPoint 2010 Add-in.

     image

    Aggiungete quindi i riferimenti alla libreria di Kinect:

    image

    e quindi intercettare alcuni eventi messi a disposizione dall’ Add-in: sull’evento di Start-up ho aggiunto il rilevamento dell’evento SlideShowBegin e SlideShowEnd, di questi due eventi in particolare il primo mi serve per far fare il lavoro vero alle API di Kinect quando l’utente fa partire una presentazione.

    Ecco nel seguito parte del codice, alla fine dell’articolo troverete il link per il download completo dell’esempio:

    image

    Prima cosa bisogna istanziare il Runtime di Kinect, quindi inizializzarlo impostando tramite un Enum in cui si dichiari quali tipi di  funzioni si vuole utilizzare: nel mio caso userò sia la vidocamera a colori (RumtimeOptions.UserColor)  questo serve solo nel Pannello di PowerPoint per tarare l’altezza del Kinect. Invece il parametro UseSkeletalTracking serve se volgiamo poi rilevare il movimento dello scheletro della persona. A questo link trovate un guida di dettaglio.

    In pratica quello che ci mette a disposizione lo SkeletonTracking del Kinect sono una serire di punti detti Joint (Testa, Spalla sinistra, Mano Sinitra etc) di cui possiamo essere notificati tramite un meccanismo ad eventi della loro posizione (x,y,z) e quindi in base a questa decidere cosa vogliamo fare. Tenete presente che non esistono al momento delle “gesture” già codificate dentro all’ SDK, ma dobbiamo decidere noi quali gesture implementare, in base alla posizione dei Joint che sono interessanti rilevare per la nostra applicazione. La schermata seguente vi dà un’idea di cosa “vede” Kinect quando utilizza la modalità di SkeketonTracking: ogni pallino è un Joint.

    image

    Dopo l’inizializzazione del Runtime trovare una serire di parametri TransformSmootParameters,  questi parametri servono per migliorare la sensibilità con cui Kinect rileva i vari Joint. Ad esempio operando su alcuni di questi, nel mio caso ha fatto un po’ di prove Mario, possiamo rendere più precisa o meno la rilevazione di certi movimenti.

    Ora bisogna agganciare gli eventi che ci ineressano: SkeletonFrameReady e VideoFrameReady. Il primo è il più importante dei due per il nostro esempio perchè ci dà i vari Joint di cui vogliamo avere le coordinate. L’altro serve per creare una serire di imagini in sequenza molto rapida che danno l’impressione di vedere il video dentro PowerPoint e che come ho già detto servono solo per tarare il Kinect.

    Andiamo a vedere cosa succede dentro l’evento SkeletonFrameReady. In buona sostanza riceviamo una serire di eventi che contengono per ogni “evento” rilevato i Joint. Quindi possiamo prendere quelli che servono, come vedete nel codice seguente:

    image

    Nell’esempio precedente per ogni SkeletonData, recupero la posizione dei Joint che mi interessano (testa, mano destra, mano sinistra, centro della vita), quindi ora posso scrivere il codice che rileva la mia gesture. Bisogna tenere presente però che un evento viene rilevato in continuazione: quindi se rilevassi una gesture per andare avanti con le slide, quando il presentatore muove la mano destra verso sinistra (come se sfogliasse un libro) e mandassi avanti la slide, quello che succederebbe e che la rilevazione avverrebbe più volte al secondo e quindi arriverei in un baleno alla fine dello slide deck. Per ovviare a questo comportamento rilevo solo il primo movimento e appena intercettato imposto una variabile (mettendola a False) di modo che non possa più andare avanti con le slide. Quando poi rileverò che l’utente torna in una posizione di riposo (riporta indietro la mano destra) allora reimposterò a True la variabile precedente, così al successivo movimento si andrà avanti con le slide.

    image

    Nel codice precedente notate che se sono in una condizione in cui la slide può essere mandata avanti (_slideCanChangeNext2) (utente era prima in una posizione di risposo), controllo la posizione della mano destra, la posizione rispetto all’asse X deve essere a sinistra della testa e inoltre la posizione Y della mano deve essere più in alto del centro della vita + un offset, che uso per evitare che se l’utente si muova troppo vengano rilevati falsi avanti e indietro nelle slide. Se la verifica ha avuto successo posso mandare avanti la slide di una con il codice SlideShowWindow.View.Next().

    Conclusione

    In questo breve articolo (estivo) ho voluto provare il modello di programmazione della beta dell’ SDK per Kinect integrando le API in un Add-In di PowerPoint 2010, che tra le altre cose utilizza i Ribbon di Office 2010 e un CustomTaskPane che contiene una serire di controlli WPF. Potete scaricare il codice completo dell’esempio da questo link. (file powerkinect1.0.0.5.zip) L’Add-in è pensato per PowerPoint 2010 e funziona solo con le versioni 32 bit di Office 2010 perchè gli assembly di Kinect, che sono al momento in beta, sono utilizzabili in contesti a 32 bit.

    Il codice d’esempio contiene anche un’altra gesture… da usare con cautela durante una presentazione….scopritela!

    Buon divertimento con Kinect, spero facciate applicazioni interessanti!

  • Pietro Brambati Blog

    Orchard localizzato in Italiano

    • 0 Comments

    Come penso sappiate Orchard è un progetto gratuito, open source e soprattutto community-focused

    Orchard è scaricabile dal sito del progetto e da poco potete scaricare anche i file localizzati in Italiano, consentendovi quindi di avere l’interfaccia  localizzata.

    Il lavoro di localizzazione è stato portato a compimento da Simone che si è occupato della localizzazione in Italiano collaborando il team di Orchard insieme ad un altro gruppetto di volenterosi.

    Oggi ha fatto un post con l’annuncio: qui il post in inglese, qui quello in Italiano, dove trovate anche le istruzioni su come aiutare la community a migliorare la traduzione e tenerla aggioranta.

    Come installare il file per la localizzazione?

    L’utilizzo dei file localizzati sul vostro sito fatto con Orchard è molto semplice, un metodo è il seguente:

    Scaricate il file zip che contiene i file localizzati in Italiano e estraete il contenuto nella root del sito: attenzione a non creare una directory per lo zip ma dovete fare il merge delle cartelle contenute nello zip con quelle del sito Orchard che dovrete preventivamente aver creato. Vi apparirà un messaggio come quello mostrato di seguito:

    image

    Per cambiare il default della lingua, andate sotto: Settings->General nella Dashboard di Orchard. Sotto Default Site Culture, cliccate su Add or remove supported cultures for the site

    image

    Quindi nella schermata seguente, selezionate it-IT culture dalla lista e premete Add.

    image

    Tornate ora nella schermata dei Settings, a questo punto impostate la lingua it-IT e premete Save.

    image

    Da questo momemto il sito avrà l’interfaccia localizzata in Italiano.

    Se non avete ancora provato Orchard, potete utilizzare Microsoft WebMatrix e installarlo direttamente da lì.

    Buon divertimento con Orchard!

Page 1 of 1 (2 items)