Controlul Prezentarilor Prin Intermediul Gesturilor

Cuprins

1. Introducere

1.1 Scopul lucrării

1.2 Stadiul actual

2. Modele de culoare și metode folosite

2.1 Modele de culoare

2.1.1 Modelul de culoare RGB

2.1.2 Modelul de culoare HSV

2.1.3 Conversia din modelul RGB în modelul HSV

2.1.4 Filtrea imaginii

3. Proiectarea sistemului

3.1 Cerințe

3.1.1 Detecția

3.1.2. Urmărirea mâinii

3.2 Componente

3.3 Mod de funcționare

3.3.1 Detecția mâinii după culoare

3.3.2 Poziția mâinii

3.3.3 Urmărirea traiectoriei mâinii

3.3.4 Simulare taste

3.4 Arhitectura aplicației

4. Implementarea sistemului

4.1 Implementarea hardware a sistemului

4.2 Implementarea software a sistemului

4.2.1 Instalarea bibliotecii OpenCV

4.2.2 Crearea proiectului

4.2.3 Înțelegerea codului

4.3 Implementarea interfeței

5. Modelarea sistemului

5.1. Modelul de recunoștere a sistemului

5.2 Procesul de utilizare

Diagrama de secvență

Diagrama de stare

6. Testarea aplicației

7. Concluzii

7.1 Potențiali utilizatori

7.2 Posibilități de dezvoltare

Controlul prezentărilor prin intermediul gesturilor

Controlul prezentărilor prin intermediul gesturilor

Introducere

Scopul lucrării

În momentul de față, tastatura și mouse-ul reprezintă principalul mod de comunicare între om și calculator. Principalul scop în cadrul dialogului dintre om și sistemul informatic este reprezentat de asigurarea unei interacțiuni naturale și eficiente, interacțiune care nu trebuie să depindă în mod neapărat de o legatură fizică cu calculatorul. O astfel de modalitate naturală și intuitivă de interacțiune și comunicare dintre om și calculator o reprezintă gesturile.

În cadrul proiectului vor fi desfășurate cercetări fundamentale și aplicative pentru recunoașterea și interpretarea gesturilor umane, iar apoi folosirea gesturile pentru a controla aplicații în timp real.

Această lucrare scoate în evidență prezentarea unei noi modalități de a interacționa cu un calculator personal. Scopul lucrării este recunoașterea gesturilor mâinii în timp real, prin intermediul unei camere web. Astfel, o camera web și gestica mâinii pot fi folosite în continuare de către un utilizator pentru a controla prezentările de tip Powerpoint în timp real.

În prima parte a lucrării se realizează un proces de antrenare a aplicației, în care aceasta este învățată să recunoască forma mâinii. Metoda folosită pentru obtinerea unei forme clare a mâinii este detecția mâinii după culoare, în modelul de culoare HSV. Aceasta metoda de extragere a imaginii mainii se bazeaza pe faptul ca extragerea culorii pielii umane este mai usor de realizat in spatiul de culori HSV (hue-saturation-value) decat in spatiul de culori RGB. Mana se poate separa de restul imaginii datorita valorii hue distincte a pielei umane, aceasta permitandu-ne sa facem separarea mult mai usor cu ajutorul thresholding-ului. Combinand etapa de identificare a formei mainii cu etapa de identificare a traiectoriei acesteia obtinem comenzile prin care vom controla prezentarile.

Stadiul actual

În ultimii ani s-a acordat o deosebita atentie modurilor neconventionale de interactiune cu sistemele informatice. Una dintre cele mai cunoscute si utilizate modalitati de navigare intre paginile unei prezentari de tip Powerpoint este reprezentata prin intermediul tastaturii si a mouse-ului. Asemenea interfete, precum sunt tastatura si mouse-ul, prezinta un dezavantaj in aplicatiile care se bazeaza pe interactiunea dintre persoana si calculator prin lipsa de naturalete a intercatiunii.

Majoritatea aplicațiilor existente în momentul de față sunt restricționate de unele elemente:

Aplicații care nu sunt realizate în timp real

Mănuși colorate

Necesitatea unor camere web scumpe

Restricții privind viteza maximă de mișcare a mâinii

Aplicații care funcționează doar pe un anumit fundal

Deoarece aplicațiile bazate pe interacțiunea dintre mâna utilizatorului și computer, am decis să dezvolt o aplicație care va încerca să elimine aceste restricții considerate ca dezavantaje.

Prin unele studii recente s-a încercat eliminarea dezavantajelor prin dezvoltarea mult mai naturală a interacțiunii cu calculatorul, iar un exemplu ar fi recunoașterea de gesturi. Gesturile umane sunt sub diferite forme, cum ar fi, gesturile mâinii, gesturile corpului, și expresiile feței. În această lucrare, interacțiunea dintre om și calculator va fi realizată prin detecția gesturilor mâinii.

Gesturile mâinii reprezintă, pentru oameni, un mod non-verbal de interacțiune. Un interes important a fost acordat recunoașterii limbajului prin gesturi datorită faptului că un astfel de sistem va permite persoanelor surdo-mute să comunice cu sistemele informatice prin modalități mult mai naturale. Această formă de comunicare folosind gesturile mâinii reprezintă o formă liberă în realizarea unui discurs într-un mod natural.

Chiar dacă folosirea tastaturii și a mouse-ului reprezintă una dintre cele mai cunoscute și folosite modalități de utilizare a prezentărilor, aceasta nu este și cea mai eficientă. Astfel, recunoașterea vizuală a gesturilor este ideală pentru interacțiunea dintre om și calculator. Prin intermediul recunoașterii și detecției de gesturi se vor înlătura inconveniențele prezentate de alte metode, precum incomoditatea de a tasta sau de a utiliza mouse-ul în timpul prezentării.

Prin comparație cu alte tehnologii folosite pentru controlul prezentărilor de tip Powerpoint, un mare avantaj este reprezentat de informatiile video. Utilizatorul nu este obligat să folosească sau să poarte anumite dispozitive sau echipamente, de exemplu folosirea unor mănuși cu senzori de tip Sensor/Data Gloves, ceea ce crează impresia de interacțiune naturală.

Senzor Glove[1]

http://emotion-research.net/toolbox/toolboxsignalanalysis.2008-02-06.9272820582

Deasemenea sunt cunoscute ecranele de tip touchscreen existente pe dispozitive de tip smartphone, pe Tablet PC-uri, sau chiar pe calculatoare. Aceste tipuri de ecrane ne permit să interacționăm cu dispozitivele respective printr-o metodă mai inovativă, fară folosirea unui mouse sau a tastaturii, și anume prin folosirea directă a degetelor pe ecranele respective. Însă nici această metodă nu este cea mai eficientă, deoarece necesită atingerea ecranului cu ajutorul degetelor, astfel se va crea un contact direct intre dispozitiv si om.

Multe ale modalități de a întretine o interactiune cu calculatorul au fost încercate. Una dintre ele ar fi folosirea unor sisteme cu mănuși mecanice care măsoară direct poziția mâinii. Însă, abordarea acestor manuși momentan este destul de inoportună datorită cablurilor care sunt necesare pentru a face legătura intre sistem si aceasta manusă. Astfel aria de lucru va fi una restransă, creându-se astfel un mediu de lucru incomod. Un alt dezavantaj este reprezentat de costul dispozitivului, care îl face sa fie inaccesibil pentru uzul general.

Prin intermediul camerei web se asigură un cost redus, rentabil în dobândirea și interpretarea gesturilor umane pentru a controla astfel prezentările de tip Powerpoint.

În multe cazuri, folosirea gesturilor este mult mai practică decât folosirea altor dispozitive. De exemplu, în timpul prezentărilor, persoana care susține această prezentare nu e nevoită să se deplaseze între computer și proiectarea prezentării pentru a deschide prezentarea, sau pentru a selecta urmatorul slide.

Modele de culoare și metode folosite

Dezvoltarea aplicației se va realiza în C, folosind librăriile OpenCV (Open Computer Vision Library) pentru a permite folosirea aplicației în timp real.

Voi folosi o cameră web la rezoluția de 320×240 pentru a analiza gesturile unei mâini și astfel vom îmbunătății viteza de procesare. Camera web va fi plasată la o distanță aproximativ de ….. cm de peretele unde se va proiecta prezentarea, indreptată cu fața către suprafața peretelui.

Modele de culoare

Modelele de culoare pot fi exprimate în multe feluri diferite, fiecare cu avantajele și dezavantajele sale. Unele reprezentări sunt formulate pentru a ne ajuta să selectăm culorile, iar altele sunt formulate pentru a ușura procesarea imaginilor. Un lucru pe care îl au în comun majoritatea modelelor de culoare este numărul variabilelor, sau dimensiunea.trei variabile sunt de ajuns pentru a descrie modelele de culoare, de exemplu, modelul de culoare RGB este reprezentate de culorile roșu, verde și albastru, iar modelul de culoare HSV este reprezentat de nuanță, saturație și luminozitate.

