GRI: Gestures Recognition Interface

Transcript

GRI: Gestures Recognition Interface
2012
di Dario D'Ambruoso
GRI: Gestures Recognition
Interface
Scopo di questo lavoro è la realizzazione di un applicativo in grado di
riconoscere, e quindi interpretare alcuni gesti delle mani, nello
specifico ben 13 per mano. In aggiunta a questo si è deciso di
utilizzare tali gesti per la navigazione di oggetti 3D.
Interazione Uomo - Macchina
Prof. Ing. V. Bevilacqua
GRI: Gestures Recognition Interface
Capitolo 1: Caso di studio - Introduzione
CAPITOLO 1: CASO DI STUDIO
INTRODUZIONE
Negli ultimi anni si sta assistendo ad un interesse sempre maggiore per le interfacce uomo-macchina. Gli
sviluppi attuali mostrano sistemi che permettono all'utente di interagire con i computer in maniera più
semplice, consentendo l'utilizzo di metafore vicine alle azioni che vengono eseguite dagli uomini. Un esempio
può essere l'utilizzo oramai consolidato degli ambienti WIMP (Windows-Icons-Menu-Pointer), divenute
interfacce standard in molti sistemi operativi quali Windows, IOS…. La possibilità di utilizzare un mouse per
“puntare e cliccare" oppure “trascinare" files o programmi da un posto all'altro, aprire finestre nelle quali
andranno a girare programmi ecc., piuttosto che usare linee di comando, rende l'utilizzo del computer più
intuitivo o, come si dice nella terminologia appropriata, “user friendly". Non solo i computer, recentemente
anche console di gioco quali X-Box, Wii,
ed altre presentano un’interazione ad un
livello molto avanzato, tuttavia sfruttano
sempre dispositivi non comuni, si pensi
al Kinect di Microsoft, il quale è dotato di
telecamera RGB, doppio sensore di
profondità a raggi infrarossi composto da
un proiettore a infrarossi e da una
telecamera sensibile alla stessa banda;
oppure al wiimote di Nitendo.
Recentemente per cercare di rendere
FIGURA 1: KINECT
ancora più naturale e intuitiva
l'interazione
con
l'ambiente
dei
computer si stanno esplorando nuovi argomenti di ricerca, quali l'utilizzo diretto delle gestualità della mano
(senza l'uso di mouse o di joystick) per comunicare con le macchine. Mediante l'uso di speciali guanti muniti di
sensori, una determinata configurazione della mano viene riconosciuta dal computer tramite i segnali
provenienti dai sensori applicati al guanto. L'utilizzo di interfacce pilotabili attraverso gesti della mano offrono
i seguenti vantaggi:
 una interazione più naturale con la macchina: i gesti sono una forma naturale di comunicazione e
di facile apprendimento; l'uso di comandi gestuali per interagire con sistemi computerizzati rende
l'approccio con il sistema più naturale;
 una interazione più potente ed efficace: i sistemi che percepiscono sia la posizione della mano che
il movimento hanno un potere espressivo più alto: infatti con un unico gesto si potrebbero identificare
sia l'oggetto indicato sia l'azione da eseguire su di esso;
 una interazione diretta: da un punto di vista cognitivo, la mano diventa il device di input, senza aver
bisogno di trasduttori intermedi. L'interazione uomo-macchina diventa diretta semplicemente
assegnando gli adeguati gesti. Teoricamente, è possibile emulare altri device (ad esempio la tastiera
utilizzando un alfabeto delle dita).
Diversamente dai tradizionali metodi di interazione che usano strumenti pilotati dalla mano (quali il mouse),
l'utilizzo diretto delle gestualità della mano senza nessun trasduttore intermedio fa assumere alla
comunicazione uomo-macchina un aspetto pressoché naturale, ed inoltre sfruttando appieno le capacità
gestuali dell'utente può ridurre il tempo necessario per l'apprendimento. Alcuni studi effettuati circa l'utilizzo
delle gestualità nella comunicazione fra le persone hanno rilevato che il 70% - 80% di ciò che viene detto
durante un dialogo può essere espresso esclusivamente mediante gestualità che coinvolgano tutte le parti del
corpo. Da ciò viene sottolineata l'importanza che viene attribuita all'utilizzo di gesti della mano nella
interazione uomo-macchina. I sistemi che sfruttano questa nuova modalità di interazione possono fornire
inoltre un prezioso strumento per quelle persone dotate di capacità motorie limitate, permettendo di sfruttare
solo alcuni limitati movimenti per interagire con la macchina. Purtroppo questo particolare tipo di guanti in
genere sono poco confortevoli e molto fastidiosi, limitano i movimenti in quanto spesso sono fisicamente
connessi con il computer, e in genere non sono in grado di fornire la posizione relativa della mano nello spazio,
di Dario D'Ambruoso
1
GRI: Gestures Recognition Interface
Capitolo 1: Caso di studio - Il fine
a meno che non siano dotati di sofisticati (e costosi) sensori per il rilevamento della posizione. Il fatto che
l'utente debba essere costretto ad indossare un guanto, rende proponibile l'utilizzo di questo dispositivo di
input solo per limitate applicazioni di uso specialistico, come ad esempio nella realtà virtuale, oppure nei casi in
cui è necessario conoscere l'esatto angolo formato dalle articolazioni delle dita. A dimostrazione di ciò vi _e lo
scarso successo ottenuto da applicazioni come quella di Thomas Baudel, dove viene utilizzato un DataGlove per
controllare la proiezione di slides durante una presentazione. Se vogliamo sfruttare l'uso dei gesti anche per
applicazioni di carattere generico, in cui non c'è la necessità di descrivere un modello completo della mano,
bisogna trovare un'altra soluzione in cui l'utente non debba essere costretto ad interagire in maniera
“innaturale", senza quindi utilizzare nessun guanto o accessorio simile.
IL FINE
In relazione a quanto detto nell’introduzione, lo scopo di questo lavoro di ricerca è quello di sviluppare un
sistema per il riconoscimento di comandi gestuali basato sul riconoscimento visuale dei gesti delle mani,
piuttosto che dai segnali provenienti dai sensori collegati ad un guanto. L'attuale tecnologia di Computer Vision
ci offre la possibilità di analizzare le immagini di una data scena e riconoscerne il contenuto. Sistemi di questo
tipo sono già in uso in svariati campi, fra i quali la robotica, il riconoscimento ottico di caratteri, il
riconoscimento di obbiettivi strategici durante i voli di ricognizione di aerei militari, l'automazione industriale
ecc. Il successo ottenuto dalla Computer Vision in questi campi ci suggerisce quindi di realizzare un sistema per
il riconoscimento dei gesti mediante tecniche di visione. Utilizzando una telecamera per riprendere le pose
della mano, e un sistema di riconoscimento affidabile che sia in grado di ricavare dalle immagini una
determinata posa (e quindi associargli un significato), le potenzialità del sistema diventano molteplici. In
questo modo l'utente non deve essere fisicamente connesso con il computer da un cavo e, soprattutto, non deve
essere costretto ad acquistare un hardware particolare, sarà sufficiente una comune web cam. Questo progetto
esamina la possibilità di riconoscere comandi gestuali della mano, dove la scena ripresa dalla cam è
assolutamente indifferente, purché presenti le mani. Per meglio chiarire la questione, si rimanda alle sezioni
successive. Gli sviluppi attuali nello studio di interfacce gestuali mostrano numerose soluzioni che necessitano
di un hardware speciale, magari di prestazioni elevatissime. Questo lavoro presenta un applicativo progettato
ed implementato, in grado di riconoscere comandi gestuali dall'analisi della posa statica della mano che
prescinda dalle specifiche spaziali di traslazione, scala e rotazione. Chiameremo quindi comandi statici una
particolare configurazione della mano rilevata in un istante di tempo (ad esempio il pollice sollevato, oppure
mostrare il palmo della mano aperto per dire “stop"). Per far ciò il sistema deve riuscire a discriminare fra un
determinato set di pose della mano. Un comando statico quindi non tiene conto della dinamica del movimento
della mano. Chiameremo invece comandi dinamici della mano (nello specifico la variazione della posizione di
questa nello spazio), un particolare movimento assolutamente naturale che ci permette di impartire le
specifiche relative al comando statico assegnato. In questo lavoro di ricerca ci limitiamo all'analisi di comandi
statici. Riassumendo, in conclusione l’applicativo qui presentato è in grado di riconoscere una serie di gesti, e di
navigare all’interno di oggetti 3D, fornendo all’utente un’interfaccia del tutto innovativa, oltre che divertente e
interessante.
di Dario D'Ambruoso
2
GRI: Gestures Recognition Interface
Capitolo 1: Caso di studio - Specifiche da soddisfare
SPECIFICHE DA SODDISFARE
Nell'ambito della Human Computer Interaction i sistemi comandati da gesti della mano vengono accettati come
pratica di comunicazione con i computer solo se soddisfano le seguenti caratteristiche:
 il riconoscimento deve avvenire in maniera real-time: i sistemi che non agiscono in tempo reale
sono molto utili per l'analisi, ma inadeguati come interfaccia componente di uno strumento di
interazione uomo-macchina;
 la discriminazione fra un vocabolario di gesti deve essere efficiente : ogni istanziazione di gesto
deve avere delle caratteristiche uniche che lo distinguano dagli altri;
 deve esistere un feedback continuo all'utente durante la composizione del gesto : l'utente ha
la necessità di un feedback da parte del sistema che lo aiuti e lo segua nella composizione del gesto. Ad
esempio un feedback sintattico, come ad esempio il cambiamento della forma del cursore, potrebbe
informare l'utente sullo stato di riconoscimento del sistema. Oppure un feedback semantico, tipo il
cambio dello stato di un'icona, può rendere visibile all'utente quale è stato il comando interpretato dal
sistema, quindi l'azione che si sta eseguendo;
 il sistema deve essere “non intrusivo": niente guanti o device strani dovranno essere indossati
dall'utente.
Vedremo in seguito come la soluzione proposta da questa ricerca rispetti tutte queste caratteristiche.
CAMPI D’APPLICAZIONE
Questo tipo di interfacce basate sul riconoscimento visuale di un linguaggio gestuale, possono essere sfruttate
in un vasto numero di applicazioni, fra cui:
1. applicazioni di “Augmented Reality": in tale settore, derivato dalla ben più nota Realtà Virtuale,
convergono nuovi studi che mirano ad applicare nei calcolatori paradigmi di interazione tipicamente
umani;
2. disegno di interfacce multimodali: nelle interfacce in cui l'interazione con l'utente si basa solo sul
riconoscimento vocale di un comando, è difficile distinguere tra comandi a voce indirizzati al sistema e
espressioni rivolte a qualcun'altro. L'interpretazione dell'immagine fornita dal nostro modello può
essere usata per rilevare l'intenzionalità di un comando vocale. La combinazione di comandi gestuali
con comandi vocali permette di realizzare un sistema più affidabile di un altro costruito solo con un tipo
di comando: il linguaggio parlato completa il sistema offrendo la possibilità di definire nozioni astratte,
la gestualità completa il sistema offrendo la possibilità di esprimere informazioni geometriche;
3. controllo di unità domestiche: controllare device domestici o di ufficio a distanza: si può pensare ad
un insieme di telecamere connesse ad un controllore centralizzato, posto a catturare ogni comando, e
riconoscere l'intento di usare ogni device tipo TV, hi-fi, segreteria telefonica ecc. Questo eviterebbe pure
l'inconveniente dell'utilizzo di telecomandi, che sono sempre ingombranti, poco maneggevoli, e ... non si
trovano mai quando servono;
4. utilizzo in “information-point": un'applicazione molto utile di tali sistemi potrebbe essere quella di
sfogliare le pagine di un information point tramite gesti. L'approccio più naturale e stimolante dei
comandi gestuali piuttosto che della classica tastiera (perennemente guasta), riuscirebbe a coinvolgere
un numero maggiore di persone;
5. controllo di strumenti per presentazioni: mediante l'uso di gestualità, un utente che sta eseguendo
una presentazione può controllare la proiezione di diapositive o di slides in modo naturale; inoltre
viene lasciato libero di concentrarsi sulla presentazione perché non deve far uso di telecomandi o
tastiere;
6. applicazioni di telepresenza: i devices utilizzati per controllare i robot, quali joysticks, leve, ecc.
sono inadeguati per la manipolazione simultanea di più di tre gradi di libertà. In un ambiente remoto,
magari ostile, sistemi controllati manualmente possono essere necessari per eseguire operazioni
complesse. Le interfacce gestuali possono risolvere il problema cognitivo di mappare i movimenti delle
mani con azioni da far compiere all'operatore remoto.
Come vedremo in seguito molte di queste possono già essere considerate realizzate in questo tool.
di Dario D'Ambruoso
3
GRI: Gestures Recognition Interface
Capitolo 1: Caso di studio - Stato dell’arte e idee
STATO DELL’ARTE E IDEE
I gesti sono un'estensione del linguaggio umano, indipendente dal linguaggio utilizzato dagli interlocutori. È
come un linguaggio universale con scopi differenti: per questo risulta utile per identificare e comprendere il
linguaggio del corpo. Questo risulta abbastanza banale, se solo si pensa al modo in cui si gesticola quando si
parla, come studiato in [1]. Usando le mani come “supporto”, o “device“ (come già detto in precedenza) si
fornisce all’utente un esperienza molto naturale, in quanto si sfrutta un’abitudine radicata nel proprio essere. Ci
sono molti diversi approcci utilizzati al fine di riconoscere i movimenti e i gesti delle mani, alcuni di essi, come
già detto, ad esempio, richiedono l'uso di guanti specifici o e diversi tipi di hardware ottici e non, molto
sofisticati, e costosi. Tutti questi approcci sono considerati abbastanza invasivi da parte degli utenti, ed è per
questo che non vengono spesso utilizzate per applicazioni generali o applicazioni che coinvolgono molte
persone. D'altra parte, tecniche come Computer Vision, sfruttando in tempo reale le immagini o parti di video,
hanno un utilizzo più ampio perché sono meno invasive, anche se hanno dei limiti e/o problemi. In questi
sistemi, la rappresentazione 2d della mano rende il problema più difficile da risolvere, rispetto ad altri
problemi simili, perché stiamo parlando di un “oggetto” articolato e con una struttura che può cambiare posa e
forma nel tempo. Inizialmente si era pensato di realizzare un classificatore per riconoscere i gesti, e prima
ancora la mani, quindi l’idea era essenzialmente di realizzare una rete che riconoscesse all’interno della scena
le due mani, separando la destra dalla sinistra, quindi inviare queste informazioni ad un altro classificatore,
addestrato a riconoscere il gesto. Quindi si è iniziato l’addestramento del classificatore, utilizzando [2], una
serie di database, usati in [3] contenenti:
1. Immagini di 10 differenti pose della mano, realizzate da 24 soggetti con 3 differenti sfondi, quindi
situazioni statiche;
FIGURA 2: SEBASTIEN MARCEL STATIC HAND POSTURE DATABASE
2. Sequenze video di mani dinamiche di 50 soggetti;
FIGURA 3: SEBASTIEN MARCEL DYNAMIC HAND POSTURE DATABASE
In aggiunta a questi due, per rendere il classificatore ancora più robusto si è pensato di considerare anche [4],
usato in [5]:
3. 800 video rappresentanti il linguaggio dei segni americano.
Tuttavia ci si è scontrati con la realtà abbastanza dura, in quanto la mano è un “oggetto” estremamente
deformabile, oltre che soggetto a diversi fattori che la rendono estremamente variabile, soprattutto se valutato
nell’ottica di questo lavoro. Quindi l’idea successiva si è anche pensato di addestrare un classificatore in grado
di riconoscere, il polso, tuttavia anche in questo caso ci sarebbero stati moltissimi limiti relativi alla posizione
della mano d’avanti alla cam. Quindi si è optato per la soluzione descritta di seguito.
di Dario D'Ambruoso
4
GRI: Gestures Recognition Interface
Capitolo 1: Caso di studio - Stato dell’arte e idee
Le idee fondamentali di utilizzo su cui si basa questo lavoro sono essenzialmente due:
1. Cadding immersivo 3D con le sole mani: l’utente, munito di occhiali per il 3D realizza progetti di ogni
tipo, dal design di autoveicoli, ad edifici, con il solo utilizzo delle mani, al momento ricerche in atto
utilizzano guanti, tablet e penne digitali, oppure del wiimote, si pensi al progetto portato avanti dal
Consorzio CETMA di Brindisi:
FIGURA 4: CAD IMMERSIVO CON TABLET
FIGURA 5: CAD IMMERSIVO REALIZZATO AL CETMA
2. Utilizzo vero e proprio del PC, ovviamente per guidare le presentazioni, o in modalità immersiva, per un
qualsiasi altro motivo utile:
FIGURA 6: CONCEPT DI INTERFACCIA DI ULTIMA GENERAZIONE
di Dario D'Ambruoso
5
GRI: Gestures Recognition Interface
Capitolo 1: Caso di studio - Stato dell’arte e idee
Al momento in commercio esistono, oltre alle citate (Kinect e wiimote solo per scopo ludico) tecnologie, anche
delle altre, che consentono di interpretare in qualche modo i gesti, ed altro relativamente alle mani. Si passerà
brevemente in rassegna parte di quanto offerto dal mercato [6]:
1. Immersion CyberGlove II: guanto costruito con tessuto elasticizzato, wireless. Questo fornisce fino a
22 misurazioni angolari, utilizza una tecnologia resistiva, proprietaria, per riportare, e quindi
riconoscere in tempo reale le variazioni di posa della mano:
FIGURA 7: IMMERSION CYBERGLOVE II
2. X-ISTS Data Glove: guanto economico, con connessione cavo. Questo fornisce una soluzione
economica per il rilevamento della posa delle mani, i sensori riescono a valutare la posizione di ogni
singolo dito, e addirittura l’angolo di inclinazione dello stesso, oltre che della mano. In aggiunta
presenta anche dei sensori tattili in grado di rilevare il tocco di un oggetto:
FIGURA 8: X-ISTS DATA GLOVE
3. Measurand ShapeHand, ShapeHandPlus & ShapeClaw: sistema wireless di motion capture,
ovviamente relativo alla mano. I sensori flessibili fisicamente incorporati nel guanto riescono a
riconoscere qualsiasi forma assunta dalla mano. Presenta anche sensori di movimento:
FIGURA 9: MEASURAND SHAPEHAND, SHAPEHANDPLUS & SHAPECLAW
di Dario D'Ambruoso
6
GRI: Gestures Recognition Interface
Capitolo 1: Caso di studio - Stato dell’arte e idee
4. Immersion Haptic Workstation: una vera e propria stazione di lavoro tattile, estremamente
innovativa. Si tratta di un sistema di simulazione completamente integrato, con un ritorno dinamico di
forza, permette di manipolare, creare oggetti e ambientazioni 3D, oltre che navigarci dentro:
FIGURA 10: IMMERSION HAPTIC WORKSTATION
Risulta alquanto ovvio che questi dispositivi oltre che costosi, alcuni ingombranti, risultino anche
estremamente invasivi. Lo scopo che ci si è posti in questo lavoro era quello di realizzare (in piccolo) un
sistema che sopperisse quasi completamente a quanto mostrato sin qui. È tuttavia evidentemente ovvio che il
sistema realizzato in questo lavoro di ricerca non è paragonabile in termini di prestazioni, affidabilità e
precisione, ma al contempo mette su delle ottime basi per lo sviluppo di un sistema completamente (ritorno
dinamico di forza escluso) sostitutivo a quelli visti sin qui.
di Dario D'Ambruoso
7
GRI: Gestures Recognition Interface
Capitolo 2: Progettazione - Work-flow
CAPITOLO 2: PROGETTAZIONE
WORK-FLOW
In questa sezione entro nel vivo della questione, spiegando quali sono a grandi linee il work-flow
dell’applicativo, per poi entrare nelle sezioni seguenti maggiormente nel dettaglio, per far questo mi servirò di
uno schema riportato qui di seguito.
Acquisizione
Riconoscimento
comandi statici
d-s
Riconoscimento
comandi dinamici
Attuazione
comando
d(x,y) - s(x,y)
FIGURA 11: WORKFLOW GENERALE
Come mostrato quindi, l’elaborazione si suddivide in quattro macro-fasi:
1. Acquisizione da sensore video: dal sensore connesso al pc vengono prelevati di seguito i frame, e
immessi in un buffer, del quale è possibile specificare la dimensione. È inoltre possibile pulire ripulire il
buffer, cliccando sull’opportuno pulsante. Ancora il buffer sarà automaticamente ripulito qualora risulti
troppo pieno, al fine di rendere l’elaborazione fluida quanto più vicina al real time;
2. Riconoscimento di comandi statici: fase più impegnativa, il cuore del tool, in questa i diversi thread
competono al fine comune di riconoscere i comandi statici. È da precisare, che questa fase resta
comunque latente, estendendosi anche al di sotto della successiva;
3. Riconoscimento dei comandi dinamici: fase in cui viene “inseguito” il centro di massa di ogni mano,
al fine di riconoscere l’entità della trasformazione che l’oggetto 3D subirà nella fase successiva;
4. Attuazione del comando: fase in cui l’oggetto 3D viene ingrandito, ruotato, traslato, sostituito (in
funzione del comando statico 2), di una certa quantità (in funzione del comando dinamico 3).
Spiegheremo in dettaglio tre dei quattro punti qui elencati nelle sottosezioni, mentre discorso a parte, merita il
punto 2, sia per complessità, che per lunghezza.
di Dario D'Ambruoso
8
GRI: Gestures Recognition Interface
Capitolo 2: Progettazione - Work-flow
ACQUISIZIONE DA SENSORE VIDEO
L'acquisizione delle immagini può essere eseguita automaticamente da un hardware dedicato, precisamente da
una web cam e una scheda video a basso costo. La scheda video preleva il segnale composito proveniente da
una cam che riprende la scena dell'immagine, e converte questo segnale analogico in 3 matrici (una matrice per
la componente luminanza e due per le componenti crominanza). L'immagine viene suddivisa in piccole regioni,
chiamate pixel, individuati nella matrice da un numero di riga e un numero di colonna. Ad ogni pixel viene
associato un valore che corrisponde all'intensità della componente del colore della relativa matrice, nell'area
elementare corrispondente.
RICONOSCIMENTO DEI COMANDI DINAMICI
Riconosciuto il comando statico (per la spiegazione si rimanda alla sezione successiva) riconoscere il comando
dinamico risulta essere abbastanza banale. In pratica per ogni frame, viene seguito il centro di massa delle due
mani. A prescindere dal comando statico, per ognuna di queste coppie (di centri di massa) vengono calcolati
una serie di valori:
1. L’angolo α compreso fra i due centri di massa;
2. La distanza 𝑑 fra le due mani;
3. Il rapporto 𝑓𝑎𝑐𝑡𝑜𝑟 fra i due rettangoli (Destra e Sinistra) che racchiudono le mani;
4. Le coordinate 𝑥, 𝑦 dei centri di massa;
𝑥
𝑑
α
Sinistra
Destra
𝑦
FIGURA 12: RICONOSCIMENTO COMANDI DINAMICI
Quindi in base al comando statico, si applicherà una rotazione α, o un fattore di scala 𝑑, e via dicendo. Il sistema
di riferimento in puro stile OpenCV è posto come in figura, ovvero specchiato, rispetto alla situazione
destra/sinistra, e con l’asse delle ordinate ribaltato.
di Dario D'Ambruoso
9
GRI: Gestures Recognition Interface
Capitolo 2: Progettazione - Riconoscimento dei comandi statici
ATTUAZIONE DEL COMANDO
Quando il comando statico, e dinamico sono stati recepiti, l’oggetto 3D con l’ausilio delle librerie OpenGL viene
deformato in tempo reale, per cui l’utente, muovendo le mani, riesce a traslare, ruotare, avvicinare/allontanare,
e perfino cambiare oggetto, scegliendo fra un set di 3 oggetti differenti.
RICONOSCIMENTO DEI COMANDI STATICI
Il vero e proprio cuore dell’applicazione verrà qui descritto, iniziamo rappresentando schematicamente cosa
accade, in quanto ritengo che gli schemi siano sempre più esplicativi rispetto al testo semplice.
Copia in B&W
Copia a colori
Face Detecion
Skin Detection
Nota la posizione
del volto, viene
oscurato.
di Dario D'Ambruoso
10
GRI: Gestures Recognition Interface
Capitolo 2: Progettazione - Riconoscimento dei comandi statici
Il frame è suddiviso in
due parti elaborate
separatamente.
FIGURA 13: RICONOSCIMENTO GESTI STATICI
Rifacendoci allo schema di sopra, notiamo che dopo aver acquisito il frame, abbiamo i seguenti passaggi:
1. Skin Detection: ci si avvale di una conversione nello spazio dei colori, passando dall’RGB, in HSV
(descritto in appendice: Spazio HSV), spazio meno sensibile alla luminanza. Dopo la conversione, si
sostituisce con un pixel bianco ogni pixel il cui valore in ognuno dei tre canali H, S, e V, è sinonimo di
possibile presenza di pelle, mentre un pixel nero lo si sostituisce a tutti gli altri non verificanti la
condizione. Si noti come dalla figura il volto non viene riconosciuto come pelle, questo è ottenuto
utilizzando a monte un face detector, l’haarcascade (descritto in appendice: Il classificatore di Haar), il
quale, riconosciuto il volto, mi permette di oscurarlo, ponendoci sopra un rettangolo completamente
di Dario D'Ambruoso
11
GRI: Gestures Recognition Interface
Capitolo 2: Progettazione - Riconoscimento dei comandi statici
nero, questa preelaborazione mi consente di evitare problemi, e quindi confondere il volto con le mani.
Ancora, a monte di tutto questo applico un filtro blur, per ripulire il frame dal rumore, che a causa del
mio pessimo sensore, è visibilissimo nelle immagini colorate, rispetto a quella binarizzata;
h_max = 20;
h_min = 0;
s_max = 150;
s_min = 30;
v_max = 255;
v_min = 80;
Mat Kernel(Size(3, 3), CV_8UC1);
Kernel.setTo(Scalar(1));
cvtColor(frame,this->hsv,CV_BGR2HSV,3);
inRange(this->hsv,hsv_min, hsv_max, this->img2);
dilate(this->img2, this->img2, Kernel,Point(-1,-1), 1);
medianBlur(this->img2,this->img2, 3);
Si nota dal frammento codice riportato come vengano settati i valori massimi e minimi per ognuno dei 3
canali dello spazio HSV, e che dopo la conversione, si verifica che ogni singolo pixel appartenga a quel
dominio. Si può anche notare come, per evitare di ottenere contorni aperti, e che non delimitassero
bene la mano, a causa della variabilità della luce, e del colore della pelle, vi è anche un ciclo di
dilatazione con un kernel 3x3;
2. Hand recognition: in questa fase il frame viene processato a caccia delle mani, quindi si ricercano le
aree più grandi maggiormente connesse, per cui tutto il rumore dovuto, in questo caso alla mia
maglietta, o ad una piccola porzione di collo visibile, sarà escluso, ed ad essere contornate, saranno
proprio le mani. Oltre a riconoscere le mani, in questa fase, si studiano le convessità, e le concavità del
contorno tracciato, con il fine ultimo di contare le dita mostrate. Se queste risultano ben separate,
saranno riconosciute, altrimenti, saranno identificate come un unico dito;
…
…
…
cvCanny(img, img, 1, 3, 5);
cvFindContours( img, storage, &contours, sizeof(CvContour),
CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );
…
…
…
hull = cvConvexHull2( &handContourn, storage2,
CV_COUNTER_CLOCKWISE, 0);
def = cvConvexityDefects( &handContourn, hull, storage3 );
…
…
…
…
gestures[i].score=cvMatchShapes( &handContourn, gestures[i].shape
, 2, 0 );
…
…
…
reco=i;
3. Gestures recognition: a questo punto il carico una serie di template, riportati qui di seguito, ne
prelevo i contorni, e a tutti i contorni, inclusi quelli reali relativi al frame attuali, applico i momenti di
Hu (descritti in appendice), a questo punto otterrò uno score, per ogni confronto fra i reali ed i
di Dario D'Ambruoso
12
GRI: Gestures Recognition Interface
Capitolo 2: Progettazione - Riconoscimento dei comandi statici
template. Seleziono i cinque con score migliore, e verifico che fra questi vi sia una possibile soluzione, e
fra le possibili prelevo quella con score migliore. Per possibile soluzione intendo che verifico che fra i
template selezionati, ve ne sia almeno uno con lo stesso numero di dita calcolato in real time. Questa
logica mi permette di rendere ancora più robusto il riconoscimento dei comandi statici.
FIGURA 14: TEMPLATE
di Dario D'Ambruoso
13
GRI: Gestures Recognition Interface
Capitolo 2: Progettazione - Interazione
INTERAZIONE
Il funzionamento dell’applicativo risulta essere abbastanza intuitivo. Per renderlo robusto, si è pensato di
separare il comando statico dal comando dinamico, ovvero, non appena il comando statico viene riconosciuto
(l’utente lo può notare dall’accensione della relativa “icona”) non si è più vincolati a mantenere le mani nella
“forma” relativa al comando, ma si è liberi, anche di muoverle nello spazio per realizzare la dinamica e
l’interazione effettiva. Fino a quando l’utente non mostrerà il gesto di “reset”, che consentirà al sistema di
sbloccare la ricerca relativa al comando statico, facendola quindi riprendere fino al riconoscimento del
comando successivo. Il sistema è in grado di riconoscere ben 13 geti per mano, fornendo dunque 2 ∗ 13 = 26
comandi statici possibili, anche se si è scelto di realizzarne solo 6 per scopo esclusivamente dimostrativo. In
oltre il sistema potrebbe essere arricchito di altri gesti, che non si sono considerati, ampliando ulteriormente il
numero di comandi possibili di un fattore 2 per ogni gesto in più. Si riportano di seguito i gesti riconosciuti.
FIGURA 15: COMANDI STATICI RICONOSCIUTI
di Dario D'Ambruoso
14
GRI: Gestures Recognition Interface
Capitolo 3: Implementazione - Introduzione
CAPITOLO 3: IMPLEMEN TAZIONE
INTRODUZIONE
In questo capitolo vengono presentanti alcuni dettagli tecnici sull'implementazione dell'algoritmo di
riconoscimento dei gesti. L'algoritmo sviluppato in questo lavoro è stato implementato utilizzando il linguaggio
di programmazione C++. Dopo aver presentato gli strumenti utilizzati per lo sviluppo, vengono introdotte, le
altre librerie utilizzate. Quasi l'intero processo di sviluppo del tema è stato portato avanti con strumenti di
lavoro open source. Infatti si è scelto di utilizzare un sistema operativo di tipo GNU/Linux e altri applicativi
liberi come Qt Creator per lo sviluppo software.
GNU LINUX
GNU/Linux è un sistema operativo libero di tipo Unix (o Unix-like), distribuito con licenza GNU/GPL, costituito
dall'integrazione del kernel Linux all'interno del sistema GNU (acronimo ricorsivo che sta per Gnu is Not Unix).
La forma Linux (senza prefisso "GNU/") è ritenuta da alcuni scorretta perché si limita a indicare il solo kernel.
Un sistema GNU/Linux include il principale software GNU e molti altri pacchetti, ad esempio l'X-Window
System e TEX, che non sono software GNU, e alcuni programmi e librerie provenienti dal progetto BSD. La
presenza di una soluzione del genere ha permesso di colmare la lacuna lasciata da HURD, il kernel sviluppato in
seno al progetto GNU, che non è riuscito ad arrivare a uno stadio di completezza soddisfacente. Fino a poco
tempo fa (e in alcune distribuzioni ancora oggi), chi utilizzava GNU/Linux doveva possedere una solida cultura
informatica di base ed essere in grado all'occorrenza di installare, configurare e aggiornare autonomamente il
proprio sistema. Con l'adozione del sistema da parte di molte aziende sono stati creati programmi di
installazione e manutenzione che non richiedono conoscenze tecniche così approfondite per l'utilizzo di
GNU/Linux; questi programmi hanno aperto la strada all'ingresso di GNU/Linux all'interno del mercato
desktop. Esistono distribuzioni che si avviano da CD (detti Live CD) e che funzionano senza bisogno di
installazione su disco fisso, come ad esempio Knoppix e Morphix. Sono stati poi creati sistemi di avvio da rete o
(per un uso limitato, ad esempio per ripristinare un sistema non funzionante) da dischetto floppy. GNU/Linux è
anche un componente indispensabile del software per server LAMP che ha raggiunto un'ampia popolarità tra
gli sviluppatori web. Con l'evoluzione di ambienti desktop come KDE e GNOME, il sistema offre una interfaccia
grafica simile per facilità e comodità d'uso a quella di Microsoft Windows o di Mac OS X, più vicina alle esigenze
degli utenti meno esperti, rendendo il passaggio da un sistema all'altro meno traumatico e garantendo
un'elevata personalizzabilità dell'interfaccia.
FIGURA 16: UBUNTU TUX LOGO
La distribuzione utilizzata nel lavoro di questa tesi è stata Ubuntu 10.10 64bit.
di Dario D'Ambruoso
15
GRI: Gestures Recognition Interface
Capitolo 3: Implementazione - Ambiente di sviluppo
AMBIENTE DI SVILUPPO
Qt Creator da pronunciare "cute" creator, appunto, è l’ambiente di sviluppo software di Nokia basato su un
insieme di librerie multipiattaforma e multipourpose, si va dalle librerie di gestione delle GUI fino a quelle per i
database passando per network, animazioni e multithread. Originariamente sviluppato dalla Norvegese
Trolltech (acquistata da Nokia nel 2008) permette lo sviluppo di applicazioni per Ms Windows, UNIX/Linux,
Mac OS X, Embedded Linux, Windows CE/Mobile, Symbian e presto anche Maemo. I linguaggi di
programmazione più comunemente impiegati sono C++ e Python. Sono inoltre disponibili diversi bindings per
altri linguaggi.
FIGURA 17: QT CREATOR LOGO
Qt-Italia.org è il sito della community Qt in lingua italiana, i cui principali obiettivi sono: creare un luogo di
incontro tra chi sviluppa, usa e gestisce progetti che impiegano il Qt Application Framework, diffondere la
filosofia Open Source, contribuire alla traduzione delle librerie e strumenti di sviluppo software Qt, eseguire il
porting su nuove piattaforme e promuovere chi realizza soluzioni innovative.
di Dario D'Ambruoso
16
GRI: Gestures Recognition Interface
Capitolo 3: Implementazione - OpenCv
OPENCV
Per l’elaborazione delle immagini, l’interfacciamento con il sensore, e qualsiasi altra cosa inerente ad esse, si è
utilizzata la libreria OpenCV.
FIGURA 18: OPENCV LOGO
Questa è strutturata in cinque sott o librerie ( dette anche moduli) ciascuna co n funzionalità specifiche. Il
modulo CXCORE è quello principale nonché indispensabile. Contiene le strutture dati di base con le rispettive
funzioni di inizializzazione, le funzioni matematiche, le f unzioni di lettura, scrittura e memorizzazione dati, le
funzioni di sistema e di gestione degli errori. Il modulo CV contiene le funzioni relative all’image processing, le
funzioni di analisi strutturale e del moto, di object detection e ricostruzione 3D. HIGHG UI contiene le funzioni G
UI e quelle di salvataggio e caricamento immagini, nonché le funzioni di acquisizione video e di g est io ne delle
telecamere. Il modulo ML ( Machine Learning ) cont iene classi e funzioni relative a ll’implementazione e
gestione di reti neurali, in particolare di tipo multilayer perceptrons ( MPL ), di classificazione statistica e
clustering di dati. Infine vi è il modulo CVAUX che contiene sia le funzioni basate su algoritmi ancora in fase di
sperimentazione, il cui futuro è quello di migrare nel modulo CV, e sia le funzioni considerate obsolete e quindi
non più supportate. Le funzionalità di tale modulo sono rivolte alla corrispondenza stereo, al tracking 3D, al
riconoscimento degli oggetti.
di Dario D'Ambruoso
17
GRI: Gestures Recognition Interface
Capitolo 3: Implementazione - OpenGL
OPENGL
Per la gestione degli oggetti 3D ho utilizzato le librerie OpenGL, dopo aver attivato il supporto delle stesse in Qt.
OpenGL (Open Graphics Library) è una specifica che definisce una API per più linguaggi e per più piattaforme
per scrivere applicazioni che producono computer grafica2D e 3D. L'interfaccia consiste in circa 250 diverse
chiamate di funzione che si possono usare per disegnare complesse scene tridimensionali a partire da semplici
primitive. Sviluppato nel 1992 dalla Silicon Graphics Inc., è ampiamente usato nell'industria dei videogiochi
(nella quale compete con DirectX su Microsoft Windows), per applicazioni di CAD, realtà virtuale, e CAE. È lo
standard di fatto per la computer grafica 3D in ambiente Unix.
FIGURA 19: OPENGL LOGO
OpenGL assolve a due compiti fondamentali:
 nascondere la complessità di interfacciamento con acceleratori 3D differenti, offrendo al
programmatore una API unica ed uniforme;
 nascondere le capacità offerte dai diversi acceleratori 3D, richiedendo che tutte le implementazioni
supportino completamente l'insieme di funzioni OpenGL, ricorrendo ad un'emulazione software se
necessario.
Il compito di OpenGL è quello di ricevere primitive come punti, linee e poligoni, e di convertirli in pixel
(rasterizing o rasterizzazione). Ciò è realizzato attraverso una pipeline grafica nota come (EN) OpenGL state
machine. La maggior parte dei comandi OpenGL forniscono primitive alla pipeline grafica o istruiscono la
pipeline su come elaborarle. Prima dell'introduzione di OpenGL 2.0, ogni stadio della pipeline realizzava una
funzione fissa ed era configurabile solo entro certi limiti, ma dalla versione 2.0 molti stadi sono totalmente
programmabili attraverso il linguaggio GLSL. OpenGL è una API procedurale che opera a basso livello, che
richiede al programmatore i passi precisi per disegnare una scena. Questo approccio si pone in contrasto con le
API descrittive ad alto livello le quali, operando su struttura dati ad albero (scene graph), richiedono al
programmatore solo una descrizione generica della scena, occupandosi dei dettagli più complessi del
rendering. La natura di OpenGL obbliga quindi i programmatori ad avere una buona conoscenza della pipeline
grafica stessa, ma al contempo lascia una certa libertà per implementare complessi algoritmi di rendering.
di Dario D'Ambruoso
18
GRI: Gestures Recognition Interface
Capitolo 3: Implementazione - Interfaccia Grafica
INTERFACCIA GRAFICA
L'interfaccia grafica è stata realizzata con l'uso della libreria Qt.
FIGURA 20: QT LIB LOGO
Qt è una libreria multi piattaforma per lo sviluppo di programmi con interfaccia grafica tramite l'uso di widget.
Qt. Qt, come detto precedentemente si dovrebbe pronunciare come l'inglese cute, cioè "carino". La pronuncia in
grafia italiana è chiùt, anche se la pronuncia più intuitiva cuttì non è rara (parallelamente, esiste la pronuncia
inglese chiuttì). Qt usa una versione estesa del linguaggio C++, ma esistono interfacce per Java, Python, C e Perl.
Gira sulle piattaforme principali ed integra funzioni per l'accesso ai database SQL, parsing di documenti XML ed
API multi piattaforma per l'uso dei file. Le librerie Qt sono disponibili per queste piattaforme:
 Qt/X11 per X Windows System (GNU/Linux);
 Qt/Mac per Mac OS X di Apple;
 Qt/Windows per Microsoft Windows;
 Qt/Embedded per piattaforme embedded (palmari e simili).
Attualmente vengono offerte quattro edizioni, disponibili per ciascuna delle piattaforme:
 Qt Console: versione embedded per lo sviluppo senza interfaccia grafica;
 Qt Desktop Light: versione base per applicazioni con interfaccia grafica, senza supporto rete e SQL;
 Qt Desktop: la versione complete;
 Qt Open Source Edition: la versione completa, per sviluppo di software libero.
L'edizione utilizzata è stata ovviamente la Open Source Edition, versione 4.8.0.
di Dario D'Ambruoso
19
GRI: Gestures Recognition Interface
Capitolo 4: Conclusioni - Considerazioni
CAPITOLO 4: CONCLUSIONI
CONSIDERAZIONI
Molteplici sono le considerazioni che si possono fare per quello che è stato detto sin qui. Innanzi tutto testando
l’applicativo in diverse condizioni, si è verificato che il limite massimo che esso presenta è la luminosità, ma mi
sembra del tutto giusto essendo un’applicazione di computer vision, è del tutto normale. D’altro canto posso
asserire che il sistema è molto robusto, perché nonostante la scarsissima qualità del sensore, oltre allo stato di
usura completa dello stesso, causa dell’eccessivo rumore nelle riprese, l’applicativo ne risente pochissimo.
Sicuramente uno degli sviluppi futuri potrebbe essere relativo alla sostituzione completa dell’oggetto 3D
interno GUI con un vero e proprio applicativo di CAD. Si è provato anche ad utilizzare i gesti per simulare lo
spostamento del mouse e i click dello stesso, interfacciandosi direttamente con le X11 lib, tuttavia i notevoli
problemi riscontrati, causa del sistema operativo hanno reso impossibile l’implementazione completa.
GUI
La GUI molto intuitiva si presenta come segue.
FIGURA 21: VISIONE GLOBALE DELL'INTERFACCIA
Nella quale distinguiamo le seguenti aree che andremo a descrivere di seguito:
di Dario D'Ambruoso
20
GRI: Gestures Recognition Interface
Capitolo 4: Conclusioni - GUI
FIGURA 22: GUI - FRAME AREA
Un’area in cui sono mostrati i frame in real-time, con in evidenza i contorni delle mani, se riconosciuti.
FIGURA 23: GUI - STATISTICS AREA
Un’area in cui vengono visualizzate le statistiche sull’occupazione, e dimensione del buffer, oltre che alla
risoluzione di cattura, processing, e capture rate. Inoltre vi è anche un pulsante per svuotare manualmente il
buffer.
FIGURA 24: GUI - INTERACTIVE AREA
Una serie di pulsanti, inteliggentemente organizzati:
1. Open Cam: aprire la cam;
2. Close Cam: chiudere la cam;
3. Settings: apre una dialog della quale parlerò in seguito;
4. Find: attivare e disattivare il ritrovamento delle mani;
5. Navig ON/OF: attivare e disattivare la navigazione dell’oggetto 3D;
6. About: avere informazioni relative alla versione dell’applicazione, e l’autore;
7. Exit: chiudere l’applicazione ed uscire;
Nello specifico sono settate le seguenti regole, gli unici pulsanti sempre attivi sono il 6 ed il 7, mentre l’1 viene
disattivato alla pressione, perché è possibile avere aperta una sola istanza di cam per volta, nel momento in cui
la cam viene aperta quindi, i pulsanti inibiti 2, 3, e 4, sono attivati, questo non accade per il 5, che viene attivato
solo quando è attivo il ritrovamento delle mani, quindi è stato premuto il 4. Cliccando sul 3 si aprirà una dialog,
come quella mostrata in figura, con i valori di default che realizzano lo skin detection. L’utente potrà variare tali
valori, per rendere il detector funzionante in quasi tutte le condizioni di luce.
di Dario D'Ambruoso
21
GRI: Gestures Recognition Interface
Capitolo 4: Conclusioni - GUI
FIGURA 25: GUI - DIALOG
nel momento in cui la dialog si apre, immediatamente nella Frame area, viene visualizzato il risultato dello skin
detection come mostrato di seguito
FIGURA 26: GUI - FRAME AREA CON SKIN DETECTION
le variazioni che l’utente esegue nei settaggi, producono un risultato in tempo reale, ponendo lo stesso in
condizione di decidere se il settaggio è soddisfacente, e quindi applicarlo premendo il pulsante “OK”, oppure,
annulare premendo “Cancel”.
FIGURA 27: GUI - 3D AREA
Un’area in cui sono visualizzati oggetti in 3D e le relative azioni (realizzate con le mani), in tempo reale.
di Dario D'Ambruoso
22
GRI: Gestures Recognition Interface
Capitolo 4: Conclusioni - GUI
FIGURA 28: GUI - ACTION AREA
Un’area con l’elenco dei comandi previsti dal sistema, con relativa spiegazione. Il comando attivato, sarà
evidenziato dal colore verde, per cui l’utente avrà sempre un feedback, oltre che sull’oggetto 3D, anche sull’area
comandi.
FIGURA 29: GUI - GESTURES AREA (DEFAULT)
Un area in cui verrà evidenziato il comando statico riconosciuto, se riconosciuto, oppure se non riconosciuto un
punto interrogativo. Oltre a questo nell’area centrale l’utente viene informato se il tool è a “caccia” del comando
dinamico, presentando come in figura un’animazione di ricerca, oppure se il comando statico è stato
riconosciuto, e si sta eseguendo l’azione con un’altra animazione.
FIGURA 30: GUI - GESTURES AREA (WATING FOR COMMAND)
di Dario D'Ambruoso
23
GRI: Gestures Recognition Interface
Capitolo 4: Conclusioni - Risultati
RISULTATI
L’ottimo lavoro svolto è ben visibile dalle seguenti immagini che rappresentano il tool in funzione.
FIGURA 31: TOOL IN FUNZIONE ROTAZIONE X
Si noti la rotazione rispetto all’ase x, ottenuta dopo il riconoscimento del gesto in evidenza nell’area dei
comandi. Ancora, si veda l’oggetto 3D, nello specifico un bicchiere contenente del cappuccino, ruotare in
funzione della posizione delle mani, nonostante i gesti statici non siano riconosciuti. Si noti che nonostante il
rumore del sensore sia elevatissimo, l’oggetto 3D riproduce fedelmente i movimenti realizzati.
FIGURA 32: TOOL IN FUNZIONE ROTAZIONE Z
di Dario D'Ambruoso
24
GRI: Gestures Recognition Interface
Capitolo 4: Conclusioni - Risultati
FIGURA 33: TOOL IN FUNZIONE TRASLAZIONE
In questa immagine si nota come l’oggetto 3D viene traslato nello spazio, seguendo anche in questo caso il
comando dinamico, dopo aver attivato l’opportuno comando statico, evidenziato nell’apposita area.
di Dario D'Ambruoso
25
GRI: Gestures Recognition Interface
Capitolo 5: Appendice - Spazio HSV
CAPITOLO 5: APPENDICE
SPAZIO HSV
Uno spazio di colore è un insieme di colori che può essere visualizzato o riconosciuto da un dispositivo di
ingresso o di uscita (come un digitalizzatore, un monitor, una stampante, ecc.). I colori di uno spazio di colore
sono specificati come valori in un sistema di spazio di colore, che consiste nei valori di coordinate sui vari assi.
Data la struttura dell'occhio umano, ci sono tre assi nello spazio di colore, pensati per l'osservatore umano.
L'applicazione pratica di ciò è che i colori sono solitamente specificati con tre componenti (con alcune
eccezioni). I sistemi di spazi di colore in uso sono tra i 30 e 40 circa. Alcuni esempi tra i più importanti sono:
 RGB;
 HSV;
 CMY(K);
 YUV;
 YCbCr.