Un aspect foarte important în implementarea acestei aplicații este de a stabili care este cel mai avantajos model de culoare (roșu, verde, albastru – RGB, sau nuanță, saturație, luminozitate – HSV). OpenCV-ul, în general, capteaza imagini și video-uri în formatul RGB. Așadar, imaginile captate pot fi considerate ca 3 matrici: roșu, verde, albastru, de aici venind și numele RGB (Red, Green, Blue), cu valori întregi care variază de la 0 la 255. Deși, modelul de culoare RGB este considerat cel mai popular datorita simpltății sale de implementare, acesta nu este și cel mai adecvat pentru separarea componentelor de luminozitate si cromatică.

Modelul de culoare RGB

Culorile pot fi produse prin două metode diferite: cu ajutorul luminii și cu ajutorul pigmenților chimici. Modelul de culoare RGB, redă o imagine emisă de o sursă de lumină. Modelul de culoare RGB este bazat pe culorile roșu, verde și albastru, de unde provine și denumirea sa RGB (Red, Green, Blue). Numim culoare, percepția de către ochi a uneia sau a mai multor frecvențe de lumină. Ochiul uman este sensibil la trei culori, roșu, verde și albastru (RGB), acestea fiind culorile primare. Combinând aceste culori între ele, putem obține toate celelalte culori.

Acest model se bazează pe sistemul cartezian de coordonate. Subspațiul de culori este reprezentat de un cub, în care nuanțele de gri se situează pe diagonala cubului, de la punctul Black(0,0,0) la punctul White(1,1,1). Culorile sunt reprezentate de punctele din interiorul cubului și de pe cub.

Modelul de culoare RGB este folosit în specialpentru calculatoare, la monitoare și camere digitale, acolo unde culorile sunt produse prin emisia simultană a trei surse de lumină, și anume: lumina roșie, verde și albastră.

Cubul RGB[1]- http://etc.unitbv.ro/~csaba.kertesz/pds/pi/lab2.pdf

O culoare se obține prin combinarea celor trei culori primare. Ținând cont de cantitatea de culoare primară folosită, se pot crea toate culorile care pot fi afișate de computer sau monitor. Astfel, dacă nu este foloită nicio culoare primară, rezultatul va fi culoarea neagră. Dacă se va combina roșu cu verde se va obține culoarea galbenă. În urma combinării culorii primare roșii cu albastru, se va obține culoarea secundară purpuriu, iar prin combinarea tuturor culorilor primare la intensitate maximă, roșu, verde, albastru, rezultatul va fi culoarea albă. În concluzie, prin combinarea culorilor principale la intensități diferite, se poate crea orice culoare. În imaginea de mai jos sunt reprezentate combinațiile de culori din modelul de culoare RGB,

Combinații de colori RGB

Modelul de culoare HSV

Așadar, pentru scopul acestei lucrări, detecția culorii pielii, modelul de culoare cel mai favorabil este HSV, deoarece acesta ne permite separarea nuanței de luminozitate. Pentru a lucra în modelul de culoare HSV, în aplicația preznetată de mine, am convertit modelul original de culoare a capturii video din imagine de tip RGB în HSV.

Vom utiliza modelul de culoare HSV creat în 1978 de Alvy Ray Smith. Acest model este mai intuitiv, deoarece pentru producerea unei culori se vor specifica următoarele elemente care compun această culoare: cantitatea de alb și cantitatea de negru. În alte cuvinte, se va specifica nuanța sau culoarea (Hue), saturația (Saturation), și valoarea (Value). Acest model mai este cunoscut și sub numele HSB – Hue, Saturation, Brightness. Acest model își reprezintă culorile astfet:

Hue (nuanță) – este culoarea însăși, care rezultă din combinarea culorilor primare. Toate nuanțele, cu excepiția nivelurilor de gri, sunt reprezentai RGB

Modelul de culoare HSV

Așadar, pentru scopul acestei lucrări, detecția culorii pielii, modelul de culoare cel mai favorabil este HSV, deoarece acesta ne permite separarea nuanței de luminozitate. Pentru a lucra în modelul de culoare HSV, în aplicația preznetată de mine, am convertit modelul original de culoare a capturii video din imagine de tip RGB în HSV.

Vom utiliza modelul de culoare HSV creat în 1978 de Alvy Ray Smith. Acest model este mai intuitiv, deoarece pentru producerea unei culori se vor specifica următoarele elemente care compun această culoare: cantitatea de alb și cantitatea de negru. În alte cuvinte, se va specifica nuanța sau culoarea (Hue), saturația (Saturation), și valoarea (Value). Acest model mai este cunoscut și sub numele HSB – Hue, Saturation, Brightness. Acest model își reprezintă culorile astfet:

Hue (nuanță) – este culoarea însăși, care rezultă din combinarea culorilor primare. Toate nuanțele, cu excepiția nivelurilor de gri, sunt reprezentate în cercul cromatic;

Saturation (saturație) – se referă la intensitatea unei culori, sau, cât de nuanțată sau palidă este culoarea respectivă. O culoare complet nesaturată este o nuanță de gri. Cu cât crește saturația, culorile devin mai pastelate. O culoare complet saturată este o culoare pură;

Value (valoare) – această valoare descrie luminozitatea, sau intensitatea luminoasă a unei culori. Se referă la cantitatea de alb și de negru care se găsește într-o culoare. Este cantitatea de lumină cu care este emisă culoarea. La mutarea unui obiect din umbră în lumina soarelui, se poate vedea o schimbare de luminozitate.

Reprezentarea tridimensională a modelului HSV este derivată din cubul RGB, fiind prezentată in figura de mai jos.

Piramida hexagonală HSV (http://etc.unitbv.ro/~csaba.kertesz/pds/pi/lab2.pdf)

Parametrii unei culori sunt exprimați în coordonate cilindrice. Culoarea, sau nuanța, este reprezentată prin unghiuș care se formează cu axa verticală. Culoarea roșie, în piramida hexagonală, se află la 0°, galbenul la 60°, verdele la 120°, turcoazul la 180°, albastrul la 240°, iar purpuriul la 300°.

În figura de mai jos este o altă reprezentare a spațiului de culoare HSV.

Reprezentarea culorilor HSV

(http://doc.qt.digia.com/qq/qq26-adaptivecoloring.html)

Conversia din modelul RGB în modelul HSV

Modelul de culoare HSV este o transformare non-lineară a modelului RGB. Avem o culoare definită în modelul de culoare RGB unde R, G, și B sunt între valorile 0 și 1, cu 0 fiind cea mai mică cantitate iar 1 fiind cea mai mare cantitate a culorii. O culoare HSV echivalentă culorii RGB se poate determina utilizând formulele de mai jos.

Următoarele formule reprezintă calculul nuanței (Hue):

Apoi se va calcula saturație cu formula următoare:

În cele dinurmă se calculează ultimul element din modelul de culoare HSV, și anume luminozitatea:

Din formulele de conversie de mai sus MAX reprezintă maximul dintre valorile RGB, și MIN minimul dintre aceleași valori.

Valorile rezultate sunt acum reprezentate în modelul de culoare HSV, unde H variază de la 0° la 360°, indicând unghiul, din jurul cercului de culoare unde valorea Hue este localizată. S și V variază de la 0 la 1, cu 0 fiind cantitatea cea mai mică iar 1 fiind cantitatea cea mai mare a saturației sau a luminozității. Orice valoare H care se află în afara intervalului [0, 360] poate fi încadrată în acest interval printr-o divizare modulo 360 a lui H. (De exemplu, -30 este echivalent cu 330, iar 480 este echivalent cu 120).

Formulele de mai sus, reflectă și anumite proprietăți ale modelului HSV:

Dacă MAX = MIN (S = 0), atunci H este nedefinită. Este evident că dacă S=0, atunci culoarea se întinde de-a lungul linie centrale de gri (vezi Fig. Reprezentareaculorilor HSV), deci nu are componenta Hue.

Dacă MAX = 0 (V = 0), atunci S este nedefinită. Acest lucru se observă mai bine în Fig. vezi Fig. Reprezentareaculorilor HSV. Dacă V = 0, atunci culoarea este negru pur, deci nu are nici componenta Hue, nici saturație.

În imaginea de mai jos se poate vedea un tabel care reprezintă conversia culorilor din modelul de culoare RGB în modelul de culoare HSV.

Conversir RGB în HSV

(http://www.rapidtables.com/convert/color/rgb-to-hsv.htm)

Filtrea imaginii

Filtrarea imaginilor se înscrie în clasa operațiilor de îmbunătățire a imaginilor, principalul scop al acesteia fiind eliminarea zgomotului unei imagini.

Filtrarea reprezintă o operație de vecinătate, adică, la calculul noii valori a unui pixel vor contribui și valorile pixelilor vecini, nu doar vechea lor valoare, cum se întâmplă la operațiile punctuale. Vecinii unui pixel reprezintă o mulțime de pixeli aflați în apropierea acestuia.

Există multe posibile surse de zgomot în imaginile digitale. De exemplu camerele web sunt cunoscute pentru calitatea destul de slabă a imaginilor, în special în condiții de luminozitate scăzută. Zgomotul poate fi văzut ca o abatere locală de la valoarea ideală a unui pixel. Zgomotul poate fi clasificat în continuare, prin caracteristicile sale, astfel: dacă pixelii deviază la o anumită valoare sau devine o valoare extremă. Reducerea zgomotului reprezintă procesul de a încerca de a elimina aceste abateri și de a obține o variantă cât mai aproape posibil de zgomotul ideal dintr-o imagine, fără a crea prea multe distorsiuni în timpul procesului. Există multe modalități de reducere a zgomotului.

Filtrul de mediere este cel mai simplu filtru de netezire. Caractereisticile unui filtreu de mediere este faptul că toti coeficienții măștii de filtrare sunt egali. Dacă se ține cont și de condiția de normare, atunci coeficienții unui filtru de mediere, care are o mască de filtrare de dimensiunea N x N, au valoarea 1/N2. Un exemplu de mască de filtrare de mediere pentru N = 3 este reprezentată în figura următoare:

Mască de filtrare pătrată

de dimensiune 3 x 3

Prin aplicarea unui filtru de mediere are de suferit și semnalul util, nu doar zgomotul. Filtrarea de mediere este deranjantă pentru imagine în acele zone în care imaginea conține variații bruște, ducând la apariția fenomenului de încețoșare.

Din punctul de vedere al zgomotului, pentru filtrare este necesară utilizarea unei măști de filtrare de dimensiune cât mai mare. Însă din punctul de vedere al semnalului util, este de preferat folosirea unei măști care să fie cât mai mică.

Filtru Gaussian este un filtru de netezire, ca și filtrul medie. Gradul de netezire este determinat de valoarea deviației standard. Cu cât valoarea deviației este mai mare cu atât nucleul de convoluție este mai mare. Netezirea este cu atât mai puternică cu cât dimensiunea nucleului de convoluție gaussian este mai mare.

Filtrul Gaussian efectuează o medie ponderată a pixelilor, cu ponderile crescătoare spre pixelul din centru. Din această cauză, filtrul Gaussian produce o netezire mai fină și conservă frontierele mai bine decât alte filtre. Filtrul Gaussian poate fi folosit pentru eliminarea zgomotului gaussian și a zgomotului uniform.

Astfel, pentru a combate zgomotul creat, am folosit filtrul Gaussian înainte de a converti modelul de culoare in HSV. Modelul Gaussian este cel mai des folosit pentru modelarea proceselor cu zgomot natural, cum ar fi cele care provin din zgomotul electronic în sistemul de achiziție al imaginilor.

Abordarea acestei modalități bazate pe detecție de culoare are și unele dezavantaje. Daca unele obiecte care au aceeași nuanță cu nuanța pieli mâinii sunt prezente în același decor, sunt uneori recunoscute ca fiind o mână. În acest caz, saturația trebuie ajustată cu mare grijă. Deasemenea, când este folosită o lumină cu intensitate mai scăzută, unele obiecte pot primi o tenta galbenă, iar acest lucru poate duce la erori în detecția corectă a mâinii.

Proiectarea sistemului

Am creat acest sistem pentru a demonstra cât de simplu poate fi controlată o aplicație doar prin intermediul posturii mâinii. Un scenariu tipic în care utilizatorul trebuie sa folosească computerul de la o anumită distanță este în timpul unei prezentări. Acest sistem face posibilă înlocuirea folosirii unei telecomande, deja existente, cu gesturile mâinii. Astfel, în funcție de locul unde este poziționată mâna în fața camerei vom putea folosi următoarele operații:

Deschiderea unei, sau a mai multor prezentări Powerpoint la alegere dintr-un anume folder;

Vizualizarea în modul fullscreen a prezentării;

Selectarea următorului slide;

Selectarea slide-ului anterior.

Cerințe

În acest subcapitol, vom defini cerințele pentru interacțiunea dintre om și calculator cu ajutorul gesturilor mâinii.

În ceea ce privește aplicația care se referă la controlul prezentărilor prin intermediul gesturilor, am identificat două servicii esențiale în interacțiunea dintre om și calculator, și anume: detecția și urmărirea mâinii.

Detecția

Achiziția unei interacțiuni între om și sistemul informatic presupune în primul rând detecția în timp real a unui obiect. Tehnici de detecție includ segmentări ale cadrelor video în funcție de caracteristici de culoare, mișcare.

Detecția este determinată de prezența și poziția unui obicet în decor, în cazul de față este vorba despre prezența și poziția mâinii. Un element important pe care se bazeaza detecția mâinilor este ilustrat de culoarea pielii.

Astfel, în această lucrare, accentul va fi pus pe segmentarea bazată pe culoare și deasemenea pe construirea unui filtru pentru detecția culorii pielii în spațiul de culoare HSV. Pragurile de filtrare vor fi determinate în mod dinamic și adaptiv în funcție de unele particularități ale cadrului video curent, și anume: luminozitate, apariția altor obiecte pe fundal care au aceeași culoare cu cea a mâinii.

3.1.2. Urmărirea mâinii

Urmărirea unui obiect poate fi definită ca fiind problema de estimare a traiectoriei unui obiect, așa cum se mișcă în cadrul video. Această mișcare a obiectelor, în cazul nostru mâna, este complexă și are următoarele caracteristici:

Necesită procesare în timp real

Mișcarea obiectului este complexă

Poate cauza pierderi de informații

Uneori apare zgomotul în imagini

Modificarea luminozității în funcție de loc poate determina unele neregularități

Scopul urmăririi unui obiect este de a oferi regiunea completă din imagine care este ocupată de obiectul respectiv în fiecare moment.

Pentru a urmări traiectoria mâinii există doi pași care trebuie urmați:

Detectarea mâinii

Aflarea poziției exacte a mâinii in coordonatele x și y

Componente

Pentru realizarea acestei aplicații avem nevoie de următoarele: o cameră web care va fi conectată la computer, un videoproiector, programul Microsoft Visual Studio. Tehnologiile folosite sunt biblioteca OpenCV și limbajul de programare C.

O cameră web este o cameră video ce capturează, digitizează și transmite imaginile în timp real către un calculator. Se conectează la calculator prin USB, și se alimentează din aceeași interfață, fără a necesita un alimentator separat. Camera web care va fi folosită pentru realizarea acestei aplicații este A4Tech modelul PK-635M. Aceasta are o rezoluție de 640×480, această rezoluție fiind suficientă pentru realizarea cu succes a aplicației.

Cameră web A4Tech

Un videoproiector este un proiector de imagine care primește un semnal video și proiectează imaginea corespunzătoare pe unecran de proiectare olosind un sistem de lentile. Videoproiectorul folosit în realizarea acestui proiect este unul Benq. Acesta fiind conectat la calculator oferă facilitatea de a proiecta prezentarea de tip Powerpoint pe perete în dimensiuni mai mari, astfel creându-se un mediu de urmărire a prezentării mult mai comod și interesant.

Videoproiector Benq

OpenCV (Open Source Computer Vision Library) este o bibliotecă care folosește tehnologii de ultimă oră pentru a permite dezvoltarea de software de prelucrare de imagine pe calculator. Acesta rulează atât pe Windows, cât și pe Linux, Mac și iPhone. OpenCV are ca obiectiv prinipal interacțiunea în timp real cu calculatorul, fiind elaborat de Intel. Aceasta este o știință și o tehnologie care este folosită pentru a procesa imagini cu scopul de a obține informații relevante. Biblioteca OpenCV este scrisă în limbajul de programare C, având prima sa aplicație cu interfață disponibilă în C. Aceasta oferă clase care pot si utilizate și în limbajul de programare C++. Deasemenea există interfețe complete disponibile pentru diverse alte limbaje de programare cum ar fi Python, Java, Matlab și Octave. Oferă structuri de date rapide și eficiente care pot fi folosite pentru procesarea imaginilor în timp real și aplicații de tip Computer Vision.

Logo OpenCV

Limbajul de programare C este un limbaj de nivel înalt, fiind dezvoltat de Dennis Ritchie at Bell Labs în mijlocul anilor 1970. Deși inițial a fost conceput ca un limbaj de programare de sisteme, C s-a dovedit a fi un limbaj de programare puternic și flexibil care poate fi folosit într-o varietate de aplicații. C C este un limbaj de programare deosebit de popular pentru programatori deoarece este relativ mic, având nevoie de mai puțină memorie decât alte limbaje.

Mod de funcționare

Se va folosi o cameră web standard. Penru a analiza gesturile unei mâini cadrul va fi capturat la rezoluția de 320×240 pentru a îmbunătăți viteza de procesare. Camera web va fi conectată la calculator și va fi plasată la o distanță aproximativ de …cm față de suprafața peretelui. Deasemenea se va folosi un videoproiector, pentru a proiecta pe perete prezentarea dorită. Astfel, cu ajutorul videoproiectorului, se va crea un mediu mult mai confortabil și ușor de înțeles pentru persoanele care vor urmări prezentarea.

După ce a fost realizată amplasarea și instalarea întregului sistem, se poate rula aplicația realizată în Visual Studio 2010 cu ajutorul bibliotecilor OpenCV. Pe ecran vor apărea trei ferestre: o fereastră care va indica captura video originală, o fereastră de reglare a valorii threshold sau valorii de prag, și o fereastră care va conține captura video care ne va indica doar obiectul detectat.

Detecția mâinii după culoare

Prima fereastră care se va deschide va fi fereastra care va conține captura video în timp real. ………………………….

În cadrul aplicației noastre, este util sa se separe unele regiuni ale imaginii. În cazul nostru, zona de interes este reprezentată de mâna umană, deci se va separa regiunea imaginii corespunzătoare obiectului de care suntem interesați, și anume mâna, de regiunea care corespunde imaginii de fundal. Această departajare se va realiza prin binarizarea imaginii. Binarizarea este cunoascută și sub denumirea de thresholding.

Thresholding-ul reprezintă un tip de segmentare al imaginii bazat pe intensitatea culorii. Această operație are ca obiectiv obținerea unei imagini alb-negru din imaginea originală captată de camera web. Zona albă a imaginii va fi reprezentată de zona noastră de interes, iar partea neagră va fi fundalul, care nu va fi luat în considerare. Binarizarea reprezintă o modalitate simplă și convenabilă de a efectua segmentarea pe bază de diferite culori în regiunile din fundal și în regiunile din prim-plan.

Intrarea unei operații de tip thresholding este de obicei o imagine în tonuri de gri sau color. Rezultatul va fi o imagine binară care reprezintă segmentarea. Pixelii de culoare neagră corespund fundalului iar pixelii de culoare albă corespund regiunii din prim-plan.

Captura binarizată, care ne va indica obiectul pe care dorim să îl detectăm, va fi deasemenea afișată într-o nouă fereastră pe care am denumit-o “Binarizarea imaginii”.

Captură a mâinii în timp real

Binarizarea imaginii

Pentru a realiza operația de thresholding este necesar să găsim valorile exacte de nuanță, saturație și luminozitate ale obiectului selectat, și anume mâna. Pentru a rezolva această problemă vom crea o fereastră, trackbar, de unde vom putea ajusta valorile minime și maxime HSV manual.

Ferestrele de tip trackbar reprezintă o modalitate ușoară de a schimba, în mod dinamic, valorile variabilei în timpul executării codului. Altfel spus, acesta oferă o interfață grafică pentru a modifica valoarea variabilelor de intrare.

Gasirea valorilor optime pentru nuanță, saturație și luminozitate a mâinii se va realiza prin respectarea următorilor pași:

Se vor crea șase bare glisante de tip trackbar pentru a putea ajusta valorile minime si maxime ale componentelor HSV. Acestea vor fi afișate în aceeași fereastră de control. Se vor stabili intervalele inițiale pentru nuanță minim și maxim (hue), saturație minim și maxim (saturation), și liminozitate minim și maxim (value) cuprinse între 0-179, 0-255, respectiv 0-255

Întâi se va ajusta bara glisantă pentru definirea minimului și maximului de nuanță a mâinii, până când vom observa o îmbunătățire în detectarea zonei dorite, reprezentată de culoarea albă, eliminând ușor zgomotul

Se repetă aceeași operațiune pentru ajustarea minimului și maximului saturației și luminozității mâinii

Ne vom opri din ajustat atunci când forma mâinii este perfect detectată, fiind reprezentată în prim-plan prin intermediul culorii albe iar fundalul va fi complet negru

Fereastră pentru modificarea rapidă

a valorilor variabilelor HSV

Este posibil ca sistemul de detecție să fie supus unor condiții de iluminare diferite, de exemplu din cauza orei diferite din zi sau a poziției camerei în funcție de sursele de lumină. Prin urmare este ideală utilizarea trackbarului de ajustare a valorilor variabilelor HSV, care contribuie la redefinirea într-un mod ușor și deasemenea într-un interval scurt de timp a valorilor nuanței, saturației și luminozității mâinii.

Poziția mâinii

Acest program a fost realizat pentru a dezvolta o interfață folosită de un utilizator de computer pe bază de urmărire a ipostazelor mâinii umane. Ca atare, acesta vizează operarea rapidă a prezentărilor prin intermediul interacțiunii dintre om și calculator. Poziția mâinii poate fi urmărită în timp real, iar aceasta va fi folosită în controlul prezentărilor.

Se va folosi o cameră web setată să capteze cadre video la o rezoluție de 320×240 pixeli la un interval de 15 cadre/secundă. Putem observa faptul că nu s-a înregistrat nicio latență în detecția și urmărirea posturii mâinii.

În continuare se va găsi poziția exactă a mâinii. În cadrul acestei aplicații am folosit momente pentru a calcula poziția exactă a centrului mâinii. Trebuie să calculăm momentele spațiale de oridinul întâi în jurul axei x și în jurul axei y și momentele centrale de ordinul zero ale imaginii binare. Momentul central de ordin zero al imaginii binare este echivalent cu zona albă a imaginii.

Pentru a calcula zona în care se află imaginea binară, trebuie calculate momentele de gradul zero. Într-o imagine binară pixelii pot avea doar doua valori: 1 sau 0. Asa momentul care conține pixeli albi va fi reprezentat de valoarea 1. Trebuie menționat faptul că există doar un moment de ordinul zero.

Pentru a calcula centroidul imaginii binare trebuie calculate cele două coordonate, și anume momentele centrale de orinul întâi. Centrul de greutate al unei imagini este calculat ca medie a intensității imaginii. Deci, rezultatul este un punct, care are proprietatea că intensitatea este distribuită în mod egal în jurul imaginii. Cu alte cuvinte, toate valorile pixelilor pot fi adunate pentru a găsi acest punct, care va deveni centrul gravitațional.

Coordonata X a poziției centrului imaginii reprezintă momentul spațial în jurul axei X supra momentul central al imaginii binare. Deasemenea, coordonata Y a poziției centrului imaginii reprezintă momentul spațial în jurul axei Y supra momentul central al imaginii binare.

Se consideră că dacă zona albă a imaginii binare este mai mică sau egala cu 10000 pixeli, mâna nu se află în zona capturii video, deoarece mâna va avea o suprafață mai mare de 10000 pixeli.

Pentru a înlocui tastatura cu o modalitate mult mai inedită și atractivă, am creat trei secțiuni în cadrul video. Se presupune că aceste trei secțiuni sunt butoane virtuale care se activează atunci cand le selectezi cu mâna. Am programat fiecare zonă pentru a trimite câte o comandă către Powerpoint, și anume:

În partea de sus, în centru capturii, am elaborat un bunton virtual pentru deschiderea unei prezentări Powerpoint

În parte de sus, în dreapta, prin selectarea butonului virtual se va deschide din meniu Powerpointului optiunea de a alege din computer prezentarea pe care dorim să o deschidem

În partea de jos, în centru, există un buton virtual care, la selectarea lui, va activa opțiunea fullscreen a prezentării Powerpoint

Criteriul prin care se accesează o zonă din imagine este de a poziționa mâna în zona de coordonate pe care o vom defini în codul sursă. De exemplu, pentru a deschide o prezentare Powerpoint, mâna trebuie să fie plasată în zona în care poziția coordonatei X să fie mai mare de 300 pixeli și mai mică de 380, iar poziția coordonatei Y să fie mai mare de 5 pixeli și mai mică de 60 pixeli. Astfel se va crea o căsuță virtuală, această zona va fi marcată prin inserarea unui text, pentru a putea fi vizibilă.

Dezavantajele identificate pe parcursul experimentelor se datoreaza faptului că aplicația este destul de sensibilă la tranziții între pozițiile succesive ale mâinii atunci când se dorește determinarea exactă a poziției mâinii in cadrul video.

Urmărirea traiectoriei mâinii

În procesul de urmărire a mâinii trebuie reamintite următoarele operații despre care am vorbit în amănunt în subcapitolele anterioare, și fără de care această acțiune nu s-ar putea realiza: detecția și localizarea zonei în care se află mâina.

O bună alegere în ceea ce privește proiectarea unui protocol de comunicare între om și calculator este recunoașterea unei traiectorii sau urmărirea traiectoriei obiectelor. Este de asemenea o acțiune naturală și simplă pentru utilizator.

Urmărirea obiectelor reprezintă localizarea dinamică a obiectelor prin determinarea poziției acestora în fiecare moment în care acesta este observat în cadrul video.

Se poate observa faptul că este dificilă obținerea unei traiectorii perfecte a mâinii , studiind traiectoria pe care o realizează mâna umană atunci când se dorește deplasarea pe o dreaptă. Acesta este motivul pentru care am decis să încercăm încadradea traiectoriei într-un interval prestabilit.

Am studiat doar un tip de traiectorie, și anume orizontală, însă în două direcții diferite: stânga și dreapta. Am ales tipul de traiectorie pe orizontală deoarece se poate observa simplitatea realizării lor de către utilizatori.

Prima variantă, în cazul în care traiectoria mâinii este orizontală de la stânga la dreapta, în partea de sus a capturii video, este aceea de a trece la slideul următor în cadrul prezentării Powerpoint.

Selectarea următorului slide

Iar cea de-a doua variantă, în cazul în care traiectoria mâinii este orizontală de la dreapta la stâga, în partea de jos a capturii, este de a selecta slideul anterior.

Selectarea slide-ului precedent

Strategia de a interacționa cu computerul prin intermediul mâinii a fost definită ca fiind formată dintr-un set de traiectorii ale mâinii ce asigură dominația prezentărilor fără a fi nevoie să se afle postura mâinii, numărul de degete vizibile sau mișcarea din încheietură a mâinii.

Punctele traiectoriei sunt obținute din detecția trasăturilor mâinii. Traiectoria este prelucrată și filtrată având ca scop obținerea unei traiectorii continue și precise. Combinând anumite poziții statice și urmărirea traiectoriei mâinii se va genera secvențe de codificare a gesturilor care poate fi polosită în continuare pentru a executa o acțiune care va fi executată de către calculator.

Simulare taste

Simularea intrărilor de la tastatură este un concept bine cunoscut pentru cei ce sunt familiarizați cu Visual Basic. Apăsarea virtuală de taste duce la înlocuirea tastaturii cu tastatura virtuală. O tastatură virtuală permite utilizatorului computerului să introducă caractere fără a avea contact fizic cu tastatura, aceasta fiind o componentă software.

Un scop important în folosirea unei tastaturi virtuale este acela de a oferi un mecanism diferit pentru utilizatorii cu dizabilități, pentru care reprezintă o dificultate folosirea unei tastaturi fizice.

Pentru realiza simularea unor taste sau a unor comenzi de la tastatură se detectează și analizează poziția și mișcările mâinii umane. Acestea vor fi interpretate ca niște operații introduse de la o tastatură fizică. În acest fel se reușește simularea a nenumărate tipuri de dispozitive manuale de intrare acționate manual. Un număr mare de echipamente conectate la calculator pot fi înlocuite prin detecția și recunoașterea mâinii și apoi folosirea acesteia în scopul de a trimite sistemului informatic, de la distanță, anumite comenzi, acestea fiind optimizate apoi pentru aplicația curentă care va fi caracterizată prin simplitatea controlării prezentărilor.

Tastatura conține unele chei speciale, care sunt menite să execute o aplicație sau să afișeze unele caractere. Tastele sunt identificate după mai multe nivele: scancode, keycode și keysym.

Scancode-ul reprezintă nivelul cel mai mic în identificarea numărului unei taste, fiind valoarea pe care tastatura o trimite către calculator. Tastatura interacționează cu scancode-uri, acestea reprezentând datele care sunt trimise de la tastatură la calculator pentru a raporta care tastă a fost apasată, deci fiecărei tastă de pe tastatură îi este atribuit câte un scancode. Majoritatea scancode-urilor indică apăsarea sau eliberarea unei taste. Acestea sunt utile atunci când dorim să știm doar o tastă, nu și caracterul acestei, de exemplu tastele care nu conțin caractere deloc, cum ar fi tasta enter, escape, cele patru săgeți, etc.

Keycode-ul se află la al doilea nivel în identificarea unei taste. Acestea corespund unor funcții. Acesta reprezintă o tastă fizica, iar maparea dintre tastă și keycode nu poate fi schimbată. În cazul keycode-ului dacă o tastă este apăsată, de exempli tasta „a”, caracterul poate fi ori „a”, ori „A”, dar keycode-ul este același. Acesta depinde doar de tastă, nu și de caracterul care rezultă.

Keysym reprezintă al treilea nivel în identificarea unei taste și corespunde unui simbol. Acesta pot fi influențate de faptul că unele taste modificatoare, precum Shift, ar putea fi deasemenea apăsate.

Majoritatea tastelor trebuie să aibă un keycode, sau cel puțin un scancode.

În cadrul acestei aplicații, pentru a controla o anumită prezentare Powerpoint, se vor simula apăsări și eliberări de taste. De fiecare dată când mâna este detectată de OpenCV într-o anumită zonă a capturii, zonă specificată în codul sursă, este declanșat un eveniment de apăsare a unei taste sau a unor combinații de taste corespunzătoare. De fiecare dată când un eveniment de apăsare a unei taste este trimis către calculator, toate celelalte taste apăsate vor primi un eveniment de eliberare a tastei, astfel nu vor putea fi apăsate două taste simultan, doar în cazul în care este nevoie.

Pentru a demonstra eficiența sistemului nostru de identificare a mâinii, am realizat o aplicație pentru controlil prezentărilor Powerpoint. Cu ajutorul acestei aplicații, utilizatorul poate interacționa cu acest powerpoint prin intermediul camerei web, folosind următoarele operații:

SHALLEXECUTE (deschiderea unui anume document de tip Powerpoint din computer) – prin poziționarea mâinii în partea de sus a cadrului, în mijloc;

CTRL + O (deschiderea ferestrei de alegerea a deschiderii unui nou document din computer) – prin poziționarea mâinii în partea de sus a cadrului, în mijloc, langă SHALLEXECUTE;

1 + ENTER (deschiderea documentului de tip Powerpoint care are denumirea „1”) – în partea de sus a cadrului, în dreapta, lângă butonul virtual creat pentru deschiderea unui nou document (CTRL + O)

2 + ENTER (deschiderea documentului de tip Powerpoint care are denumirea „2”) – în partea de jos a cadrului, în dreapta, lângă butonul virtual creat pentru comanda fullscreen a documentului (F5)

F5 (selectarea documentului pe ecran complet, fullscreen) – prin poziționarea mâinii în partea de jos a cadrului, în mijloc;

SĂGEATĂ DREAPTA (trecerea la următorul slide din Powerpoint) – atunci când mâna trece din partea dreaptă către partea stângă a capturii, în jumătatea de sus a capturii;

SĂGEATĂ STÂNGA (trecerea la slideul anterior din Powerpoint) – atunci când mâna trece din partea stângă către partea dreaptă a capturii, în jumătatea de jos a capturii;

Mai jos avem reprezentarea grafică a două comenzi: SĂGEATĂ DREAPTA cu comanda de a selecta slideul următor în cazul în care traiectoria mâinii este orizontată de la dreapta la stânga, și comanda SĂGEATĂ STÂNGA prin care se selecteaza slideul anterior în cazul în care traiectoria mâinii este orizontată de la stânga la dreapta.

Arhitectura aplicației

În acest subcapitol se va prezenta arhitectura detectiei și a urmăririi traiectoriei mâinii umane în timp real din secvențe capturate de o cameră web. Algoritmul prezentat în această lucrare are două etape principale, o etapă de procesare și o etapă de clasificare.

Etapa de preprocesare pregătește imaginea de intrare de la camera web și extrage caracteristicile pentru etapa de clasificare. Această etapă include modului de filtrare a culorilor, un modul de filtrare a mișcării, un modul de segmentare pe bază de culoare. Scopul primei etape este de a elimina regiunile din imagine care nu corespund culorii pielii. Această etapă are o mare importanță datorită faptuli că daca se eșuează în extragerea caracteristicilor corespunzătoare mâinii de la camera web, algoritmul de recunoaștere a mâinii nu va fi capabil să obțină rezultatele dorite. Mai mult decât atât, este esențial ca etapa de preprocesare să fie pe cât se poate de robustă astfel încât schimbările de mediu, cum ar fi schimbarea fundalului, zgomotul, sau modul de iluminare să nu afecteze rezultatul final.

A doua etapă a arhitecturii procesează acele regiuni din imagine selectate de etapa de preprocesare, care trebuie sa fie reprezentate de culoarea pielii. În această etapă se iau ultimele decizii în legătură cu detecția mâinii. Apoi, se determină traiectoria care va fi urmată de mână.

Arhitectura aplicației

Implementarea sistemului

Implementarea sistemului presupune implementarea soft, hard și implementarea interfețelor.

Implementarea hardware a sistemului

Implementarea hardware se realizează prin punerea în funcțiune a întregului sistem, înainte de scrierea codului, adică, se va conecta camera web și videoproiectorul la calculator. Deasemenea se va crea mediul de lucru. Camera web va fi amplasată cu fața către perete, la o distanță de ……………. de perete.

Înainte de a analiza codul, este bine să ne reamintim cum va funcționa programul. Programul va cuprinde următoarele etape:

Se va obține o imagine de la camera web

Se va detecta mâna umană

Se va afla poziția curentă a mâinii

Pentru a obține o imagine de la camera web se vor folosi funcții oferite de OpenCV care ne vor da permisiunea de a accesa camera web de la computer. În a doua parte a aplicației, și anume detecția mâinii umane, se cere mai întâi binarizarea imaginii și apoi se vor folosi momente de gradul zero și de gradul întâi.

După ce a fost detectată mâna umană, se poate afla poziția mâinii prin urmărirea traiectoriei acesteia.

Implementarea software a sistemului

Implementarea sistemului soft presupune scrierea textului folosind sinteza și formatul unui limbaj de programare ales, în cazul nostru limbajul de programare C. Codul este special conceput pentru a facilita munca unui programator, astfel oferind posibilitatea acestuia să specifice operațiile care vor fi realizate de către computer.

Detecția și segmentarea de obiecte reprezintă o sarcină importantă și provocatoare, fiind o parte esențială în multe aplicații cum ar fi în procesarea și căutarea de imagini.

Cea mai simplă metodă de detecție și segmentare de obiecte dintr-o imagine, în cazul nostru mâna umană, este reprezentată de metoda pe care am folosit-o, și anume, metoda bazată pe detecție de culoare. Este indicat ca mâna și fundalul imaginii să aibă o diferență semnificativă de culoare pentru a putea detecta cu succes mâna folosind metoda bazată pe detacția de culoare.

Pentru a putea începe să scriem acest program trebuie mai întâi să se instaleze Microsoft Visual Studio. Se va lucra pe sistem de operare Windows 7 pe 64 de biți, astfel se instalează Microsoft Visual Studio 2010 care este compatibil cu sistemul de operare. Următoarea etapă este de a instala biblioteca OpenCV 2.3.

Instalarea bibliotecii OpenCV

După ce avem instalate atât Microsoft Visual Studio cât și OpenCV, se va crea un nou proiect de tip Visual C++ Win32 Console Application. În urma creării cu succes a unui nou proiect se va face configurarea Visual Studio astfel:

Din meniul de bare de instrumente se selectează Project Properties pentru a accesa dialogul de proprietăți

În casuța din stânga vom da click pe Configuration properties și apoi în colțul din dreapta sus Configuration Manager

Din căsuța de dialog Configuration Manager care se va deschide, sub Active Solution Platform se selecteaza New

După ce se va deschide căsuța de dialog New Solution Platform, sub Type or select new platform, se selecteaza x64, deoarece lucrăm pe Windows 7 x64, Copy settings from: Win32, și ne asigurăm ca este bifată căsuța cu denumirea Create new project platforms. Apoi apăsăm OK

Se va observa că în căsuța de dialog Configuration Manager este selectat acum x64 și apăsăm Close

În căsuța din stânga alegem Configuration Properties C++ General

La Additional Include Directories introducem registrul de adrese pentru Include din folderul OpenCV-ului

În continuare alegem Configuration Properties Linker Input și în casuța Additional Dependencies introducem bibliotecile pe care le vom folosi, și anume : opencv_highgui220d.lib, opencv_video220d.lib, opencv_core220d.lib, opencv_ml220d.lib, opencv_legacy220d.lib, opencv_imgproc220d.lib

În continuare se va începe scrierea codului corespunzător aplicației.

Crearea proiectului

În primul rând, vom crea un proiect de tipul Win32 console aplication și îi vom da un nume. Se va deschide un proiect gol cu o funcție principală. Se vor adăuga următoarele fișiere antet la cod:

#include ”cv.h”

#include ”highgui.h”

Înțelegerea codului

Vom începe prin scrierea funcțiilor pentru obținerea unui cadru video. Pentru a obține un cadru video, se va crea în OpenCV o structură de tip CvCapture. Această structură este definită în antetele OpenCV și reprezintă o camera video. După ce structura a fost creată cu succes, se poate solicita afișarea unui cadru curent. Daca se solicită în mod repetat cadrul curent, se vor obține imagini în timp real. Acest lucru se va realiza prin crearea unei bucle infinite în care se va solicita imaginea curentă.

Vom începe prin crearea structurii de captură, astfel vom adăuga următoarele linii de cod în cadrul funcției principale:

CvCapture* capture = 0;

capture = cvCaptureFromCAM(0);

Capture reprezintă pointerul care indică sprea structura CvCapture. Inițial aceasta va fi setată pe zero. Apoi se va inițializa captura pentru a indica camera web conectată la calculator.

Odată ce inițializarea capturii a fost realizată, trebuie să ne asigurăm că a fost inițializată în mod corespunzător. Pentru a face asta trebuie verificat dacă captura este diferită de zero. În cazul în care este diferită de zero, atunci va indica în mod corespunzător camera web dorită. Se va adăuga următoarele linii de cod:

if (!capture)

{

printf("Eroare la captura video\n");

return -1;

}

namedWindow("Video in timp real", CV_WINDOW_AUTOSIZE);

Dacă captura este diferită de zero, atunci aceasta a fost inițializată. Dacă nu, se va afișa pe ecran un mesaj și programul se va închide singur. Deasemenea, se va crea a nouă fereastră, pe care o vom denumi „Video in timp real”.

Acum ca avem o structură CvCapture, se poate solicita de la OpenCV să afișeze cadre surprinse de camera web ori de câte ori avem nevoie. Vom începe prin crearea unei bucle infinite. Se va adăuga acest cod la funcția principală:

while (true)

{

Următorul pas este de a crea o structură de tip IplImage. Această structură va stoca imaginea capturată de la camera web:

IplImage* frame = 0;

Apoi vom apela la OpenCV pentru a ne da ultimul cadru folosind funcția cvQueryFrame:

frame = cvQueryFrame(capture);

if (!frame)

return -1;

Funcția cvQueryFrame consideră captura ca fiind un parametru. În cazul în care avem mai multe camere web conectate la sistem, se vor putea accesa imaginile de la camera pe care o dorim, iar restul se vor ignora.

Apoi se va verifica dacă imaginea pe care am captato este validă sau nu. Dacă este egală cu zero, înseamnă ca imaginea este invalidă și vom ieși imediat din bucla infinită.

În final, vom afișa imaginea dorită în fereastra denumită „Video in timp real”:

imshow("Video in timp real", final);

Datorită faptului că avem o buclă infinită, trebuie să avem un mecanism de ieșire din această buclă. Se va folosi funcția cvWaitKey(). Se va folosi această funcție având două scopuri, și anume: în primul rând pentru a crea o întârziere între captarea imaginilor, pentru a limita numărul de imagini luate pe secundă; și în al doilea rând pentru a verifica ce tastă a fost apăsată, pentru a fi în măsură să ia decizia când să renunțe.

În primul rând, pentru a crea o întârziere se va scrie următoarea linie de cod:

int c = cvWaitKey(10);

Acest lucru ne asigură faptu că programul se oprește și așteaptă pentru 10 milisecunde. În cazul în care în acest interval de timp se va apăsa o tastă, valoarea ASCII a tastei apăsate va fi atribuită variabilei c.

Putem apoi verifica valoarea variabilei c pentru a decide când să se iasă din bucla infinită. Vom realiza acest lucru folosind următoarele:

if ((char)c == 27)

break;

}

Codul ASCII pentru tasta Escape este reprezentat de 27. Astfel bucla infinită se va termina de fiecare dată când tasta Escape va fi apăsată.

Odată ce se iese din bucla infinită, este necesar să eliberăm camera web, astfel încât aceasta să poată fi folosită în continuare. Acest lucru va fi înfăptuit astfel:

cvReleaseCapture(&capture);

return 0;

}

Astfel am reușit să efectuăm folosirea camera web pentru a capta imagini în timp real.

După ce s-a obținut un cadru video în timp real, se va continua implementarea aplicației prin scrierea funcției de binarizare a imaginii:

IplImage* GetThresholdedImage(IplImage* imgHSV)

{

Această funcție va accesa imaginea originală, și va returna o imagine binară, în care culoarea pielii mâinii va fi înlocuită cu alb, iar restul imaginii va fi înlocuită cu negru. Mai jos avem un exemplu de binarizare a imaginii:

Binarizare

Pentru a obține binarizarea imaginii, se va folosi modelul de culoare HSV în locul celui mai cunoscut model de culoare, și anume modelul de culoare RGB. În ceea ce privește modelul de culoare folosit în realizarea acestei aplicații, HSV, fiecărei „nuanțe” de culoare i se atribuie o valoare separată de maxim și minim, care va fi reprezentată de variabila Hue. Intensității culorii ii este atribuită o altă valoare reprezentată de variabila Saturation, iar luminozității din culoare ii este alocată o altă valoare reprezentată de variabila Value din modelul de culoare HSV.

Acest lucru ne oferă avantajul de a avea o singură nuanță pentru culoarea mâinii, care tinde spre galben, în locul mai multor nuanțe de galben, de la galben închis la galben strălucitor.

Deoarece am considerat că este mai avantajos să lucrăm in modelul de culoare HSV, se va converti imaginea dintr-o imagine RGB într-o imagine HSV astfel:

IplImage* imgHSV = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 3);

cvCvtColor(frame, imgHSV, CV_BGR2HSV);

Se va păstra imaginea originală, frame, intactă, pentru a o mai putea folosi pe viitor. Imaginea originală este captată în formatul RGB, așa că o vom converti din RGB în HSV.

Următorul pas este de a crea o nouă imagine care va deține imaginea binarizată.

IplImage* imgBinarizata = cvCreateImage(cvGetSize(imgHSV),

IPL_DEPTH_8U, 1);

Prin intermediul următoarelor linii de cod se va realiza cu adevărat binarizarea:

cvInRangeS(imgHSV, cvScalar(h1, s1, v1), cvScalar(h2, s2, v2), imgBinarizata);

În cazul de față, imgHSV constituie imaginea de referință. Iar primul cvScalar întâlnit reprezintă limita inferioară a valorii HSV, care sunt de culoarea mâini, iar cel de-al doilea cvScalar reprezintă limita superioară a valorii HSV.

Variabilele h1, s1, v1 și h2, s2, v2 vor fi inițializate la începutul aplicației cu valori care vor fi echivalente cu valorile HSV ale culorii pielii mâinii.

În cele din urmă, înainte de finalizarea funcției de binarizare, se va elibera imaginea temporară HSV și se va returna imaginea binarizată:

cvReleaseImage(&imgHSV);

return imgBinarizata;

După ce s-a realizat binarizarea imaginii cu succes, se vor folosi calcule bazate pe matematică pentru a afla poziția mâinii în cadrul video.

Se vor calcula unele momente pentru a estima poziția mâinii umane astfel:

CvMoments *moments = (CvMoments*)malloc(sizeof(CvMoments));

cvMoments(imgBinarizata, moments, 1);

Iar apoi valorile reale ale momentelor:

double moment10 = cvGetSpatialMoment(moments, 1, 0);

double moment01 = cvGetSpatialMoment(moments, 0, 1);

double area = cvGetCentralMoment(moments, 0, 0);

În primul rând se va aloca memorie pentru structura de momente, și apoi se vor calcula diferite momente. În continuare, folosind structura de momente, se vor calcula cele două momente de ordin întâi, moment10 și moment01, și momentul de ordin zero, area.

Împărțind momentul de ordin întâi, moment10, la momentul de ordin zero, area, se vor afla coordonatele X ale mâinii, și în mod asemămător, împărțind momentul de ordin întâi, moment01, la momentul de ordin zero, area, se vor afla coordonatele Y ale mâinii.

int lastX = posX;

int lastY = posY;

int posX = moment10 / area;

int posY = moment01 / area;

Poziția curentă a mâinii va fi stocată în variabilele posX și posY, iar poziția anterioară a mâinii este stocată în variabilele lastX și lastY.

Apoi, dupa ce s-a aflat poziția mâinii, se vor putea controla prezentarile Powerpoint prin poziționarea mâinii în anumite locuri prestabilite din cadrul video.

În cele din urmă, la final, odată ce bucla infinită a luat sfârșit, se va elibera camera astfel încât aceasta să poată fi folosită în continuare:

cvReleaseCapture(&capture);

return 0;

Acest capitol a fost dedicat înțelegerii implementării aplicației de control a prezentărilor prin intermediul gesturilor, aplicație care a fost implementată în limbajul de programare C cu ajutorul bibliotecii OpenCV.

Implementarea interfeței

În cadrul acestei aplicații, voi procesa un cadru video în care va apărea mâna umană și voi crea un cadru video binarizat prin detectarea culorii pielii mâinii. Pe ecran vor fi afișate două ferestre, una care va conține imaginea originală în timp real, iar cealaltă va conține imaginea binarizată. Astfel, zonei din cadrul video care va conține culoarea pielii mâinii i se va atribui valoarea '1', iar celailalte zone i se va atrivbui valoarea '0' în imaginea binarizată, astfel încât se va observa o zonă albă de fiecare dată când mâna se află în cadrul video-ului original. Deasemenea se va crea o fereastră, trackbar, de unde vom putea ajusta valorile minime și maxime HSV manual.

Modelarea sistemului

Modelarea sistemului se face în scopul proiectării și realizării unui sistem computerizat. După construirea unui sistem informațional, ca suport al unei activități practice, se va crea un model abstract care să ilustreze structura acelei acivități precum și necesarul de informație prin care activitatea sa să se indeplinească cu succes.

Modelul este o reprezentare a realității obiective și constituie o descriere simplificată și fundamentală în sensul structurilor logice a sistemului sau procesului reprezentat. Acesta facilitează descoperirea unor legături foarte greu de găsit pe alte căi.

Modelul de recunoștere a sistemului

Modelul de recunoaștere a sistemului constă în general în următoarele etape consecutive: preprocesare, extragerea trăsăturilor mâinii, și clasificare.

O descriere a modelului de recunoaștere a sistemului

Preprocesarea

Preprocesarea este realizată având unul sau două scopuri: pentru a reduce zgomotul și unele efecte ale sistemului, sau pentru a transforma imaginea intr-un spațiu diferit în care clasificarea poate fi realizată mai ușor prin exploatarea anumitor caracteristici.

Extragerea trăsăturilor

Extragerea trăsăturilor mâinii este realizată deasemenea cu două scopuri. În primul rând, ajută la reducerea dimensiunilor datelor, și deasemenea este utilă în capturarea caracteristicilor unor date specifice, eliminând redundanța. În mod similar, pot exista informații explicite în imagine care pot fi folosite pentru a descrie imaginea. Îndepărtarea redundanței este deasemenea o problemă importantă în aplicațiile de procesare a imaginii. În majoritatea cazurilor de recunoaștere a unor forme din imagini, tehnica folosită este realizată doar prin prelucrarea semnalului, fără a folosi alte informații vizuale din semnal. Astfel, întreaga imagine trebuie folosită pentru a extrage informațiile utile. În consecință, memoria necesită să fie eliberată, și este foarte important să se reducă dimensionalitatea imaginii.

Clasificarea

Clasificarea se realizează prin modelarea matematică a comportamentului vectorilor trăsăturilor prin descrieri adecvate pentru a defini unele regiuni de decizii. Orice model nou va fi apoi clasificat în funcție de regiunea de decizie în care se încadrează.

Procesul de utilizare

În cadrul acestui subcapitol se va oferi o descriere generală a modului în care va fi utilizat sistemul pentru controlul prezentarilor în timp real. Deasemenea se va furniza o privire de ansamblu a funcționalităților ce se doresc a fi oferite de sistem.

Diagrama Use Case

Din această diagramă use case putem extrage următorul scenariu de funcționare a programului:

Ulilizatorul porneste camera web

Se obține cadrul video dorit

Se detectează mâna prin detecția de culoare în modelul de culoare HSV

Se obține poziția mâinii în cadrul video

Se urmărește traiectoria mâinii

Se execută comenzile pentru controlul prezentărilor Powerpoint în funcție de poziția și traiectoria mâinii (deschidere prezentare Powerpoint, deschidere prezentare nouă din computer, activarea funcției ecran complet, accesarea slide-ului următor, resprectiv accesarea slide-ului anterior)

Diagrama de secvență

Diagrama de secvență prezintă secvența de mesaje corespunzătoare sistemului în timp real. Această diagramă prezintă interacțiunile care au loc între diverse obiecte ale unui sistem, ordonate cronologic.

Diagrama de secvență

Cu ajutorul bibliotecii OpenCV am realizat funcțiile de detecție și de aflare a poziției și a traiectoriei mâinii umane în scopul de a manipula prezentările prin intermediul acestor funcții. În acest caz, în care se dorește detecția și urmărirea mâinii, camera fixată într-o anume poziție, având ca fundal peretele. Programul folosește detecția de culoare în modelul de culoare HSV, pentru a identifica mâna.

Diagrama de stare

Diagrama de stare

Testarea aplicației

Un stadiu deosebit de important este testarea aplicației în diferite condiții de iluminare. Această aplicație trebuie să permită funcționarea corectă și fără erori atât în medii de luminozitate scăzută, cât și în medii unde luminozitatea este mai ridicată.

Pentru a putea evalua într-o primă etapă aplicația pe care am realizat-o, am realizat testarea acesteia în decursul a trei momente din ziuă. Prima dată se va realiza detecția mâinii într-un mediu în care luminozitatea este ridicată. În imaginile de mai jos se pot vedea două imagini care conțin captura originală a mâinii în mediul de luminozitate ridicat, și captura mâinii binarizate în același mediu.

Captura originală a imaginii Captura originală a imaginii

în mediul de luminozitate ridicată în mediul de luminozitate ridicată

Din analiza acestor imagini putem spune că detecția mâinii în acest mediu a avut succes, însă trăsăturile mâinii sunt destul de slab vizibile, astfel detecția mâinii nu a fost realizată cu cea mai mare exactitate. Lumina naturală care a pătruns în cadrul nostru video a determinat ca mâna umană să nu fi în totalitate vizibilă.

În următoarele imagini se va observa testarea aplicației într-un mediu mai benefic pentru desfășurarea aplicației, și anume, într-un mediu cu luminozitate scăzută.

Captura originală a imaginii Captura binarizată a iamaginii

în mediul de luminozitate scăzută în mediul de luminozitate scăzută

Se poate observa o mare diferență între capturile mâinii din mediu cu luminozitate scăzută și din mediul cu luminozitate ridicată. În cazul detecției mâinii într-un mediu în care lumina naturală nu a pătruns foarte mult, se poate sesiza o detecție foarte clară a mâinii. Acest lucru este bine evidențiat în imaginea binarizată a imaginii din mediul cu luminozitate scăzută.

La sfârșitul experimentului am identificat faptul că aplicația este foarte utilă. Datorită faptului că aplicația se bazează pe detecția mâinii, iar apoi în funcție de detecție se vor executa diferite comenzi pentru a controla prezentările, din testările mai sus exemplificate putem spune ca aplicația este funcțională atât în condiții de luminozitate scăzută, cât și în condiții de luminozitate ridicată. Chiar dacă această aplicație poate fi folosită în condiții de luminozitate diferite, aceasta va da cel mai mare randament atunci când este folosită în medii în care lumina naturală nu patrunde foarte mult în cadrul video.

Concluzii

Potențiali utilizatori

Această aplicație va perimite interacțiunea naturală cu sistemele informatice, prin intermediul gesturilor, fără a obliga utilizatorul să poarte dispozitive speciale. Aceasta putea fi integrată în sistemele de realitate virtuală pentru facilitățile de interacțiune aduse. Luând în calcul categoriile de utilizatori, studenți, profesori, proiectanți, utilizatori casnici, ai acestor computere, se poate observa că acest sistem ar putea beneficia de o cerere enormă pe piață, costul fiind unul redus datorită avantajului de a nu fi dependent de alte dispozitive cum ar fi manuși cu senzori sau telecomande speciale.

Posibilități de dezvoltare

Sistemul actual nu are o bună metodă de extragere a fundalului care să poată fi folosită în orice situație, fără să se facă ajustări anterioare. Astfel, sistemul actual pune o mulțime de constrângeri asupra utilizatorului pentru a îl accesa cu succes. Pe viitor se propune reducerea acestor constrângeri, astfel încât aplicația să poată fi utilizată cu mai multă ușurință în orice situație. Deasemenea, detectarea mâinii va fi îmbunătățită pentru a fi mai precisă și pentru a produce rezultate mai bune.

Totodată, pe viitor se dorește îmbunătățirea preciziei de clasificare care se poate realiza prin intermediul unui set optimizat de caracteristici. Unele caracteristici suplimentare pot fi extrase din imagine și pot fi folosite în clasificare, cum ar fi detecția de degere și calcului de numere de degete ridicate cu ajutorul unui cerc de încadrare în jurul mâinii.

Tendința de a integra camerele web în dispozitivele de calcul personale dă naștere la o importantă oportunitate de a dezvolta interfețe între om și calculator mult mai naturale care se bazează pe gesturi. Prin intermediul acestei lucrări am prezentat un sistem care dobândește și clasifică gesturile mâinii ale utilizatorului în timp real, și interpretarea acestora cu scopul de a realiza controlul prezentărilor.

Această meodă constă într-o nouă modalitate de a controla o prezentare printr-o metodă care nu necesită contactul fizică cu computerul, folosind doar mâna utilizatorului. Această metodă este bazată pe utilizarea bibliotecii OpenCV care a facut posibilă extragerea de informații folositoare.

În cadrul acestei lucrări, am descris cum un sistem informatic poate fi controlat de către oameni, doar prin intermediul gesturilor mâinii. Am dezvoltat un algoritm simplu dar eficient de detecție a mâinii și apoi de a controla prezentările de tip Powerpoint cu ajutorum mâinii, care rulează în timp real într-o gamă largă de condiții de iluminare. În comparație cu celelalte aplicații realizate până în prezent, acest sistem este deosebit datorită faptului că orice utilizator poate pur și simplu să se deplaseze în fața videoproiectorului și să înceapă interacțiunea cu sistemul, luând astfel locul celuilalt utilizator.

Datorită organizării acestei aplicații, prezentările pot fi foarte ușor controlate prin interacțiunea cu mâna umană. Această metodă bazată pe captură video este simplă, rapidă și eficientă. Am implementat o aplicație care are loc în timp real, această tehnică permițând utilizatorului să controleze prezentările doar prin poziționarea mâinii în anumite locuri din cadrul video, și deasemenea prin urmărirea traiectoriei mâinii de la stânga la dreapta și invers.

Una dintre principalele avantaje ale acestei aplicații constă în abilitatea de a controla prezentările fără a purta alte dispozitive, folosind doar mișcările mâinii și o cameră web conectată la computer.

Comenzile pe care le-am implementat în aplicație ne permit să deschidem un document de tip powerpoint, să alegem un alt document din computer pe care dorim să îl deschidem, să vizualizăm prezentarea în modul Fullscreen, să facem trecerea de la un slide la următorul slide (prin mișcarea orizontală a mâinii de la dreapta la stânga) și la slideul anterior (de la stânga la dreapta).

Acest program, în primul rând, folosește tehnici de procesare a imaginilor pentru a anula fundalul și zgomotul. Apoi se vor extrage caracteristici relevante pentru clasificare, precum poziția și traiectoria mâinii. Aplicația este robustă și funcționează bine pe diferite fundaluri, în condiții diferite de iluminare și în condiții cu zgomot moderat.

O problemă principală care stă în calea celor mai multe abordări este că se bazează pe unele ipoteze care pot fi potrivite într-un mediu controlat. Una dintre ipoteze este reprezentată de condițiile de iluminare ambientale și presupunerea mediilor în care se poate realiza un contrast ridicat între mână și fundal.

Bibliografie

Similar Posts

  • Efectele Educației Creștine

    EFECTELE EDUCAȚIEI CREȘTINE ASUPRA DEZVOLTĂRII MORALE ȘI ETICE LA ADOLESCENȚI ȘI TINERI CUPRINS PRIMA PARTE REZUMATUL……………………………………………………………………………….. CAPITOLUL I. INTRODUCERE…………………………………………………… CAPITOLUL II. CADRUL TEORETIC AL ADOLESCENȚEI…… 2.1. Adolescența si etapele ei……………………………………………………………….. 2.2 Definiția adolescentei……………………………………………………………………… 2.3 Personalitatea adolescentului…………………………………………………………….. 2.4 Dezvoltarea morală și etică în adolescență…………………………………………… 2.5 Principalii factori educativi: familia și școala…………………………………………. 2.6 Educația creștină a adolescentului…………………………………………………………….

  • . Anxietatea

    ARGUMENT Anxietatea este una dintre cele mai răspândite tulburări ale afectivității, deoarece societatea modernă este generatoare de stres prin stilurile de viață diferite, muncă, necesități diversificate, etc. Cauzele anxietății se datorează în primul rând schimbărilor radicale ce au loc în viața noastră și evenimentelor care ne induc stări de neliniște și stres. Studiile și cercetările…

  • Identificarea Intereselor Si Resurselor Cognitive Pentru Orientarea In Cariera a Adolescentilor

    IDENTIFICAREA INTERESELОR ȘI RESURSELОR CОGNITIVE PENTRU ОRIENTAREA ÎN CARIERĂ A ADОLESCENȚILОR Prоiect de licență PLAN: INTRОDUCERE PRОBLEMA ОRIENTĂRII PRОFESIОNALE A TINERILОR ÎN PRОIECTAREA CARIEREI Nоțiuni de оrientare prоfesiоnală, autоdeterminare, interese și valоri prоfesiоnale în literatura de specialitate Оrientarea prоfesiоnală la vîrsta adоlescentă 1.3. Sursele de informare în orientarea profesională 1.4. Investigarea caracteristicilоr persоnale relevante pentru…

  • Imbunatatirea Rezultatelor Scolare la Matematica Prin Aplicarea Testelor Sumative Alcatuite din Itemi Structurati

    LUCRARE DE LICENȚĂ Îmbunătățirea rezultatelor școlare la matematică prin aplicarea testelor sumative alcătuite din itemi structurați CUPRINSUL LUCRĂRII INTRODUCERE CAPITOLUL I DELIMITĂRI CONCEPTUALE EVALUAREA ÎN PROCESUL INSTRUCTIV- EDUCATIV 1. DEFINIRE ȘI COMPONENTE 2. FUNCTII 3. UN NOU MOD DE EVALUARE CAPITOLUL II DELIMITĂRI TEORETICO-PRACTICE 2.1 ITEMI …………… 2.1.1.TEMI – DEFINIRE ȘI CLASIFICARE 2.1.2. ITEMII OBIECTIVI…

  • Efectele DE Relaxare Asupra Stresului (sugestiologie)

    EFECTELE DE RELAXARE ASUPRA STRESULUI (SUGESTIOLOGIE) Rezumat În ziua de azi, când în toate societatile dezvoltate sau mai putin dezvoltate, omul este supus la numeroase și variate solicitari, psihicul uman este asaltat, agresat de numeroși stimuli (agenti stresori) într-un fel sau altul. Stresul denumit generic „boala secolului douazeci” și chiar a secolului douazeci și unu,…

  • Ipostaze ale Relatiei Terapeut Pacient

    CUPRINS INTRODUCERE………………………………………………………………………………………………………….3 CAPITOLUL I I.1. Definiția psihoterapiei …………………………………………………………………………………………………………..5 I.2. Obiectivele psihoterapiei………………………………………………………………………………………………6 I.3. Principii etice și deontologice ale profesiei de psihoterapeut………………………………………….7 I.4. Etapele demersului terapeutic………………………………………………………………………………………9 CAPITOLUL II II.1. Elemente comune care caracterizează desfășurarea procesului psihoterapeutic…………..15 II.1.1. Relația stabilită între psihoterapeut și pacient……………………………………………………………15 II.1.2. Cadrul terapeutic și atmosfera de eveniment a ședințelor psihoterapeutice…………………..17 II.1.3. Dorința de schimbare…