Lo spazio HSV è una trasformazione dello spazio RGB che descrive in modo più naturale il colore. Il nome HSV
significa Hue, Saturation, Value. Lo spazio può essere rappresentato mediante un singolo e doppio cono, come
mostrato in figura. La principale differenza, consiste nel fatto che in questo modello il massimo valore di
saturazione ottenibile dipende dal valore di luminosità.
FIGURA 34: RAPPRESENTAZIONE DELLO SPAZIO DEI COLORI HSV
di Dario D'Ambruoso
26
GRI: Gestures Recognition Interface
Capitolo 5: Appendice - Spazio HSV
TONALITÀ
Questo è il colore in sé, che risulta dalla combinazione di colori primari. Tutte le gradazioni (eccetto per i livelli
di grigio) sono rappresentate in un cerchio cromatico: giallo, blu, e anche porpora, arancio, ecc. Il cerchio
cromatico (o «ruota cromatica») ha valori che spaziano tra 0° e 360° (il termine «colore» viene spesso usato al
posto di «tonalità». I colori RGB sono «colori primari»).
SATURAZIONE
Questo valore descrive quanto è pallido un colore. Un colore completamente desaturato è una tonalità di grigio.
Con l'aumento della saturazione, il colore diventa più simile a una tinta pastello. Un colore completamente
saturo è puro. Il valore di saturazione varia da 0 a 100, da bianco al colore puro.
VALORE
Questo valore descrive l'intensità luminosa. È il quantitativo di luce emessa da un colore. Quando si aumenta la
luminosità del proprio schermo del computer oppure quando un oggetto colorato viene spostato da una zona in
ombra ad una zona sotto il sole, si può notare un cambio di luminosità. I valori vanno da 0 a 100. I valori del
pixel nei tre canali esprimono anch'essi una luminosità: «valore» nel modello di colore HSV è il massimo di
questi valori elementari nello spazio RGB (scalato da 0 a 100).
di Dario D'Ambruoso
27
GRI: Gestures Recognition Interface
Capitolo 5: Appendice - Il classificatore di Haar
IL CLASSIFICATORE DI HAAR
Il classificatore Haar Cascade realizza un object detector basato sulle features di Haar. Esso è stato descritto
inizialmente da Paul Viola ed in seguito perfezionato da Rainer Lienhart. Il funzionamento parte da un
classificatore (per l’esattezza una cascata di classificatori elementari che lavorano sulle features Haar_like), che
viene addestrato con alcune centinaia di campioni di un particolare oggetto (ad esempio un volto o una
autovettura) detti esempi positivi, che vengono scalati alle stesse dimensioni, ad esempio 20x20, e con esempi
negativi, ovvero immagini delle stessa dimensioni dei campioni positivi, ma che non contengono l’item da
ricercare. Una volta addestrato il classificatore esso può essere utilizzato ad una regione di interesse in una
immagine (delle stesse dimensioni utilizzate in fase di addestramento). Il classificatore restituisce un 1 se la
regione presenta con alte probabilità l’item ricercato, 0 altrimenti. Per effettuare la ricerca di un oggetto in una
immagine si può operare facendo scorrere la finestra di ricerca lungo l’immagine, ed effettuando il controllo in
ogni posizione raggiunta utilizzando il classificatore. Esso viene progettato in modo da poter essere
agevolmente configurato per la ricerca dell’oggetto con dimensioni differenti. Questo tipo di approccio è
sicuramente più agevole che ricorrere ad un continuo resizing dell’immagine (il che richiederebbe una
iterazione della procedura di scansione a differenti scale). Il termine Cascade (cascata) sta ad indicare che il
classificatore consiste in stage di classificazione più semplici che vengono applicati in modo sequenziale su una
ROI fino a quando ad un certo livello l’immagine candidata viene rigettata o fino a quando tutti gli stage
vengono superati con esito positivo. La parola "potenziato" significa che i classificatori in ogni fase della cascata
sono essi stessi strutture complesse e sono costituiti da classificatori di base utilizzando una tra quattro diverse
tecniche di potenziamento (utilizzando una metodica di voto ponderato). L'algoritmo attuale per il
riconoscimento di oggetti in un’immagine combina quattro componenti chiave [7]:
1. Le features Haar like [8]:
FIGURA 35: FEATURES HAAR-LIKE
di Dario D'Ambruoso
28
GRI: Gestures Recognition Interface
Capitolo 5: Appendice - Il classificatore di Haar
2. L’immagine integrale per un rapido ritrovamento delle features. Per determinare la presenza o
l’assenza di centinaia di features di Haar in ogni punto dll’immagine, anche con fattori di scala differenti
Viola e Jones usano la tecnica già citata dell’immagine integrale. In generale, integrare, significa
sommare piccole unità assieme, nello specifico, in questo caso, le unità sono i pixel. per ogni pixel, il
valore integrale è la somma di tutti i pixel che si trovano sopra, e alla sua sinistra. quindi si parte da in
alto a sinistra, e si prosegue verso il basso a destra, ottenendo l’immagine integrale in pochi passaggi;
FIGURA 36: IMMAGINE INTEGRALE
3. Il metodo AdaBoost. Questo metodo di machine – learning è usato per selezionare quali features usare,
e con quale livello di sogliatura;
4. Una cascata di classificatori per combinare più efficentemente le features. Per ultimo Viola e Jones
combinano una serie di classificatori AdaBoost come una catena di filtri. Ogni filtro di tale catena quindi
è esso stesso un classificatore AdaBoost debole. Questi filtri sono settatati al valore minimo tale da
consentire la classificazione di tutti i volti presenti nel training set. Qualora una sotto - regione non
passi uno solo di questi, sarà classificata come non volto, viceversa accadrà se li supera tutti. L’ordine
dei filtri non è casuale, ma in relazione all’importanza assegnata dallo stesso AdaBoost;
FIGURA 37: CASCATA DI CLASSIFICATORI ADABOOST
di Dario D'Ambruoso
29
GRI: Gestures Recognition Interface
Capitolo 5: Appendice - Il classificatore di Haar
Essenzialmente il funzionamento è riassumibile attraverso i seguenti punti:
1. Attraverso un training set viene generato un descrittore delle variazioni di contrasto più comuni per un
particolare oggetto nel mio caso un volto (contrasto e orientamento);
2. Tale descrittore, che intrinsecamente ha una sua dimensione (quella delle immagini con le quali è stato
creato), viene fatto scorrere sull’immagine da identificare ridimensionandolo ad ogni passaggio (in
modo da ‘intercettare’ possibili oggetti anche di dimensioni diverse rispetto a quelle del training set);
3. Il descrittore presenta a sua volta una struttura ‘incrementale’ nella quale esso è composto da una
sequenza di filtri che vengono verificati in sequenza sulla regione di interesse finche un filtro non
fallisce o tutti i filtri passano, certificando in questo modo il match.
4. Ogni filtro è, concludendo, creato da una serie di operazioni basilari, che vengono anch’esse applicate in
sequenza sulla regione di interesse; il risultato in questo caso è misurato pesando i risultati delle
singole operazioni.
di Dario D'Ambruoso
30
GRI: Gestures Recognition Interface
Capitolo 5: Appendice - I momenti di Hu
I MOMENTI DI HU
I momenti sono un'intera famiglia di caratteristiche di un'immagine, sono uno strumento potentissimo usato in
ogni campo scientifico in cui si abbia che fare con una distribuzione spaziale di un oggetto con proprietà locali
quali la densità di massa (in meccanica), i toni di grigio (nel nostro caso), la densità di carica, ...
Consideriamo l’immagine binaria (𝑛𝑟 · 𝑛𝑐 )
= 1 𝑠𝑒 (𝑖, 𝑗) ∈ ℝ
𝐹(𝑖, 𝑗) {
= 1 𝑠𝑒 (𝑖, 𝑗) ∉ ℝ
Si definisce momento 𝑚𝑛 − 𝑒𝑠𝑖𝑚𝑜 dell’immagine la grandezza
𝑛𝑟 −1 𝑛𝑐 −1
𝑀𝑚𝑛 = ∑ ∑ 𝑖 𝑚 𝑗 𝑛 𝐹(𝑖, 𝑗)
𝑖=0 𝑗=0
con 𝑚, 𝑛 ≥ 0. La quantità 𝑚 + 𝑛 `e detta ordine del momento.
Se l’immagine contiene un solo oggetto i momenti sono proprietà legate alla forma dell’oggetto. Alcuni momenti
corrispondono a proprietà ben note:
𝑛𝑟 −1 𝑛𝑐 −1
(Area)
𝑀00 = ∑ ∑ 𝑖 𝑚 𝑗 𝑛 𝐹(𝑖, 𝑗) = 𝐴
𝑖=0 𝑗=0
𝑛𝑟 −1 𝑛𝑐 −1
𝑀10 = ∑ ∑ 𝑖𝐹(𝑖, 𝑗) ⇒
𝑖=0 𝑗=0
𝑛𝑟 −1 𝑛𝑐 −1
𝑀01 = ∑ ∑ 𝑖𝐹(𝑖, 𝑗) ⇒
𝑖=0 𝑗=0
𝑛𝑟 −1 𝑛𝑐 −1
𝑀10
= 𝑖𝑏
𝑀00
(Coordinata 𝑖 del baricentro)
𝑀01
= 𝑗𝑏
𝑀00
(Coordinata 𝑗 del baricentro)
(Momento d’inerzia rispetto all’asse 𝑗)
𝑀20 = ∑ ∑ 𝑖 2 𝐹(𝑖, 𝑗) = 𝐼𝑗
𝑖=0 𝑗=0
𝑛𝑟 −1 𝑛𝑐 −1
(Momento d’inerzia rispetto all’asse 𝑖)
𝑀02 = ∑ ∑ 𝑗 2 𝐹(𝑖, 𝑗) = 𝐼𝑖
𝑖=0 𝑗=0
𝑛𝑟 −1 𝑛𝑐 −1
(Momento di deviazione)
𝑀11 = ∑ ∑ 𝑖𝑗𝐹(𝑖, 𝑗) = 𝐼𝑖
𝑖=0 𝑗=0
Si può dimostrare che l’insieme (infinito) dei momenti determina univocamente la forma dell’oggetto. È
possibile quindi utilizzare i momenti come descrittori di forma e distinguere oggetti aventi forma diversa sulla
base di un sotto-insieme, opportunamente determinato, dell’insieme dei momenti. I momenti precedentemente
definiti non sono invarianti rispetto alla traslazione (quanto più l’oggetto si allontana dall’origine tanto
maggiori sono i valori dei momenti). È possibile ottenere dei momenti invarianti rispetto alla traslazione, che
vengono detti momenti centrali, considerando un sistema di riferimento baricentrico:
𝑛𝑟 −1 𝑛𝑐 −1
′
𝑀𝑚𝑛
= ∑ ∑ (𝑖 − 𝑖𝑏 )𝑚 (𝑗 − 𝑗𝑐 )𝑛 𝐹(𝑖, 𝑗)
𝑖=0 𝑗=0
I momenti centrali non sono però invarianti rispetto alla rotazione: si pensi ad esempio ai due momenti
d’inerzia che sono minimo e massimo quando l’asse maggiore dell’oggetto coincide con uno dei due assi del
sistema di riferimento dell’immagine. I momenti centrali possono quindi essere usati come descrittori di forma
solo se l’orientamento degli oggetti è fisso. Per ottenere dei momenti invarianti rispetto alla rotazione è
necessario considerare un sistema di riferimento (detto Riferimento Principale) orientato secondo gli assi
(maggiore e minore) dell’oggetto. Questo approccio però richiede la determinazione univoca del riferimento
principale, mentre l’asse maggiore definisce l’orientamento dell’oggetto solo a meno di una rotazione di 180
gradi. Inoltre, in aggiunta all’invarianza rispetto alla rotazione si desidera sovente anche quella rispetto allo
scaling. Hu ha dimostrato che a partire dai momenti centrali è possibile definire dei descrittori che risultano
di Dario D'Ambruoso
31
GRI: Gestures Recognition Interface
Capitolo 5: Appendice - I momenti di Hu
essere invarianti rispetto a traslazione, rotazione, e scaling. Viene prima definita una normalizzazione dei
momenti centrali:
′
𝑚+𝑛
𝑀𝑚𝑛
∝=
+1
𝑉𝑚𝑛 =
2
(𝑀00 )𝛼
Quindi a partire dai momenti centrali normalizzati di definiscono gli invarianti:
Hu dimostra l’invarianza degli ℎ𝑖 rispetto a traslazione, rotazione e scaling nel caso continuo. Nell’applicazione
pratica su immagini digitali queste grandezze si dimostrano generalmente ragionevolmente costanti per
versioni modificate di una stessa forma. Le variazioni degli ℎ𝑖 sono dovute agli inevitabili errori di
discretizzazione. In realtà in questo lavoro si è usata una funzione di edge match, descritta in [9], essa misura la
similarità tra due contorni, A, e B. Quindi il metodo restituirà una misura pari a:
Con:
nello specifico ℎ𝑖𝐴 ed ℎ𝑖𝐵 rappresentano l’i-esimo momento di A e l’i-esimo momento di B, ed ovviamente 𝑖 =
[1,2,3,4,5,6,7]
di Dario D'Ambruoso
32
GRI: Gestures Recognition Interface
Capitolo 5: Appendice - Procedura per la compilazione e i settaggi d’ambiente
PROCEDURA PER LA COMPILAZIONE E I SETTAGGI D’AMBIENTE
Per quanto riguarda le OpenCV, prima di tutto occorre installare le dipendenze e i pacchetti utili, lanciando i
seguenti comandi da shell:
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
sudo
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
apt-get
install
install
install
install
install
install
install
install
install
install
install
install
install
install
install
install
install
install
install
install
update
build-essential
libgtk2.0-dev
pkg-config
libjpeg62-dev
libtiff4-dev
libjasper-dev
libopenexr-dev
cmake
cmake-gui
python-dev
python-numpy
libtbb-dev
libtbb2
libeigen2-dev
yasm libfaac-dev
libopencore-amrnb-dev
libopencore-amrwb-dev
libtheora-dev
libvorbis-dev
libxvidcore-dev
Dopo aver verificato che ogni comando precedente sia andato a buon fine, scaricare ed installare le FFMPEG,
lanciando i seguenti comandi:
wget http://ffmpeg.org/releases/ffmpeg-0.7-rc1.tar.gz
tar -xvzf ffmpeg-0.7-rc1.tar.gz
cd ffmpeg-0.7-rc1
./configure --enable-gpl --enable-version3 --enable-nonfree --enablepostproc --enable-libfaac --enable-libopencore-amrnb --enablelibopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libxvid
--enable-x11grab --enable-swscale --enable-shared
make
sudo make install
A questo punto installare le OpenCV, scaricare la versione 2.2 utilizzata in questo lavoro, al seguente link
http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.2/ , quindi decomprimere fil file, e
lanciare i seguenti comandi
mkdir release
cd release
sudo cmake-gui
dalla gui del cmake, selezionare i supporti desiderati, configurare, e generare il file make, in figura sono
mostrato i pulsanti premere, ed gli eventuali path, viceversa per i supporti dipende dall’utente
di Dario D'Ambruoso
33
GRI: Gestures Recognition Interface
Capitolo 5: Appendice - Procedura per la compilazione e i settaggi d’ambiente
Qui sarà inserito il percorso
dei file da compilare
Qui sarà inserito il percorso
in cui fare la build, nel nostro
caso sarà la cartella release,
creata precedentemente
Cliccare per generare il file
make
Cliccare la prima volta per avere la lista dei
supporti, apporre la spunta ai desiderati, e ricliccare
FIGURA 38: CMAKE-GUI ESEMPIO
ritornare al terminale, e lanciare i seguenti comandi:
make
quindi sul terminale vedremo una sequenza del tipo:
FIGURA 39: TERMINALE INIZIO MAKE
al termine dell’esecuzione del make, sul terminale apparirà la seguente situazione:
di Dario D'Ambruoso
34
GRI: Gestures Recognition Interface
Capitolo 5: Appendice - Procedura per la compilazione e i settaggi d’ambiente
FIGURA 40: TERMINALE FINE MAKE
come mostrato in figura, occorrerà lanciare il seguente comando:
sudo make install
a questo punto sul teminale avremo:
FIGURA 41: TERMINALE MAKE INSTALL
sudo gedit /etc/ld.so.conf.d/opencv.conf
si aprirà una finestra come quella mostrata in figura, scrivere all’interno del file .conf la seguente stringa
/usr/local/lib
salvare.
di Dario D'Ambruoso
35
GRI: Gestures Recognition Interface
Capitolo 5: Appendice - Procedura per la compilazione e i settaggi d’ambiente
FIGURA 42: OPENCV.CONF ESEMPIO DI EDITAZIONE
Tornare al terminale, e lanciare:
sudo ldconfig
sudo gedit /etc/bash.bashrc
apparirà una finestra del tipo riportata in figura:
FIGURA 43: BASH.BASHRC ESEMPIO DI EDITAZIONE
scrivere le seguenti stringhe:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
e salvare.
di Dario D'Ambruoso
36
GRI: Gestures Recognition Interface
Capitolo 5: Appendice - Procedura per la compilazione e i settaggi d’ambiente
Per quanto riguarda Qt con il supporto a Qt3D ed opengl, si inizi con l’installazione delle OpenGL:
sudo apt-get install freeglut3 freeglut3-dev
quindi scaricare le librerie QT dal seguente link http://qt.nokia.com/downloads/downloads#qt-lib, a questo
punto lanciare il seguente comando per abilitare il supporto ad OpenGL:
./configure -opengl
La configurazione dura circa 5 ore, dopo di che si potrà lanciare il comando:
make
anche questo durerà circa 5 ore, infine lanciare:
make install
Per scaricare la versione desiderata di QT3D lanciare i seguenti comandi, con le opportune modifiche in base ai
propri path:
git clone git://gitorious.org/qt-quick3d/qt-quick3d.git
.../bin/qmake .../qt3d/....pro
make
make install
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH
Se per qualsiasi motive si volesse realizzare tale ambiente sotto un sistema Windows, si consiglia di seguire le
seguenti guide ufficiali, anche se non personalmente testate:
 http://opencv.willowgarage.com/wiki/VisualC%2B%2B_VS2010
 http://doc.qt.nokia.com/qt3d-snapshot/qt3d-building.html
di Dario D'Ambruoso
37
GRI: Gestures Recognition Interface
Capitolo 6 - Bibliografia
CAPITOLO 6
Bibliografia
[1] M. S. D. D. G. M. M. C. S. T. E. D. T. G. M. Vitoantonio Bevilacqua, "Approach to Support the Analysis and the
Classification of Non Verbal Humans Communications.," ICIC , pp. 426-431, 2011.
[2] S. Marcel, «Hand Posture and Gesture Datasets,» [Online]. Available:
http://www.idiap.ch/resource/gestures/.
[3] O. B. J. V. a. D. C. Sebastien Marcel, «Hand Gesture Recognition using Input - Output Hidden Markov
Models,» 2000.
[4] A. Ioannis, «ASL American Sign Language,» [Online]. Available:
http://users.iit.demokritos.gr/~dkosmo/downloads/gesture/help_gestureDB.htm.
[5] I. M. Dimitrios I. Kosmopoulos, «Extraction of Mid-Level Semantics from Gesture Videos using a Bayesian
Networl,» 2000.
[6] Sophie, «SOUVR,» [Online]. Available: http://souvrsophie.blog.com/2009/10/.
[7] «Cognotics,» 02 2007. [Online]. Available:
http://www.cognotics.com/opencv/servo_2007_series/part_2/sidebar.html#fig_3.
[8] J. M. Rainer Lienhart, «An extended set of Haar-like features for rapid object detection,» in Proceedings
International Conference on Image Processing, 2002.
[9] M. HU, «Visual Pattern Recognition by Moment Invariants,» in Transactions on Information Theory, 1962.
[10] A. Papoulis, «Probability, Random Variables, and Stochastic Processes,» 1965.
di Dario D'Ambruoso
38
GRI: Gestures Recognition Interface
Capitolo 6 - Indice delle Figure
INDICE DELLE FIGURE
Figura 1: Kinect ................................................................................................................................................................................................. 1
Figura 2: Sebastien Marcel Static Hand Posture Database.............................................................................................................. 4
Figura 3: Sebastien Marcel Dynamic Hand Posture Database ....................................................................................................... 4
Figura 4: Cad Immersivo con tablet .......................................................................................................................................................... 5
Figura 5: Cad Immersivo realizzato al Cetma ....................................................................................................................................... 5
Figura 6: Concept di Interfaccia di ultima generazione .................................................................................................................... 5
Figura 7: Immersion CyberGlove II ........................................................................................................................................................... 6
Figura 8: X-ISTS Data Glove ......................................................................................................................................................................... 6
Figura 9: Measurand ShapeHand, ShapeHandPlus & ShapeClaw ................................................................................................ 6
Figura 10: Immersion Haptic Workstation............................................................................................................................................ 7
Figura 11: Workflow generale .................................................................................................................................................................... 8
Figura 12: Riconoscimento comandi dinamici ..................................................................................................................................... 9
Figura 13: Riconoscimento gesti statici ............................................................................................................................................... 11
Figura 14: Template ..................................................................................................................................................................................... 13
Figura 15: Comandi Statici riconosciuti ............................................................................................................................................... 14
Figura 16: Ubuntu tux logo........................................................................................................................................................................ 15
Figura 17: Qt creator logo .......................................................................................................................................................................... 16
Figura 18: OpenCv Logo ............................................................................................................................................................................. 17
Figura 19: OpenGL Logo ............................................................................................................................................................................. 18
Figura 20: Qt lib logo.................................................................................................................................................................................... 19
Figura 21: Visione globale dell'interfaccia .......................................................................................................................................... 20
Figura 22: GUI - Frame area ...................................................................................................................................................................... 21
Figura 23: GUI - Statistics area................................................................................................................................................................. 21
Figura 24: GUI - Interactive area............................................................................................................................................................. 21
Figura 25: GUI - Dialog ................................................................................................................................................................................ 22
Figura 26: GUI - Frame area con Skin Detection .............................................................................................................................. 22
Figura 27: GUI - 3D area ............................................................................................................................................................................. 22
Figura 28: GUI - Action area ...................................................................................................................................................................... 23
Figura 29: GUI - Gestures area (default) .............................................................................................................................................. 23
Figura 30: GUI - Gestures area (Wating for command) ................................................................................................................. 23
Figura 31: Tool in funzione rotazione x ............................................................................................................................................... 24
Figura 32: Tool in funzione rotazione z ............................................................................................................................................... 24
Figura 33: Tool in funzione traslazione ............................................................................................................................................... 25
Figura 34: Rappresentazione dello spazio dei colori HSV ............................................................................................................ 26
Figura 35: Features Haar-Like ................................................................................................................................................................. 28
Figura 36: Immagine integrale ................................................................................................................................................................ 29
Figura 37: Cascata di classificatori AdaBoost .................................................................................................................................... 29
Figura 38: Cmake-Gui esempio ................................................................................................................................................................ 34
Figura 39: Terminale inizio make........................................................................................................................................................... 34
Figura 40: Terminale Fine make ............................................................................................................................................................. 35
Figura 41: Terminale make install ......................................................................................................................................................... 35
Figura 42: Opencv.conf esempio di editazione ................................................................................................................................. 36
Figura 43: Bash.bashrc esempio di editazione .................................................................................................................................. 36
di Dario D'Ambruoso
39
GRI: Gestures Recognition Interface
Capitolo 6 - Indice
INDICE
Capitolo 1: Caso di studio .............................................................................................................................................................................. 1
Introduzione .................................................................................................................................................................................................. 1
Il fine ................................................................................................................................................................................................................. 2
Specifiche da soddisfare ........................................................................................................................................................................... 3
Campi d’applicazione ................................................................................................................................................................................. 3
Stato dell’arte e idee ................................................................................................................................................................................... 4
Capitolo 2: Progettazione .............................................................................................................................................................................. 8
Work-flow....................................................................................................................................................................................................... 8
Acquisizione da sensore video .......................................................................................................................................................... 9
Riconoscimento dei comandi dinamici .......................................................................................................................................... 9
Attuazione del comando ................................................................................................................................................................... 10
Riconoscimento dei comandi statici ................................................................................................................................................. 10
Interazione .................................................................................................................................................................................................. 14
Capitolo 3: Implementazione ................................................................................................................................................................... 15
Introduzione ............................................................................................................................................................................................... 15
GNU Linux .................................................................................................................................................................................................... 15
Ambiente di sviluppo .............................................................................................................................................................................. 16
OpenCv .......................................................................................................................................................................................................... 17
OpenGL ......................................................................................................................................................................................................... 18
Interfaccia Grafica .................................................................................................................................................................................... 19
Capitolo 4: Conclusioni ............................................................................................................................................................................... 20
Considerazioni ........................................................................................................................................................................................... 20
GUI .................................................................................................................................................................................................................. 20
Risultati......................................................................................................................................................................................................... 24
Capitolo 5: Appendice.................................................................................................................................................................................. 26
Spazio HSV................................................................................................................................................................................................... 26
Tonalità .................................................................................................................................................................................................... 27
Saturazione............................................................................................................................................................................................. 27
Valore........................................................................................................................................................................................................ 27
Il classificatore di Haar........................................................................................................................................................................... 28
I momenti di Hu......................................................................................................................................................................................... 31
Procedura per la compilazione e i settaggi d’ambiente ............................................................................................................ 33
Capitolo 6 .......................................................................................................................................................................................................... 38
Bibliografia ............................................................................................................................................................................................. 38
Indice delle Figure.................................................................................................................................................................................... 39
Indice ............................................................................................................................................................................................................. 40
di Dario D'Ambruoso
40