Sisteme Si Tehnici din Domeniul Computer Vision

LUCRARE DE DISERTAȚIE

SUPRAVEGHERE VIDEO FOLOSIND SISTEME ȘI TEHNICI DIN DOMENIUL COMPUTER VISION

CUPRINS

1. Introducere

2. Ce ne propunem

3. Stadiul actual

3.1. Sisteme de recunoaștere facială

3.1.1. Recunoaștere facială folosind viziunea stereo pasivă

3.1.2. Sistem de recunoaștere facială pentru șoferi

3.2. Sisteme de detecție a mișcării

3.2.1. Detectarea mișcării în timp real folosind camera Kinect

3.2.2. Detectarea mișcării pe baza secvențelor video cu cadre multiple

3.2.3. Detectarea mișcării pe baza expresiilor faciale

4. Implementarea sistemului de recunoaștere facială

4.1. Concept

4.2. Descriere algoritmi

4.3. Implementare

4.4. Rezultate obținute

5. Implementarea sistemului de detecție a mișcării

5.1. Concept

5.2. Descriere algoritmi

5.3. Implementare

5.4. Rezultate obținute

6. Implementarea sistemului de alertare telefonică

6.1. Concept

6.2. Descriere algoritmi

6.3. Implementare

6.4. Rezultate obținute

7. Concluzii și propuneri pentru viitor

Bibliografie

1. Introducere

Proiectul de față propune un sistem video de supraveghere al unei încăperi, prin îmbinarea unui sistem de recunoaștere facială cu un sistem de detectare a mișcării înregistrând cadre doar atunci când a sesizat mișcarea.

Locul unde sistemul de supraveghere va fi instalat este o locuință obișnuită.

Ce ne face diferiți este faptul că vom integra toate aceste funcționalități într-o aplicație inteligentă – sistemul de recunoaștere facială va analiza toate persoanele care vor intra în locuință, iar sistemul de detectare al mișcării are rolul de a înregistra date doar atunci când va sesiza mișcări și nu orice cadru va fi înregistrat.

În cazul în care apare o urgență, o alertă va fi trimisă către proprietarul apartamentului prin care îl sesizăm că un intrus a pătruns în locuință.

De asemenea, el poate folosi aplicația pentru a primi în timp real imagini video din locuință. Momentan, aplicația este disponibilă doar pentru telefoane Android.

Prin algoritmul de detectare facială, subiectul este identificat în urma trăsăturilor sale distinctive de la nivelul feței, cum ar fi oase, ochi, nas și bărbie. Este ceva nou și este documentat că are o mai mare acuratețe față de restul algoritmilor.

Sistemul de detectare a mișcării folosește un algoritm bazat pe aproximări ale fundalului. Principiul este să construim un model al scenei statice (nici un obiect în mișcare în cadru) și apoi să comparăm fiecare cadru din secvență cu fundalul inițial, pentru a vedea regiuni anormale ale mișcării (obiectele aflate în mișcare).

Adăugând aceste funcționalități împreună, vom oferi un sistem complet și viabil de supraveghere al locuinței pentru oricine.

În primul semestru de cercetare am studiat cele mai importante lucrări din domeniul sistemelor de supraveghere video. Aceste rezultate se găsesc în capitolul 3.

În al doilea semestru de cercetare, am analizat algoritmii de detectare facială și de detecție a mișcării (în special cei bazați pe flux optic). Evaluarea performanțelor, rezultatele obținute sunt descrise în capitolele 4 și 5.

Al treilea semestru de cercetare a constat în aprofundarea algoritmiilor de detecție facială și de mișcare. Rezultatele se pot vedea, de asemenea, în capitolele 4 și 5.

În final, redarea secvențelor video preluate de camera web și transmise telefonului mobil, precum și protocoalele de transmisie, sunt detaliate în capitolul 6.

2. Ce ne propunem

Dezvoltarea științei și tehnicii, apariția calculatorului și, mai ales, a soft-ului special pentru sistemele de supraveghere video oferă o perspectivă mai largă de viitor.

Această lucrare își propune să vină în sprijinul persoanelor care doresc supraveghere video asupra locuinței și se adresează oricărui utilizator obișnuit care are un telefon și o cameră video. Sistemul utilizează o aplicație simplă de folosit și poate înlocui cu succes sistemele de supraveghere video complexe.

În prima parte a lucrării (capitolul 3), prezentăm cele mai inovative proiecte realizate în domeniul sistemelor de supraveghere video, în principiu asupra sistemelor bazate pe recunoașterea facială și a tehnologiilor noi, actuale. Vom vedea cele mai importante proiecte și prototipuri din domeniul studiat: recunoașterea facială folosind viziunea stereo pasivă, sistem de recunoaștere facială pentru șoferi, detectarea mișcării folosind camere Kinect în timp real, detectarea mișcării pe baza secvențelor video cu cadre multiple

În a doua parte a lucrării prezentăm algoritmii de detectare a mișcării, în speță cei bazați pe flux optic și algoritmii de detectare facială 3D (capitolele 4 și 5).

Ultima parte a lucrării cuprinde sistemul de alertare telefonică, iar în capitolul 6 principalele obiective urmărite sunt:

dezvoltarea unui serviciu pe baza protocolului HTTP Live Streaming care ascultă fluxul de date și produce secvențe video împărțite în mai multe segmente;

implementarea mai multor metrici de analiză al evaluării algoritmilor;

evaluarea mecanismelor de streaming video pe partea de client care sunt capabile să producă un transfer de biți cât mai mare;

testarea condițiilor rețelelor mobile în cazul în care avem pierderi de pachete, timpi morți, pachete pierdute, segmentări și întârzieri în trimiterea și primirea pachetelor.

În concluzie, deși cercetările din ultimele două decenii și-au adus o contribuție majoră în tehnologia video, existând multe firme internaționale care oferă produse variate pe piața utilizatorilor, totuși mai sunt încă de rezolvat anumite aspecte ce țin de performanța aplicațiilor și implementarea unor metode mai adecvate pentru analiză. În ceea ce privește aplicațiile pentru persoane obișnuite, procesarea video ocupă un loc important în Anglia, unde există deja implementate sisteme complete de supraveghere video cu voce pentru utilizatori obișnuiți ce pornesc chiar și de la achiziția de texte prin camera video, recunoașterea textului sau rostirea acestuia prin voce sintetizată.

3. Stadiul actual

3.1. Sisteme de recunoaștere facială

3.1.1. Recunoaștere facială folosind viziunea stereo pasivă

Un grup de studenție din Japonia descriu într-un articol de la ISPACS, o soluție inovativă pentru recunoașterea facială 3D folosind viziunea stereo.

Proiectul propune un algoritm de recunoaștere facială 3D folosind viziunea stereo pasivă. Până acum, sistemele de recunoaștere facială 3D, foloseau măsurări active 3D pentru captura facială, însă, metodele active folosesc iluminare structurală sau scanare cu laserul, ceea ce nu este dorit în multe aplicații de recunoaștere facială.

Având în vedere acest deficit, se propune un sistem de recunoaștere facială care folosește AdaBoost – detecție facială, pentru a extrage automat regiunea feței dintr-o imagine; viziune stereo pasivă pentru a captura informația 3D facială și un algoritm ICP (în engleză, Iterative Closest Point) pentru a potrivi chipul.

Din experimente, s-a demonstrat o performanță eficientă de recunoaștere a sistemului propus. AdaBoost – detecția facială folosește caracteristici Haar, obținute aplicând patru tipuri de ferestre dreptunghiulare unei imagini. Caracteristicile Haar sunt extrase dintr-o subfereastră dreptunghiulară a unei poziții arbitrare și din dimensiunea imaginii de intrare, iar ulterior sunt folosite pentru a determina dacă subfereastra include o față sau nu. În timp ce filtrele dreptunghiulare binare sunt aplicate prin schimbarea ratei de aspect a dimensiunii și a locației din interiorul subferestrei de dimensiune 24 x 24, numărul total de filtre sunt de ordinul zecilor de mii. Un filtru dreptunghiular eficient pentru detecția feței este doar o mică parte din acestea. Prin urmare, un algoritm AdaBoost este folosit pentru a selecta eficient filtrele.

Clasificatorii generați (clasificatori slabi) sunt bazați pe caracteristicile Haar obținute prin selecția filtrelor, unde clasificatorul slab determină dacă subimaginea include o față sau nu.

În timpul procesului de învățare al clasificatorilor slabi se generează imagini cu fețe și imagini care nu conțin fețe pentru a eficientiza învățarea. Clasificatorul final (care este un clasificator puternic) este generat prin combinarea tuturor clasificatorilor slabi. Un singur clasificator puternic detectează, de obicei, multe regiuni non-fețe. Pentru a detecta regiunile de fețe corect, se folosește conexiunea în cascadă a clasificatorului puternic, unde mulți clasificatori puternici sunt generați prin schimbarea exemplelor de față / non-față.

Performanța detecției de fețe este în creștere, pentru că subfereastra este recunoscută ca o față doar atunci când se trece prin tot clasificatorul puternic. Strategia poate reduce semnficativ timpul de calcul al detecției faciale, deoarece majoritatea subferestrelor sunt rejectate de primul clasificator puternic.

Performanța sistemului de recunoaștere facială 3D a fost evaluată într-un experiment cu 22 de subiecți.

În timpul experimentului, 5 capturi independente cu expresii neutre au fost capture în decursul unor sesiuni diferite pentru fiecare subiect, rezultând un total de 110 date faciale. Testarea recunoașterii a fost făcută utilizând un set de 5995 de perechi de date faciale, incluzând 220 de încercări reușite și 5775 de încercări neautentice.

La pasul de detecție facială, s-au folosit 200 de imagini față și 1916 de imagini nonfață pentru a antrena clasificatorii de detecție facială.

Distribuția arată minimul de valori de distanțe pentru încercările autentice și neautentice. O distanță cu valoarea între 0.63 – 0.64 mm poate fi aleasă ca un punct de separare, astfel încât oricare două date faciale generează o distanță mai mare decât punctul de separare, ele fiind capturate de la indivizi diferiți. Dacă două date faciale generează o distanță mai mică decât punctul de separare, atunci acestea vin de la același individ.

Astfel, s-a confirmat că sistemul de recunoaștere facială este capabil să obțină o acuratețe ridicată. Așa cum s-a observat în experimente, performanța de detecție a sistemului este egală cu cea a sistemului original, unde zona feței era specificată manual.

3.1.2. Sistem de recunoaștere facială pentru șoferi

Obiectivul principal îl constituie prevenirea șoferilor în a urca la volan când sunt în stare de ebrietate.

S-a dezvoltat o tehnologie prin care senzori transdermici sunt incorporați în volan și detectează nivelul de alcool în sânge, prin analiza gazului emis de palmele lor. Dacă nivelul este peste limita maximă admisă (setată în prealabil), individul nu este lăsat să conducă vehiculul.

Proiectul este momentan în stadiul de dezvoltare, cu obiectivul ca într-o bună zi să fie disponibil pentru cumpărătorii care doresc să-l integreze în propriul vehicul.

Un aspect bun al proiectul îl constă dezvoltarea algoritmului de detectare facială care funcționează în concordanță cu senzorii de testare al alcoolului prin autentificarea identității șoferului.

Prin acest sistem, numai indivizii autorizați cu un alcool în sânge sub nivelul maxim le este permis să conducă mașina, iar proprietarul decide cui îi este permis. O cameră mică dotată cu infraroșu este montată în mașină și face o poză șoferului. Mai departe, imaginea este comparată cu imaginile din baza de date. Sistemul verifică, de asemenea, în mod periodic cine conduce vehiculul.

3.2. Sisteme de detecție a mișcării

3.2.1. Detectarea mișcării în timp real folosind camera Kinect

Un prototip de detecție a mișcării foarte eficient a fost propus în IJCSI, noiembrie 2012 de către un grup de studenți din Malaiezia.

Cercetarea are intenția de a oferi o comunicație interactivă prin implementarea unei camere Kinect în lumea 3D. Proiectul este bazat pe detecția mișcării prin lumea virtuală 3D în lumea reală.

În prezent, combinarea expunerii 3D cu camera Kinect pare să fie un succes. Cercetările sunt bazate pe cum se poate implementa detecția mișcării folosind Kinect și cum poate ajuta oamenii să înțeleagă modul de funcționare.

Plașina, iar proprietarul decide cui îi este permis. O cameră mică dotată cu infraroșu este montată în mașină și face o poză șoferului. Mai departe, imaginea este comparată cu imaginile din baza de date. Sistemul verifică, de asemenea, în mod periodic cine conduce vehiculul.

3.2. Sisteme de detecție a mișcării

3.2.1. Detectarea mișcării în timp real folosind camera Kinect

Un prototip de detecție a mișcării foarte eficient a fost propus în IJCSI, noiembrie 2012 de către un grup de studenți din Malaiezia.

Cercetarea are intenția de a oferi o comunicație interactivă prin implementarea unei camere Kinect în lumea 3D. Proiectul este bazat pe detecția mișcării prin lumea virtuală 3D în lumea reală.

În prezent, combinarea expunerii 3D cu camera Kinect pare să fie un succes. Cercetările sunt bazate pe cum se poate implementa detecția mișcării folosind Kinect și cum poate ajuta oamenii să înțeleagă modul de funcționare.

Platforma software Kinect SDK este gândită să ofere o experiență de utilizare personalizată și customizată prin mediul 3D. În comparație cu majoritatea platformelor existente, Kinect Xbox este cu adevărat deschisă inovațiilor și experiențelor noi. Kinect SDK oferă unelte și API-uri necesare pentru interacțiune folosind propriile mișcări.

Kit-ul recent de dezvoltare are ultimele avantaje adăugate: procesare audio, care include un microfon cu 4-elemente cu un zgomot acustic sofisticat și închidere a ecoului pentru un sunet foarte clar, de cristal. Mai mult, datele de adâncime, care dau distanța unui obiect din camera Kinect, oferă oportunități pentru a crea interfețe de utilizator mai bogate. De asemenea, este foarte performant și robust în detectarea mișcărilor, a poziției corpurilor a uneia sau mai multor persoane din câmpul vizual.

Proiectul propune dezvoltarea unei aplicații care folosește gesturile pentru interacțiunea cu obiectele virtuale într-un mediu de realitate augmentată. Uzul tehnologiei Kinect este în creștere și schimbă în mod dinamic multe lucruri din lumea înconjurătoare.

Avatarul este creat în forma corpului uman. Acum, cu Avatar Kinect, se poate controla expresia facială a avatarului, a capului și mișcarea mâinilor. În timp ce vorbești, râzi, zâmbești, vocea și expresiile faciale sunt reflectate de avatar, dându-i astfel viață.

Acestea sunt prototipuri care exemplifică modul de funcționare al tehnologiei Kinect cu lumea înconjurătoare. Când mișcarea corpului uman este detectată, omul poate naviga singur în mediul 3D folosind propria mișcare a corpului.

De exemplu, mișcarea corpului uman este integrată în mediul virtual 3D care lasă avatarul să pășească în acest mediu.

În viitor, se dorește să se adauge funcționalități care lasă gesturile degetelor să fie translatate spre a simți mediul virtual prin atingerea obiectelor înconjurătoare.

3.2.2. Detectarea mișcării pe baza secvențelor video cu cadre multiple

O serie de algoritmi importanți au fost descriși în articolul publicat în revista IJETAE, din ianuarie 2012.

În această lucrare, varianța de pixel reprezintă un rol vital în detecția unui cadru aflat în mișcare dintr-un clip particular. Dacă există orice tip de mișcare mică într-un fișier, aceasta este detectată foarte ușor prin urmărirea varianței de pixel. Acest algoritm detectează zero varianța doar atunci când nu este nici un fel de mișcare în clip. Este simplu și ușor pentru detecția mișcării în cadre cu obiecte în mișcare din fișiere avi.

Există niveluri diferite unde urmărirea poate fi făcută. La cel mai înalt nivel, întregul corp este urmărit fără a fi atent la detaliile posturii și a membrelor. La un nivel mai jos, postura și membrelor sunt urmărite. La un nivel și mai jos, una din două părți ale corpului (cum ar fi mâinile) sunt urmărite. Cel mai de jos nivel ar fi urmărirea degetelor unei mâini sau expresiile faciale. Scopul lucrării este de a urmări întregul corp ca o singură unitate.

Lucrarea a răspuns la o întrebare crucială privind urmărirea obiectelor și sugerează nevoile sistemelor de supraveghere în termeni de securitate și în lumea high tech.

Criteriul de selecție este bazat direct pe definiția detecției de mișcare și algoritmiilor de urmărire care explică performanțele experimentale a detecției de mișcare dintr-un cadru generat de un clip. De obicei, analizează diferențele dintre două cadre succesive cu ajutorul pixelului variant. Scopul sistemului de supraveghere este să ofere mai multe informații despre obiectele în mișcare prin urmărirea mișcarii acestora în mai multe cadre la oricare loc de muncă (cum ar fi bănci, cinema, mall-uri, oficii etc.). Din datele experimentale, se explică de ce schimbarea varianței de pixel înseamnă, de fapt, că au avut loc schimbări în cadrul curent față de cel anterior.

O sarcină frecventă în analiza vizuală a scenelor naturale este urmărirea obiectelor în mișcare. Încercarea de a recunoaște obiecte reale într-un mediu non-artificial este, de obicei, foarte complex și are nevoie de mai mult timp de calcul. O soluție este de a urmări ținta cu camera și a o ține centrată în imagine.

Abordarea este echivalentă cu determinarea traiectoriei unui obiect aflat în mișcare într-o imagine de dimensiune mare. Astfel de probleme includ distincția între pixel și metrică. Odată cu detecția mișcării, calculele sunt făcute din două imagini pentru a determina ce tip de mișcare s-a făcut. Acest lucru se poate face fie cu dispozitive mecanice care interacționează fizic cu câmpul, fie de dispozitive electronice care cuantifică și măsoară schimbările din mediu.

Algoritmul detectează varianța zero doar atunci când nu există mișcare într-o pereche de cadre. Mai mult, se poate calcula intensitatea mișcării în perechi succesive de cadre. Dacă intensitatea mișcării al unei perechi curente de cadre va fi mai mare decât cea într-o pereche precedentă de cadre.

3.2.3. Detectarea mișcării pe baza expresiilor faciale

Ahmad R. Naghsh-Nilchi prezintă un algoritm de detectare a mișcării bazat pe flux optic care folosește o metodă diferită de detecție față de restul algoritmilor.

Una din cele mai populare metode de recunoaștere a expresiilor faciale, cum ar fi bucuria, tristețea și sentimentul de surpriză este bazată pe deformări ale caracteristicilor feței. Vectorii de mișcare care arată aceste deformări pot fi specificați de fluxul optic. În metoda de față, pentru detectarea emoțiilor, setul rezultat de vectori de mișcare sunt comparați cu un șablon standard de deformare care a cauzat expresia feței.

În această lucrare, o nouă metodă este introdusă pentru calculul cantității favorabile pentru a lua o decizie bazată pe importanța vectorilor obținuți din abordarea de flux optic. Pentru găsirea vectorilor, se folosește una din metodele eficiente dezvoltate de Gautama și VanHulle. Metoda a fost examinată pe baza de date Cohn-Kanade AU-Coded care este una din cele mai mari colecții de imagini de test disponibile.

Rezultatele experimentale arată că metoda folosită poate recunoaște corect expresii faciale în 94% din cazurile de studiu. Rezultatele arată, de asemenea, că doar câteva cadre de imagini (trei cadre) sunt suficiente pentru detectarea expresiei faciale cu o rată de succes de 83.3%. Acest lucru reprezintă o îmbunătățire semnificativă față de celelalte metode disponibile.

Algoritmul a fost examinat pe baza de date Cohn Kanade. Aceasta include aproximativ 1000 de secvențe de imagini captate din peste 100 de subiecți diferiți, cu vârste cuprinse între 18 și 30 de ani. 65% sunt femei, 15% afro-americani și 3% asiatici sau latini.

O proprietate a metodei din algoritm arată mulțimea de similarități pentru fiecare emoție. De asemenea, algoritmul detectează expresia facială cu un număr mic de cadre (3-4 cadre). Acest lucru înseamnă că și atunci când se pierd cadre, metoda funcționează.

Rezultatele obținute în urma analizării a numai trei cadre (primul, mijlocul și ultimul) al secvenței arată că algoritmul este capabil să recunoască expresii faciale cu o medie de succes de 83.3%. Algoritmul are o performanță bună chiar și pentru un număr limitat de cadre dintr-o secvență de imagini.

Ca limitări, se observă o rapiditate scăzută în calcularea datelor de flux optic și o dificultate de detectare a emoțiilor în cazul unei mișcări accentuate a capului. Mai mult, atunci când lumina este nefixată, algoritmul oferă multe dezavantaje.

În viitor, se dorește o creștere a vitezei algoritmul de flux optic și o îmbunătățire a tehnicilor de flux optic.

4. Implementarea sistemului de recunoaștere facială

4.1. Concept

Recunoașterea facială este o metodă biometrică non-invazivă și care poate fi folosită chiar fără ca subiectul să știe. Algoritmul de detectare facială se bazează pe algoritmul „Eigenface”, care se poate construi astfel:

colectăm câteva imagini (numărul lor îl notăm cu N) și le decupăm astfel încât ochii și bărbia să fie incluse;

convertim fiecare imagine (x cu y pixeli) într-un vector cu dimensiunea xy;

împachetăm vectorii sub formă de coloane într-o matrice de mare;

adăugăm xy – N vectori zero astfel încât matricea să fie pătratică (xy pe xy);

calculăm vectorii eigen ai matricei și îi sortăm astfel încât să corespundă valorilor eigen. Acești vectori sunt, de fapt, fețele eigen.

Pentru a rezolva problema în care folosim matrici de dimensiuni foarte mari, ne folosim de implementarea Karhunen-Loeve:

colectăm cele N imagini, le decupăm și le convertim în vectori;

calculăm matricea N pe N pe care o denumim L și reprezintă matricea produsului exterior;

intrarea a acestei matrici este produsul interior al vectorilor de imagine i și j. Ca și rezultat, L va fi simetrică și nenegativă;

calculăm vectorii eigen ai matricei L. Rezultatul va duce la N-1 vectori de lungime N;

folosim vetorii eigen ai matricei L pentru a construi fețele eigen astfel: pentru fiecare vector eigen v, înmulțim fiecare element cu imaginea corespunzătoare și îi adunăm. Rezultatul este o față eigen;

folosim aceeași metodă de sortare și proces de selectare descrise mai sus pentru a reduce la M fețe eigen.

Pornind de la acest algoritm și ținând cont de limitările sale (sensibilitate la luminozitate, orientări ale capului, expresii faciale și machiaj), descriem, mai jos, algoritmul de recunoaștere facială.

Este necesar să obținem mai întâi, suprafața facială a subiectului pe care dorim să-l recunoaștem. Aici, ne folosim de metode care produc gradientul suprafeței.

Tehnica fotometrică stereo constă în obținerea mai multor poze ale aceluiași subiect în diferite luminozități și extragerea geometriei folosind o reflecție Lambertiană a modelului. Presupunem că suprafața feței, reprezentată ca o funcție, este văzută dintr-o poziție dată a axei z. Obiectul este iluminat de o sursă paralelă de rază pe direcția .

Presupunem că avem o reflecție Lambertiană a modelului, adică imaginea observată este dată de relația:

unde este obiectul albeață și este normala la suprafața obiectului, definit ca:

Folosind notația matrice-vector, (1) poate fi rescrisă ca:

unde:

și:

Date fiind cel puțin trei independețe lineare de luminare , una poate reconstrui valorile lui prin soluția celor mai mici pătrate.

unde denotă pseudo inversa Moore-Penrose.

Când este nevoie, suprafața se poate reconstrui rezolvând ecuația lui Poisson:

Cercetătorii au propus o tehnică rezultată din reconstrucția gardienților de margini în 2d, prin care se poate reconstrui suprafața normalelor (gradienților) din două pattern-uri proiectate pe obiect.

Tehnica de reconstrucție este bazată pe faptul că direcțiile pattern-urilor proiectate capturate în imaginile 2d, depind the orientările locale ale suprafeței în 3d. Operatorii clasici de detactare a marginilor (cum ar fi Sobel, Canny, etc.) pot fi folosiți pentru a găsi direcția marginilor.

Un pixel din imaginea planului definețte vectorului vizibil s. Direcția marginei determină vectorul aflat atât în planul imaginii cât și în planul vizibil. Vectorul tangentă real a marginei proiectate este perpendicular la normala a planului vizibil și la normala p a marginei planului proiectat. Presupunând că este o proiecție paralelă, obținem:

Obținând o a doua imagine a scenei cu o margine luminoasă rotită relativă cu prima, putem să calculăm un al doilea vector tangentă . În continuare, suprafața normală este calculată conform relației:

4.2. Descriere algoritmi

Algoritmii de detecție facială sunt construiți astfel încât să limiteze setul de date pentru procesare și să producă invarianțe la diferite transformări. Variabilele locale caută punctele de interes din imagine și definesc punctele de ancorare care au regiunile locale date de diferențe în termeni de intensitate și textură. Acest lucru se face prin aplicarea unui kernel asupra imaginii; kernel se referă la calculul pixelilor care se schimbă în regiunea gradientului. Punctele de interes pot fi blob-uri, colțuri, joncțiuni-T etc., iar într-un caz ideal să fie identificate după ce imaginea a fost transformată în moduri diferite.

De exemplu, detectorul de colțuri Harris folosește intuitiv ideea că un colț perpendicular se găsește prin însumarea gradienților orizontali și verticali (dintr-o sub-imagine de pixeli). Dezavantajul este că rotație imaginii ar ascunde această trăsătură dacă masurătoarea a fost făcută perpendicular. Detectorul Harris compensează în cazul rotației prin aplicarea unei valori de descompunere eigen a matricei a doua de moment:

unde și reprezintă suma intensitățile pixelilor care se schimbă pe direcțiile y și x în punctul x. Dacă A are două valori eigen mari, atunci este centrat într-un colț.

În contrast cu metodele șablon tipice, cele locale pot exploata multe tipuri de invarianțe, chiar și ocluzii parțiale.

Tehnicile de recunoaștere facială sunt de regulă aplicate imaginiilor gradiente din mai multe motive: imaginile cu tonuri de gri sunt mai robuste la varianțe de lumină, iar matricele cu valori singulare de luminozitate sunt mult mai eficiente în termeni de consum de memorie și mult mai rapide în termeni de procesare.

După extragerea caracteristicilor locale, acestea sunt comparate pentru a se găsi ce trăsătură dintr-o imagine corespunde trăsăturii din a doua imagine (șablon), iar dacă un prag de trăsături este depășit atunci s-a găsit o potrivire.

Metoda SURF (Speeded Up Robust Features) este o tehnică de invarianță dezvoltată pentru a eficientiza algoritmii de recunoaștere și de a obține un nivel înalt de invarianță pentru transformările și condițiile așteptate în cazul dat.

SURF folosește filtre de tip cutie (box-filters) și imagini pentru a aproxima derivatele Gaussiene de ordinul al doilea ale matriciei Hessiene. Astfel, SURF folosește același principiu de a se uita la două valori eigen cu același semn (la fel ca în cazul detectorului de colțuri Harris), doar că metoda este bazată pe aproximări pentru fiecare intrare din matricea Hessienă.

Presupunem că și sunt aproximări pentru și, respectiv , atunci determinantul matricei Hessiene poate fi aproximat astfel:

pentru un Gaussian cu și un filtru de 9×9 pixeli. Coeficientul 0.6 reprezintă o media a ponderilor relative la scară și este obținut din ecuația:

unde este norma Frobenius.

Pentru o scară de invarianță, filtrele sunt aplicate la diferite dimensiuni asupra imaginii. Timpul de procesare este invariant în dimensiune datorită imaginilor integrale. Pentru obținerea invarianței de rotație, fiecărui punct de interes i se este asociat un vector de orientare care este maximul de răspuns (gradientul de schimbare calculat prin fluxul Haar) în jurul punctului. Atunci când avem o potrivire a caracteristicilor, se caută corespondețele între descriptori.

Figura 4.1 – Kernel-urile de aproximare prin aplicarea greutăților -1 asupra căsuțelor albe, 2 căsuțelor roșii (din figură, în realitate negre) și 0 căsuțtelor gri

Clasificarea Haar este o tehnică de tip arbore unde în faza de antrenare, este creată o cascadă statistică amplificată de rejecție. Un clasificator puternic este creat din clasificatori mai slabi, iar un clasificator slab este cel care găsește clasificarea corectă în peste 50% din cazuri. Obținerea unui clasificator mai bun din mai multe slabe este realizată prin creșterea greutății (penalizării) pe probe clasificate incorect astfel încât la următoarea iterație antrenăm o ipoteză care găsește probele clasificate fals în probe selectate corect. În final, combinațiile convexe ale tuturor ipotezelor sunt combinate.

Figura 4.2 – (Imaginea din stânga sus – primul rând) Ipoteza (linia roșie) este selectată neclasificând obiectul roșu. Grosimea obiectului roșu este mărită și va afecta alegerea următoarei ipoteze (o ipoteză mai puțin bună este selectată). (Imaginea din dreapta sus – primul rând) Următoarea ipoteză nu va clasifica obiectul verde, iar grosimea este împărțită între roșu și verde. (Imaginea din stânga jos – al doilea rând) Următoarea ipoteză nu va clasifica obiectul galben, iar grosimea este acum divizată între roșu, verde și galben. (Imaginea din dreapta jos – al doilea rând) După alegerea ultimei ipoteze, combinația convexă a tuturor ipotezelor este calculată. C1 și C2 se referă la caracteristica 1, respectiv, caracteristica 2.

Clasificarea Haar folosește o cascadă de rejecție, iar clasificatorul final va fi alcătuit dintr-o cascadă de clasificatoare simple, iar regiunea de interes trebuie să treacă prin toate etapele cascadei. Ordinea nodurilor este de obicei aranjată în funcție de complexitate, astfel mai multe caracteristici candidate sunt excluse devreme, salvând timp de calcul substanțial.

Intrările clasificatoarelor care construiesc cascada sunt descrise în figura 4.3:

Figura 4.3 – (a) Caracteristci de muchie, (b) caracteristici de linie (c) caracteristici de centru. Aceste caracteristici Haar sunt calculate prin adăugarea regiunilor de lumină și scăzând regiunile întunecate.

Atunci când aplicația este în funcționare (running state), un panou de dimensiuni diferite este măturat de-a lungul imaginii, calculând suma pixelilor din caracteristici și folosind imaginile integrale.

4.3. Implementare

OpenCV este o bibliotecă computer vision scrisă în C și C++ și conține peste 500 de funcții asociate imaginisticii, plus alte metode de antrenare-învățare pentru recunoaștere facială. Motivul pentru care am ales această bibliotecă este pentru că servește scopului nostru, este open-source, gratis pentru uz academic și bine documentată.

Metodele SURF și Haar descrise în capitolul 4.2 sunt candidații principalii pentru recunoaștere, pentru că sunt două metode foarte eficiente.

Cel mai simplu caz îl considerăm atunci când persoana nu se mișcă și imaginea nu prezintă deformări prin schimbare mimicii, gesturi etc. Cei mai importanți factori din acest scenariu sunt lumina ambientală și lumina de fundal.

Metoda Haar a adus cele mai bune rezultate în termeni de viteză de procesare a cadrelor, deși SURF a fost și ea o metodă foarte bună.

OpenCV oferă clase util pentru crearea șabloanelor de antrenare dintr-o singură imagine, care pot modifica fundalul, lumina și rotațiile imaginilor de ieșire. Imaginile de antrenare sunt controlate de un număr de parametrii de comandă:

numele vectorului de ieșire ce conține șabloanele pentru antrenare;

imaginea sursă (capturată de cameră);

calea către directorul pentru imaginile șablon ale fundalului;

câte imagini pozitive poate vectorul de ieșire să conțină;

un număr de parametrii care spun cum persoana din imagine și fundalul trebuie să fie iluminate;

numărul maxim de unghiuri de rotație pentru persoana din imagine și a fundalului în radiani;

șablonul cu lungime și lățime.

Vectorul creat în cazul nostru conține peste 20 de imagini șablon.

O altă metodă pentru identificarea unei persoane este reprezentată în diagrama bloc din figura 4.4. Trebuie să găsim poziția aproximată a feței în imagine. Apoi, imaginile sunt normalizate, printr-o transformare afină pentru a alinia ochii, aplicăm o egalizare a histogramei și încercăm să mascăm cât mai bine fundalul.

Figura 4.4 – Diagrama bloc a procesului de detectare facială

Ieșirile algoritmului de detecție facială alcătuiesc o listă de identificatoare, unde imaginea de probă se potrivește cu subiectul. Lista o vom aranja descrescător în funcție de probabilitatea de recunoaștere. Performanța algoritmiilor de detecție facială o măsurăm sub formă de curbe de rang, unde pe axa Ox avem rangurile și pe axa Oy extrapolăm rațiile de recunoaștere. Când curba trece prin punctul de coordonate (x, y), atunci o fracțiune de imagini de probe y, identificatorul corect a fost conținut în primele x sugestii ale algoritmului de recunoaștere.

Ideea noastră este de a manipula imaginile feței într-un mod în care proiecția în spațiul de schimbare al feței, asigură schimbări minime efectuate imaginii.

Fie imaginea inițială ca un vector linie și un set ortogonal de vectori normalizați: (vectorii principali eigen). Adăugăm , un multiplu al vectorului eigen k, unei imagini , și, astfel, putem schimba arbitrar componenta k a proiecției:

Atunci când modificăm câteva componente, proiecțile se comportă independent, pentru că vectorii sunt doi câte doi ortogonali.

unde este imaginea modificată , iar proiecția imaginii alterate diferă cu în componenta k, i.e.

Astfel, în comparație cu implementările clasice ai algoritmilor, această abordare este mai bună, pentru că lăsăm informația în afara spațiului acoperit de fețele eigen neatinse.

Implementarea algoritmilor o facem în mediul de dezvoltare Visual Studio 2010, folosind biblioteca OpenCV. În continuare, descriem conceptual implementarea modelului Eigen.

În testele noastre am folosit 10 fețe eigen cu o valoare de threshold de 10.0:

int nrComponente = 10; double nivelThreshold = 10.0;

Definim o funcție care crează modelul Eigen, ce ia ca parametrii numărul de fețe eigen și nivelul de threshold:

Ptr<FaceRecognizer> model = creeazaEigenFaceRecognizer(nrComponente, nivelThreshold);

Pentru antrenarea modelului folosim un set de imagini predefinite pe care le salvăm în directorul persoane, din interiorul proiectului. Folosimd metoda FaceRecognizer::train ce ia ca parametrii un vector de vectori (imaginile de antrenare, fețele pe care dorim ca modelul să le învețe) și un vector de etichete (care corespund imaginilor de antrenare).

// Stochează imaginile și etichetele

vector<Mat> imagini;

vector<int> etichete;

// Imagini pentru prima persoana

imagini.push_back(imread("persoane/persoana_1/1.jpg",

CV_LOAD_IMAGE_GRAYSCALE));

etichete.push_back(1);

imagini.push_back(imread("persoane/persoana_1/5.jpg",

CV_LOAD_IMAGE_GRAYSCALE));

etichete.push_back(5);

// Imagini pentru a doua persoana

imagini.push_back(imread("persoane/persoana_2/1.jpg",

CV_LOAD_IMAGE_GRAYSCALE));

etichete.push_back(1);

imagini.push_back(imread("persoane/persoana_1/5.jpg",

CV_LOAD_IMAGE_GRAYSCALE));

etichete.push_back(5);

Codul sursă de mai sus, arată cum putem antrena modelul cu un set de imagini. Imaginile sunt citite folosind metoda imread și introduse într-un vector std::vector<Mat>. Etichetele fiecărei imagini sunt stocate într-un vector std::vector<int> (se poate folosi, însă, și Mat de tipul CV_32SC1). Suntem atenți la etichetarea imaginilor cu fiecare persoană din baza de date.

În final, antrenăm modelul:

model->train(imagini, etichete);

Utilitarul createsamples din OpenCV crează un vector de ieșire cu șabloane, care este folosit mai departe în utilitarul haarttraining. Cele mai importante comenzi linie sunt următoarele:

numele fișierului al vectorului cu șabloanele pozitive;

numele fișierului cu numele imaginilor de fundal (care nu conțin figura umană);

numărul de șabloane pozitive în vectorul de șablon;

numărul de șabloane negative dorite;

numărul de etape de antrenare;

rata minimă de detecție pentru fiecare prag;

rata maximă de detecție pentru fiecare prag;

numărul de divizuni, numărul de nivele al fiecărui nod al cascadei;

dimensiunea memoriei în MB;

dacă obiectul conține simetrie sau non-simetrie;

mod care setează caracteristicile Haar folosite;

lungimea și lățimea șablon.

Imaginile de fundal sunt folosite pentru a obține șabloanele negative din panouri ale acestor imagini și aici, au fost alese 10 imagini care arată varianțe de niveluri ale gradienților gri. Numărul de etape de antrenare împreună cu ratele minime și maxime de detecție, determină rata totală de detecție. De exemplu, pentru o rata maximă de 50% și o rată de detecție de 99%, rata maximă de detecție va fi și o rată totală de detecție de . Numărul de diviziuni este numărul de nivele în fiecare nod al cascadei. Lungimea și lățimea șablonului trebuie să fie la fel ca atunci când s-au creat imaginile de antrenare.

Mai departe, imaginea finală ar nevoie de operații geometrice de corecție.

Pentru determinarea facială aplicăm corecții de perspectivă. Procesăm imaginea obținută. În cazul în care avem deformări de imagine, aplicăm corecții de perspectivă și încadrăm poligonul.

Algoritmul pe care l-am implementat pentru corecția unui obiect se poate împărți în mai mulți pași:

Găsește harta muchiilor

Detectează liniile folosind transformata Hough

Află colțurile imaginii prin găsirea intersecțiilor între linii

Verifică dacă poligonul aproximat are 4 vertecși

Determină colțurile: sus-stânga, jos-stânga, sus-dreapta, jos-dreapta

Aplică transformata de perspectivă

Aplicăm un threshold mai mic decât lungimea imaginii – pe noi ne interesează conturul imaginii.

Harta muchiilor este necesară pentru a găsi segmentele de linie aplicând transformata Hough. Am folosit OpenCV, iar pentru extragerea muchiilor folosim metoda cv::Canny:

vector<int> etichete;

cv::Mat destMat;

cv::cvtColor(sursa, destMat, CV_BGR2GRAY);

cv::blur(destMat, destMat, cv::Size(3, 3));

cv::Canny(destMat, destMat, 100, 100, 3);

În continuare, aplicăm transformata Hough probabilistică, în loc de transformata Hough standard, pentru a găsi segmentele de linii care înconjoară fața subiectului. În exmperimente, am constatat că transformata Hough probabilistică folosește mai puține segmente de linii și are o acuratețe mai mare decât transformata Hough clasică. Detaliem, mai jos, metodele folosite pentru depistarea segmentelor de linii:

std::vector<cv::Vec4i> lines;

cv::HoughLinesP(destMat, lines, 1, CV_PI/180, 70, 30, 10);

În figura 4.5, se observă rezultatele obținute după aplicarea transformării Hough asupra imaginii ce conține harta muchiilor.

Figura 4.5 – Aplicarea transformării Hough probabilistice asupra unei imagini

Mai departe, aflăm colțurile imaginii din figura 4 unde liniile se intersectează. Fie și două linii care se intersectează. Pentru calcularea punctului de intersecție ale celor două linii, folosim ecuația (17):

Verificăm dacă poligonul aproximat are 4 vertecși întrucât există o posibilitate ca obiectul privit să nu fie un patrulater. Așadar, aproximăm o curbă poligonală pentru punctele din colțuri. Dacă este patrulater, curbele aproximate vor avea 4 vertecși. Folosim metoda următoare:

std::vector<cv::Point2f> approx;

cv::approxPolyDP(cv::Mat(corners), approx,

cv::arcLength(cv::Mat(corners), true) * 0.02, true);

Având cele patru puncte ale colțurilor, trebuie să determinăm colțurile stânga-sus, stânga-jos, dreapta-sus, dreapta-jos pentru a putea corecta perspectiva. Acest proces se poate vedea în figura 4.6:

Figura 4.6 – Aflarea celor patru colțuri ale patrulaterului și refacerea perspectivei

Pentru determinarea celor patru colțuri (stânga-sus, stânga-jos, dreapta-sus, dreapta-jos), folosim următorul algoritm:

Aflăm centrul de masă;

Punctele care au valori pe axa Oy mai mici decât centrul de masă, ele sunt valorile colțurilor de sus, altfel ele sunt valorile colțurilor de jos;

Date fiind cele două puncte de sus, cel care are valori pe axa Ox mai mici este colțul stânga-sus; celălalt este colțul dreapta-sus;

Date fiind cele două puncte de jos, cel care are valori pe axa Ox mai mici este colțul stânga-jos; celălalt este colțul dreapta-jos.

În aplicația noastră, am descris pașii algoritmului în metoda de mai jos:

// Aflare centru de masa

cv::Point2f center(0,0);

for (int i = 0; i < corners.size(); i++)

center += corners[i];

center *= (1. / corners.size());

aflaColturi(corners, center);

// Functia de aflare colturi

void aflaColturi(std::vector<cv::Point2f>& corners, cv::Point2f center)

{

std::vector<cv::Point2f> top, bot;

for (int i = 0; i < corners.size(); i++)

{

if (corners[i].y < center.y)

top.push_back(corners[i]);

else

bot.push_back(corners[i]);

}

cv::Point2f tl = top[0].x > top[1].x ? top[1] : top[0];

cv::Point2f tr = top[0].x > top[1].x ? top[0] : top[1];

cv::Point2f bl = bot[0].x > bot[1].x ? bot[1] : bot[0];

cv::Point2f br = bot[0].x > bot[1].x ? bot[0] : bot[1];

}

În final, pentru aplicarea transformatei de perspectivă am folosit metoda OpenCV cv::wrapPerspective. Funcția acceptă o imagine sursă, o imagine destinație și matrice de transformare. Matricea de transformare este relația dintre cele două imagini din figura 4.6. Obținem matricea din punctele colțurilor ale obiectului aflat deasupra și din punctele colțurilor imaginii destinație.

Odată ce am aflat transformata perspectivei, dorim să aflăm unghiurile de înclinare și de rotație ale obiectului față de observator. În cele ce urmează descriem metodele pe care le aplicăm.

Fie transformata perspectivei T a unui patrulater:

ce produce o matrice de 4 x 4 M de unde transformă vertecșii unei imagini de lățime și înălțime în pixeli, dată fiind o rotație a camerei , o rotație în afara planului și câmpul vizual .

Figura 4.7 – Determinarea distanței din matricea de transformare a perspectivei

Figura 4.7 arată relațiile între și . Noi știm colțurile imaginii și ne interesează unghiul de înclinare al camerei pentru a afla ulterior distanța.

Asignăm fiecărui colț al imaginii o coordonată în sistemul de coordonate al obiectului, presupunând că observatorul este aflat cu fața în jos de-a lungul axei negative Oz, cu axa Oy în sus, iar Ox în dreapta:

Tabelul 4.1. Coordonatele fiecărui colț al obiectului din imagine în sistemul de coordonate al obiectului

Mai specific, cautăm

unde este matricea de rotație în jurul axei Oz, este matricea de rotație în jurul axei Ox, F este matricea de translație și P este matricea de proiecție pentru un viewport pătratic cu un câmp vizual vertical . sunt triviale, ele sunt date de:

4.4. Rezultate obținute

Ca un prim pas, recunoașterea facială 3D obține suprafața gradientului , cum a fost descris în 4.1. Al doilea pas, constă în preprocesarea datelor. Procesul preliminar, cum ar fi centrare și decuparea, poate fi înlocuit de potrivirea simplă a pattern-urilor, ce poate avea ca obiect, cea mai recunoscută trăsătură: ochii feței umane.

Conturul feței trebuie extras în ordine, pentru a limita procesarea suprafeței aparținând numai feței în sine. Preprocesarea trebuie să sublinieze acele secțiuni ale feței mai puțin susceptibile alterării și să excludă parțile care se pot schima foarte ușor (cum ar fi părul).

În această lucrare, stadiul de preprocesare a fost limitat la decuparea triangulară prin ștergerea părților aflate în exteriorul unei elipse (în sens geodezic) centrate la vârful nasului.

În continuare, o matrice n x n alcătuită din distanțe geodezice este creată prin aplicarea FMTD din fiecare vertex n selectat. Apoi, este aplicat MDS la matricea distanțelor, producând o formă canonică a feței într-un spațiu mic-dimensional Euclidian.

Forma canonică obținută este comaprată cu înregistrările unei baze de date de template-uri (modele) corespunzând subiecților (relație 1-many), sau comparată cu un singur model (relație 1-1). Dacă se află între anumite valori setate implicit, comparația este considerată una validă.

Pentru a rezolva problemele, vom folosi forma canonică a unui moment:

unde denotă coordonata i a punctului n în suprafața canonică. Pentru a compara două forme canonice, signiatura vectorului de momente este calculată pentru fiecare suprafață. Distanța Euclidiană între cele două signiaturi ale momentelor măsoară disimilitatea celor două suprafețe.

În experimente, am folosit o bază de date cu imagini de rezoluție înaltă. Imaginile conțin fețele unor 10 subiecți caucazieni și asiatici, aceastea fiind făcute cu luminozitate controlată.

Potrivirea directă a suprafețelor a fost făcută prin găsirea gradientului suprafeței în conformitate cu relația (22) folosind 5 luminozități cu direcții diferite.

Formele canonice au fost calculate din suprafața gradientului, aliniate și convertite în signaturi de moment în conformitate cu relația (22).

Câteva date experimentale sunt prezentate în tabelul 4.2.

Mai departe, am convertit distanțele relative ale subiecților în pattern-uri 3d. Aceste pattern-uri reprezintă fiecare subiect în spațiul 3D.

Tabelul 4.2 – Acuratețea algoritmiilor de detecție facială

Performanțele sistemului de recunoaștere facială pentru implementarea algoritmilor descriși în 4.2 au fost măsurate în cadre pe secundă, iar nivelul de acuratețe a fost măsurat vizual prin simpla inspecție a aplicației. Rezultatele se pot vedea în tabelul 4.3:

Tabelul 4.3 – Rezultatele obținute pentru implementarea algoritmilor Haar și SURF, descriși în capitolul 4.2

În urma experimentelor, am descoperit că având un șablon de 200 x 200 pixeli, regiunea ochilor unui candidat se află între liniile 50-90, coloanele 20-75 pentru ochiul drept, respectiv coloanele 110-160 pentru ochiul stâng. Regiunea nasului unui candidat se află între rândurile 100-140 și coloanele 70-120, iar regiunea gurii se află între liniile 150-190, respectiv coloanele 50-130. Prin extragerea detaliilor imaginilor de test, am descoperit că sunt potrivite pentru orice imagine cu dimensiunile de 200 x 200 pixeli, unde subiectul este pozat din față, așa cum este arătat în figura 4.8:

Figura 4.8 – Caracteristicile feței extrase din poze de 200 x 200 px, unde zona verde este asociată ochiului drept, zona albastră ochiului stâng, zona galbenă nasului, iar zona mov gurii

5. Implementarea sistemului de detecție a mișcării

5.1. Concept

Algoritmii de recunoaștere a obiectelor, formelor, vorbirii, mișcării sau gesticii constituie o categorie specifică, ce caracterizează domeniul multimedia. Recunoașterea este o altă formă de clasificare, care nu se mai bazează pe măsurarea dimensiunilor și formelor obiectelor.

Descrierea bazată pe conținut a imaginii se realizează în principal prin recunoașterea și interpretarea unor caracteristici esențiale ale tipului de mediu, cum ar fi: culoarea, textura, forma, locația spațială, regiunile de interes, caracteristicile faciale, cadrele cheie, detectarea modificărilor de scenă. Recunoașterea automată a caracteristicilor importante ale unui mediu necesită un algoritm corespunzător, ale căror criterii de optimizare sunt atât micșorarea costurilor, dar și asigurarea unei indexări consistente.

Algoritmii bazați pe conținut deși împart câteva trăsături comune au fiecare un aspect propriu dependent de mediul tratat.

Recunoașterea bazată pe conținut, complet automatizată este departe de a se realiza.

Tendința actuală care ar furniza rezultate mai bune ar fi combinarea metodelor bazate pe text cu cele bazate pe conținut pentru descrierea imaginii și a mișcării.

Metodele de recunoaștere asigură clasificarea prin comparare a obiectelor. Tehnica de egalizare sau matching a imaginii compara portiuni de imagini unele cu altele. Ea se realizează printr-un proces cunoscut ca intercorelare spațială. Tehnica implică compararea pixel cu pixel a unei imagini mici, de referință, ce conține un obiect de interes cu o altă imagine în analiză.

O mască a imaginii de referință apare ca o imagine mica, ce înfățișează obiectul ce se dorește a se găsi în imagine. Mecanismul constă în suprapunerea măștii de imagine de referință pe o altă imagine, pentru comparare pixel cu pixel.

5.2. Descriere algoritmi

Un algoritm deosebit din categoria celor de recunoaștere este cel ce permite extragerea caracteristicilor de mișcare dintr-o secvență video, luându-se în considerare atât operațiile efectuate cu camera video (înclinare, zoom) cât și conținutul video prin caracteristicile sale temporale, algoritmul de determinare a muchiilor în mișcare (moving edges). Un astfel de algoritm este foarte important pentru luarea în considerare a conținutului video prin caracteristici temporale, folosite apoi la clasificarea și regăsirea cadrelor în relație cu un anumit eveniment. Mișcarea este obținută prin operațiile camerei de luat vederi, considerate la separarea și la reprezentarea conținutului unui plan video.

Algoritmul de recunoaștere a mișcării care determină muchiile în mișcare între cadrele succesive se bazează pe sesizarea poziției și a mișcării obiectelor din acestea și parcurge trei etape:

Procesarea imaginilor pentru a determina locația muchiilor în mișcare.

Calculul succesiunii câmpurilor ce determină viteza punctelor muchiilor în mișcare de-a lungul mai multor cadre.

Gruparea vectorilor într-o succesiune coerentă ce determină calea de mișcare (direcția) a obiectelor din imagine.

Propunem un algoritm de estimare a fluxului optic bazat pe patru pași:

Calcularea aproximată a celui mai apropiat câmp vecin între două imagini de intrare

Identificare pattern-uri dominante de mișcare porning de la cel mai apropiat câmp vecin

Segmentare mișcare folosind pattern-uri de mișcare dominante

Rafinament local al fluxului prin formule de flux optic tradișionale

Date fiind o pereche de imagini de intrare, calculăm, mai întâi o aproximație a celui mai apropiat câmp vecin între ei utilizând CSH (Coherency Sensitive Hashing). Cel mai apropiat vecin este aproximativ apropiat de pământ (nivelul de jos) în majoritate locațiilor de pixel. Studiul empiric arată că aceasta este o prezumție validă în majoritatea cazurilor de estimare a fluxului optic.

Pornind de la această ipoteză, putem spune că avem două avantaje:

algoritmii pentru determinarea celui mai apropiat câmp vecin nu au restricții de magnitudine a mișcării, putând da informații pentru mișcări largi în estimarea câmpului optic – acest lucru fiind o problemă a algoritmilor tradiționali;

chiar dacă majoritatea câmpurilor vecine sunt zgomotoase, ei rețin detalii de mișcare pentru structuri de imagini mici, care sunt, de obicei, ignorați în algoritmii tradiționali de flux optic.

Valoarea w folosită în calculările NNF este un parametru important în ecuația algoritmului propus. Se elimină, astfel, ambiguitatea de potrivire, mai ales în pattern-uri repetitive și regiuni care nu au texturi. În mod tipic alegem w = 16 pentru secvențe cu dimensiuni de 640 x 480 și w = 32 pentru rezoluții înalte.

Pentru a suprima zgomotele câmpului vecin, propunem o metodă de segmentare a mișcării prin restricționarea celui mai apropiat câmp vecin inițial sub forma unui set de pattern-uri de mișcare dominante. Mai întâi, identificăm acele pattern-uri robuste bazate pe modele de transformare geometrice simple între cele două imagini și bazate pe algoritmul iterativ RANSAC. Pe urmă, le folosim pentru a calcula segmentele de mișcare din cel mai apropiat câmp vecin.

Putem adopta statisticile de histograme pentru a extrage K cele mai frecvente moduri de mișcare și să le folosim ca pattern-uri dominante de mișcare. Acest lucru ar funcționa dacă mișcarea este constituită doar din translații. Totuși, atunci când scena conține mai multe mișcări rigide și complexe cum ar fi rotații, scalări, numărul de moduri necesare pentru reprezentarea cu acuratețe a mișcării câmpului ar fi foarte mare.

Soluția este să extragem pattern-urile dominante de mișcare sub formă unor modele sofisticate cum ar fi transformări de similiraitate / afine. Cu alte cuvinte, problema constă în estimarea matricelor de proiecție din cel mai apropiat câmp vecin.

Setul de pattern-uri dominante de mișcare pot reconstrui nivelul solului foarte bine în unele cazuri, dar atunci când avem transformări care nu sunt rigide sau deformări locale, se poate vedea evident că pattern-urile dominante de mișcare nu sunt suficiente pentru reconstrucția câmpului. Pentru a rezolva această problemă, lăsăm o mică perturbație în jurul fiecărui pattern de mișcare.

Definim setul ca o perturbație mică în jurul pattern-ului de mișcare u. Apoi, pentru fiecare offset dominant sau pattern-ul de mișcare , alegem care obține cea mai mică eroare de potrivire , unde și sunt imaginile de intrare, iar x denotă o locație în .

Acest pas de perturbație este esențial în îmbunătățirea segmentației de mișcare folosind pattern-uri dominante de mișcare. Se poate stabili ca fiind o relaxare unde lăsăm fiecare pattern de mișcare să varieze local.

Un alt beneficiu în folosirea unui model de perturbație este că putem folosi un set de pattern-uri de mișcare compact pentru reprezentarea unei game mai largi de mișcări.

Date fiind setul K de pattern-uri candidate de mișcare și modele de perturbației, formulăm estimarea de mișcare densă astfel:

unde N(x) se referă la cei 4 vecini conectați ai lui x; și sunt funcții robuste de consistență date și netezimea mișcării. u(x) corespunde lui este definit ca eroarea minimă de potrivire :

și modelul de prezervare a muchiilor de mișcare se poate defini astfel:

unde utilizăm un termen de conservare a muchiei, w(x). În ambele ecuații (24) și (25), alegem funcția robustă non-convexă (numită sancțiunea Charbonnier generalizată), cu , ce s-a dovedit a funcționa bine în analiza de mișcare.

Optimizăm direct ecuația (25), care este o problemă NP-grea. În concordanță, optimizăm printr-un proces de fuziune în doi pași care aproximează minimumul global. Mai întâi, estimăm configurația de mișcare alegând pattern-urile de mișcare obținute separat din translație:

și

unde funcția de energie are aceeași formă ca E în ecuația (25), dar cu un termen neted de pattern de mișcare. Folosim tăieri de graf multi-label pentru optimizarea ecuațiilor (26) și (27). Astfel, găsim soluție la segmentarea mișcării tratând cele două modele de mișcare separat.

La final, aplicăm algoritmul de fuziune pentru a alege adaptiv între și , pentru obținerea rezultatului final :

Pentru găsirea contururilor din imagine folosim o implementare a algortmului Canny. Ne bazăm pe gradientul imaginii și, în plus, dorim astfel:

maximizarea raportului semnal zgomot pentru o detecție corectă;

localizare bună a punctelor de muchie;

minimizarea numărului de răspunsuri pozitive la o singură muchie singulară (eliminare non-muchiilor).

Pașii algoritmului bazat pe Canny sunt descriși, mai jos:

Filtrarea imaginii cu un filtru Gaussian pentru eliminarea zgomotelor.

Calculul modului și direcției gradientului.

Suprimarea non-maximelor modulului gradientului.

Binarizarea adaptivă a punctelor de muchie și prelungirea muchiilor prin histereză.

Zgomotul din imagine este o informație de „frecvență înaltă” care se suprapune peste imaginea originală. Aceasta inducea apariția unor puncte de muchie false. Zgomotul inerent procesului de achiziție al imaginilor are un model Gaussian și se poate eliina cu un filtru omonim.

Calcularea modului și direcției gradientului presupune alocarea a câte unui buffer temporar de dimensiunea imaginii și inițializarea elementelor în confirmate cu (27) și, respectiv, (28), unde componentele orizontale și, respectiv, verticale se pot calcula prin convoluția imaginii în conformitate cu (29) sau (30).

Suprimarea non-maximelor modulului gradientului – are drept scop subțierea muchiilor prin păstrarea doar a punctelor de muchie care au modulul maxim al gradientului de-a lungul direcției de variație a intensității (de-a lungul direcției gradientului).

Primul pas constă în cuantificarea direcțiilor gradientului în 4 intervale de câte 450.

Presupunând, de exemplu, că direcția gradientului într-un anumit punct al imaginii este „1” modulul gradientului în punctul P este un maxim local dacă și . Dacă aceste condiții sunt îndeplinite, punctul P se reține. Altfel, se elimină.

După efectuarea cu succes a calcului gradientului și a operației de suprimare a non-maximelor modulului gradientului, se obține o imagine în care intensiteatea pixelilor este egală cu valoarea modulului gradientului din acel punct. De asemenea, grosimea punctelor de muchie din această imagine (a căror modul este nenul) este (ideal) de un pixel. În continuare se descri pașii pentru obținerea muchiilor finale.

Binarizarea adaptivă încearcă să extragă un număr relativ constant de puncte de muchie pentru o dimensiune dată a imaginii. În acest fel se compensează iluminarea și contrastul diferit între imagini (un prag fix sau va scoate prea multe muchii sau nu va scoate muchii deloc).

Parametrul care se dă procedurii de detecție a pragului este raportul dintr numărul de puncte de muchie și numărul de puncte cu modulul gradientului diferite de zero din imagine.

Parametrul p ia de obicei valori între 0.01 și 0.1.

Algoritmul este următorul:

Se calculează histograma de intensități a imaginii (a modulelor gradientului după suprimarea non-maximelor). Se vor normaliza aceste valori în intervalul [0…255] (prin împărțire la în cazul în care gradientul a fost calculat utilizând opreatorul Sobel). Rezultă o histogramă Hist[0…255],

Se calculeză numărul de pixeli diferiți de zero care nu vor fi puncte de muchie:

Se pornește de la poziția 1 din histogramă, și se însumează valorile histogramei pe măsură ce avansăm spre 255. Dacă la un moment dat suma este mai mare decât Nr non muchie, atunci ne oprim și poziția la care am ajuns este pragul pe care l-am găsit. Această tehnică, intuitiv, ne găsește valorea intensității (pragul adaptiv) sub care se găsesc Nr non muchie pixeli.

Marginile imaginii pentru care nu s-a calculat gradientul trebuie să fie zero sau să nu fie luate în considerare, deoarece valorile nedefinite în aceste zone pot influența valorea pragului găsit.

Modelarea datelor video se face ca un șir de imagini ce variază în timp, exprimate prin variabila I(x, y, t). Derivata parțială în raport cu timpul a acesteia estimează diferențele dintre două imagini cadru succesive din secvența video:

Aceste imagini se convertesc în imagini formate din muchii spațio-temporale și se normalizează cu valori cuprinse în intervalul [0, 1]. Această operație permite o multiplicare (M) echilibrată de pixeli pe imagini, în felul urmator:

Imaginile succesive cu muchii în mișcare notate Et(x, y, t) și E’t(x, y, t) se obțin din imaginile M(x, y ,t) și, respectiv, din M’t(x, y, t) prin aplicarea unei suprimări nemaximale.

Algoritmul a fost implementat de pe un șir de date video ful l-frame necomprimat la 4 cadre pe secundă. Punctele muchiilor în mișcare se calculează dupa suprimarea nemaximala. Această modalitate are câteva avantaje în comparație cu modalitățile tipice de trasare a muchiilor, care mai întâi extrag muchiile din fiecare imagine și apoi determină mișcarea prin corelație: el nu ia în considerare punctele de pe muchiile care nu se mișcă.

Algoritmul implică selectarea punctelor dominante ale muchiilor, distribuite în fiecare imagine-cadru, calculând un câmp de derulare inițial și apoi netezind acest câmp prin aplicarea unei restricții. Pentru a asigura împrăștierea punctelor dominante se divide imaginea cu muchii în mișcare Et(x,y,t) în zone de 10*10 pixeli și se selectează un punct dominant în fiecare zonă.

Dintre punctele dominante se aleg numai acelea cu mai mult de două puncte vecine și cu pantă spațio-temporală cea mai mare. Setul de punctele dominante este indicat în imaginea Et(x,y,t). De la acestea se obține un set inițial de asemănări vector prin calculul unei corelații de diferențe absolute, pornind de la imaginea I(x,y,t) până la imaginea I(x,y,t+t *t) pentru toate punctele dominante. Se produce o listă de asemănări posibile V(xe, ye) pentru fiecare punct din setul de puncte dominante. Această listă de asemănări este ordonată după resturile corelației diferenței absolute.

Luând în considerare asemănarea cea mai mare dintre puncte, se obține un câmp inițial de zgomot. Se netezește câmpul vector prin aplicarea restricției de varianță, în felul următor:

Se consideră că vectorii apropiați din același cadru și punctul cu aceeași direcție generală aparțin aceluiași grup. Algoritmul determină iterativ grupurile corespunzătoare din fiecare cadru, considerând pe rând fiecare vector. Dacă nu există un grup compatibil se crează unul nou pentru a putea include vectorul. Odată ce vectorii din fiecare cadru sunt grupați se aplică un criteriu de trasare a căii de mișcare a grupurilor vector prin mai multe cadre. Direcția medie a fiecărui grup prezice locația grupului în urmatorul cadru prin proiecție liniară.

Acest algoritm se poate aplica cu succes în sisteme multimedia de sinteză, virtuale sau virtualizate. “Tragerea” corectă în realtime a secvențelor video mixate cu imaginile de sinteză în cadrul studioului virtual este dependentă de pozițiile camerei de luat vederi și de informațiile de z-mixing și de chromakeing ale acesteia. Măsurarea parametrilor camerei de luat vederi se realizează printr-un astfel de algoritm de estimare a mișcării ce măsoară mișcarea globală a imaginii la un grad înalt de acuratețe.

Pentru captarea realității de virtualizat, sistemul solicită folosirea mai multor camere de luat vederi așezate în puncte esențiale ce permit captarea detaliilor. Această condiție impune sistemului de sinteză folosirea unor algoritmi care să poată manevra aceeași imagine cu grade de luminanță diferite. În plus, descrierea scenelor studioului virtualizat se bazează pe structura geometrică și fotometrică a tuturor suprafețelor vizibile dintr-o locație dată de camera de luat vederi. Pe acest considerent unghiul de transcriere trebuie să includă atât orientarea, cât și poziția camerei. Distribuția unghiurilor de transcriere și densitatea lor este importantă pentru calitatea reconstrucției virtualizate a evenimentelor. Și în această aplicație este necesar un algoritm ce determină mișcarea ca cel expus. O cerință impusă sistemului de sinteză multimedia și respectiv modelului său este aceea de menținere a sincronizării imaginilor scenei luate la același moment de către diferitele camere de luat vederi. Sincronizarea imaginilor este crucială pentru a virtualiza corect evenimentele dependente de timp, folosind algoritmi potriviți.

5.3. Implementare

Întrucât problema de rezolvat este neliniară și neconvexă, trebuie inițializată cu grijă pentru a scăpa de minimul local care corespunde unei soluții greșite.

Pentru problema fluxului optic, în special utilizarea unui algoritm de multi-rezoluție, rezoluția aleasă poate fi cât de mică posibil, iar fluxul optic este de obicei inițializat cu 0. Motivul pentru această alegere este faptul că fluxul optic este de obicei mic în comparație cu dimensiunile imaginii, și este relativ ușor să găsim o imagine cu o rezoluție rezonabilă astfel încât fluxul optic scalat să fie sub 0.5 pixeli, ceea ce este în mod normal de ajuns pentru convergența la minimul global.

În cazul fluxului scenei, avem o problemă mixtă: ținem cont de fluxul optic dacă vom considera fiecare cameră separat, dar în același timp încercăm să rezolvăm o problemă stereo între imaginea din stânga și imaginea din dreapta. Caracteristicile problemei stereo sunt foarte diferite de cele ale fluxului optic: amplitudea disparității stereo este de obicei comparabilă cu dimensiunea imaginii (în mod normal este mai mare decât lungimea obiectelor văzute în imagini), și sunt multe zone blocate. Din motivele enumerate, foarte multe abordări multi-rezoluție eșuează la partea stereo dacă încep cu o rezoluție slabă, iar metoda noastră ar eșua și ea.

Prin urmare, alegem să folosim algoritmul de flux al scenei la o rezoluție intermediară, și inițializăm patru funcții cu valori diferite de zero (u, v, d, d'). Mai întâi, inițializăm d utilizând un algoritm stereo ce calculează disparitatea de la cele mai înalte rezoluții ale imaginilor (nivelul 1 al piramidei). Eroarea de disparitate al algoritmului stereo poate fi ușor evaluată folosind referințe standard și calculăm nivelul b al piramidei astfel încât eroarea de disparitate este sub 0.5 pixeli. De asemenea, calculăm nivelul a, care este mai înalt decât b, astfel fluxul optic așteptat este sub 0.5 pixeli. Apoi, rezolvăm problema de flux optic pentru imaginile din stânga și dreapta separat, de la nivelul a la nivelul b, obținând estimări pentru fluxul optic din stânga (u, v) și pentru fluxul optic din dreapta (u', v'). Disparitatea inițială d este rafinată de la un nivel c la nivelul b, folosind aceeași metodă și păstrând termenii stereo a un timp t. d' este inițializat adăugând diferența între u' și u la d, rezultând la timpul t.

În sfârșit, algoritmul de estimare al fluxului scenei este aplicat celor patru imagini, de la nivelul b la nivelul 1 al piramidei. Detaliem algoritmul pentru estimarea fluxului optic:

Inițial: Calculăm fluxul scenei (u, v, d, d') de la t la t+1 piramide stereo (fiecare piramidă are a nivele)

Variabile: a, b, c, cu a > b >= 1, a > c >= b >= 1

u 0, v 0, i' 0, v' 0

pentru l=a la b execută

(u, v) fluxul optic stânga de la (u, v) la nivelul l

(u', v') fluxul optic dreapta de la (u', v') la nivelul l

sfârșit for

d stereo

pentru l=c la b execută

d disparitate la timpul t de la d și nivelul l

sfârșit for

d'(x +(u, v)) d+u'(x+d)-u

pentru l=b la 1 execută

(u, v, d, d') fluxul scenei din (u, v, d, d') și nivelul l

sfârșit for

O altă metodă propusă pentru implementarea algoritmului de detecție a mișcării bazat pe flux optic, va fi prezentată în cele ce urmează.

Pornind de la noțiunile teoretice prezentate în 4.2, putem defini următoarele ipoteze:

Fie un set de puncte dintr-o imagine trebuie găsite punctele asemenea dintr-o altă imagine;

Fie punctul aparținând imaginii trebuie găsit punctul aparținând imaginii care minimizează eroarea :

Aceste ipoteze ne ajută la găsirea și urmărirea punctelor dintr-o secvență de imagini și este o operație fundamentală în multe aplicații computer vision.

Pașii pentru implementare sunt descriși mai jos:

Pasul 1: deschidere video de intrare

folosim clasa OpenCV VideoCapture, care deschide camera normală, notată prin variabila device = 0.

VideoCapture capturaVideo(0);

Erori posibile:

fișierul de la camera video nu poate fi citit;

nu există cameră;

fișierul video generat necesită codec-uri pe care OpenCV nu le poate citi.

Pasul 2: creare ferestre de vizualizare și definire / inițializare variabile

folosim metoda namedWindow pentru desenarea ferestrei inițiale, care primește ca parametrii numele ferestrei (winname) și flag-ul CV_WINDOW_AUTOSIZE prin care dimensiunea ferestrei va fi ajustată pentru a afișa imaginea setată prin comanda imshow().

matrici alocate:

Mat cadrulCurent, cadrulGri, cadrulRGB, cadrulGriAnterior;

Mat fluxulOptic = Mat(capturaVideo.get(CV_CAP_PROP_FRAME_HEIGHT), capturaVideo.get(CV_CAP_PROP_FRAME_HEIGHT), CV_32FC3);

Matricile de mai sus vor fi folosite în metodele următoarea și ne ajută în găsirea dimensiunii cadrelor de la cameră și numărul de cadre.

Pasul 3: creare buclă pentru iterare cadru cu cadru

definim bucla prin while(true) și capturăm cadrele astfel:

while (true)

{

capturaVideo >> cadrulCurent;

cadrulCurent.copyTo(cadrulRGB);

cvtColor(cadrulRGB, cadrulGri, CV_BGR2GRAY);

}

Cadrul curent (imaginea cadrului curent) va fi copiată în matricea definită la pasul 2, cadrulRGB. Transformăm imaginea cadrului curent în niveluri de gri prin metoda cvtColor, unde setăm steagul CV_BGR2GRAY și o stocăm în matricea cadrulGri, definită la pasul 2.

Pasul 4: determinăm colțurile imaginii

folosim algoritmul lui Shi și Tomas pentru primul cadru pentru a determina colțurile intense ale imaginii.

if (init) {

goodFeaturesToTrack(cadrulGri, points1, MAX_COUNT, 0.01, 5, Mat(),3, false, 0.04);

init = false;

}

Parametrii necesari funcției OpenCV goodFeaturesToTrack sunt următorii:

image – imagine cu un singur canal, 32-biți; transmitem imaginea cu niveluri de gri;

corners – vector de ieșire ce conține colțurile detectate; le stocăm în points1;

maxCorners – numărul maxim de colțuri returnate. Dacă sunt mai multe colțuri decât sunt găsite, atunci cel mai solid dintre ele este returnat. Transmitem macro definiția MAX_COUNT, setată în urma experimentelor la 500.

qualityLevel – parametru ce caracterizează calitatea minimă acceptată a colțurilor imaginii. Valoarea lui este înmulțită cu valoarea calității măsurătorii celei mai bune, care este valoarea eigen minimă. Colțurile care au calitatea mai mică de produs sunt rejectate. De exemplu, dacă cel mai bun colț are calitatea măsurată = 1500 și qualityLevel = 0.01, atunci toate colțurile ce au o calitate sub 15 sunt rejectate. Setăm acest parametru la 0.01.

minDistance – distanța Euclidiană minimă posibilă între două colțuri returnate. Setăm la 5.

mask – regiune opțională de interes, dacă imaginea nu este nulă, atunci specifică regiunea unde colțurile sunt detectate.

blockSize – dimensiunea medie a unui bloc necesar pentru calculul matricei de varianțe de derovate pentru fiecare pixel vecin. Din experimente, am constat că valoarea optimă este 3.

useHarrisDetector – parametru care indică dacă vrem să folosim detectorul Harris. Setăm false.

k – parametru liber pentru detectorul Harris.

Pe baza algoritmului Shi și Tomas, funcția descrisă mai sus găsește cele mai proeminente colțuri ale imaginii astfel:

Funcția calculează calitatea colțului pentru fiecare pixel al imaginii sursă folosind cornerMinEigenVal() sau cornerHarris().

Funcția face o suprimare non-maximă (maximele locale vecine în 3×3 sunt reținute).

Colțurile care au valoarea eigen minimă mai mică decât sunt rejectate.

Colțurile rămase sunt sortate de măsuratoarea calităților în ordine descendentă.

Funcția elimină fiecare colț pentru care există un colț mai intens la o distanță mai mică de maxDistance.

Pasul 5: rulare flux optic

folosim metoda calcOpticalFlowPyrLK ce are ca date de intrare 13 parametrii.

Pasul 6: calcul diferențe dintre puncte și afișaj

trasăm pe imagine punctele și liniile prin line și circle;

verificăm dacă diferența între puncte este mai mare ca 0.

5.4. Rezultate obținute

Algoritmii de rezoluție medie și de calcul flux al scenei (descriși în prima parte a capitolului 5.3) au un timp de rulare de aproximativ 2-3 secunde. Întregul program de calcul cere aproximativ 10 secunde pentru toate calculele unei imagini cu rezoluția 640 x 480 pixeli.

În figura 5.1 se observă că putem captura mișcări ample ale unor obiecte care au o textură slabă, cum ar fi: bilă de biliard, mingea de ping pong și mingea de tenis. Chiar dacă bila este mișcată în cadre blurate și nu există suprapuneri între cadre ale mingilor, algoritmul descris capturează mișcările lor largi și repezi cu o acuratețe mare.

Figura 5.1 – Detecție minge de biliard aflată în mișcare

Pentru algoritmii de flux optic descriși în a doua parte a capitolului 5.3 am evaluat performanțele pe un calculator dotat cu un procesor Intel Core2 Duo E8400 3 GHz, placă video HIS ATI Radeon HD4870 512MB DDR5 256-bit și 4GB RAM DDR2. Am folosit o cameră web normală, A4Tech PK-760E ce are o rezoluție senzor de 0.3 MP, o rezoluție foto de 5 MP și o rezoluție video de 2560 x 2048.

Rezultatele obținute se pot vedea în figura 5.2:

Figura 5.2 – Analiza fluxului optic, în stânga poza în format RGB, iar în dreapta reprezentarea fluxului optic.

Un dezavantaj al acestui algoritm îl reprezintă viteza foarte mică în procesarea fiecărui cadru (aproximativ 1.2 cadre pe secundă), dar are o eficiență ridicată în detectarea mișcării pentru aplicații chiar și în timp real.

Pentru obținerea unui număr de cadre pe secundă mai mare în timpul transmiterii video, putem simplifica detectarea mișcării prin folosirea imaginilor diferențiale.

Presupunem că avem 2 imagini liniare și dorim să comparăm pixelii din ele. Dacă ei sunt asemenea putem concluziona că imaginile sunt identice și nu avem mișcare.

În primul experiment am considerat o imagine 24 bpp RGB (cadrul curent), o copie în tonuri gri a ei (cadrul curent) și un cadru video anterior în tonuri de gri (cadrul anterior). Prin filtre de diferență și de threshold (setat la un prag de 15) am încadrat zonele în care imaginile din cadre diferă.

Mai departe, găsim o imagine cu pixeli albi unde cadrul curent este diferit față de cadrul anterior pe baza nivelului de threshold setat. Dacă numărul de pixeli albi este mai mare decât nivelul maxim setat (50) considerăm că avem mișcare. Pentru eliminarea zgomotelor din imagine, am folosit un filtru de eroziune. Rezultatele se pot vedea în figura 5.3:

Figura 5.3 – Detectarea mișcării prin folosirea metodei diferențiale din primul experiment. În prima poză din stânga nu există mișcare, în cea din mijloc avem mișcarea capului și a feței, iar în ultima mișcarea mâinii.

Avem un număr ridicat de fps-uri pentru această metodă: 15 cadre pe secundă, dar avem un număr important de dezavantaje. Dacă obiectul se mișcă încet atunci vom primi schimbări mici de la un cadru la altu. Așadar, este imposibil să identificăm întregul obiect mișcat. Mai mult, dacă obiectul se mișcă foarte încet, algoritmii nu vor da nici un rezultat.

Un al doilea experiment l-am făcut prin compararea cadrului curent cu primul cadru din secvența video și nu cu cel anterior. Acest lucru ne dă întregul obiect aflat în mișcare independent de viteza lui de deplasare. Rezultatele sunt reprezentate în figura 5.4:

Figura 5.4 – Detectarea mișcării prin folosirea metodei diferențiale din al doilea experiment. În prima poză din stânga nu există mișcare, în cea din mijloc avem mișcarea capului și a feței, iar în ultima mișcarea mâinii.

La fel ca la prima metodă avem un număr ridicat de cadre pe secundă (12 fps-uri). Totuși, algoritmii au un mare dezavantaj: dacă, de exemplu, avem în primul cadru un vehicul iar apoi dispare, atunci vom avea tot timpul mișcare detectată în locul unde mașina a fost.

Pentru a optimiza metoda 2, construim fundalul scenei și comparăm fiecare cadru cu fundalul. Mutăm fundalul la cadrul curent cu o cantitate specificată (un nivel per cadru) – schimbăm culorile pixelilor în fundal cu un nivel per cadru. În final aplicăm un filtru de pixelare pentru cadrul curent și fundalului înainte de procesare. Rezultatele se pot vedea în figura 5.5:

Figura 5.5 – Obiectele detectate ca fiind în mișcare folosind metoda 3.

6. Implementarea sistemului de alertare telefonică

6.1. Concept

Există trei tehnici importante de a transmite pachete de date multimedia: streaming tradițional, download progresiv și streaming adaptiv.

Streaming-ul tradițional este bazat pe un protocol care stabilește o sesiune între cel care furnizează serviciul și client. În acest fel, conținutul media este transmis în mai multe serii de pachete. Protocolul RTP (Real-Time Transport Protocol) împreună cu RTS (Real-Time Streaming Protocol) sunt, de regulă, folosiți în dezvoltarea acestui tip de serviciu.

RTP este un protocol în timp real, dezvoltat pentru servicii de rețele multicast sau unicast. Deoarece RTP folosește UDP, este de obicei folosit în distribuții multicast, în timp ce protocoalele construite deasupra protocolului TCP pot folosi doar unicast. Din acest motiv, RTP este utilizat în tehnologia IPTV (Internet Protocol Television), astfel furnizorii de servicii Internet controlează cantitatea de trafic în rețeaua multicast. De asemenea, în cazul serviciilor de streaming multimedia, RTP este folosit în majoritatea cazurilor în conjuncție cu RTSP, unde conținutul audio și video sunt transmise separat ca fluxuri RTP.

Specificațiile RTP descriu două subprotocoale: transferul de date (RTP) și controlul RTP (RTCP).

RTP este utilizat în transferul de date multimedia care folosesc diferite codecuri, împreună cu timestamp-uri și secvențe de numere. Acestea dau posibilitatea receptorului de a detecta pierderile de pachete și de a efectua rearanjări când este necesar sau sincronizări de stream-uri media alături de alte operații.

RTCP se referă la controlul informațional pentru sincronizări și la parametrii de calitate ai serviciului care pot fi trimiși. Acest protocol utilizează maxim 5% din banda de transmisie.

Opțional, RTP poate fi folosit împreună cu un protocol de descriere al sesiunii sau un protocol de semnal, cum ar fi H.323, MEGACO (Media Gateway Control Protocol), SCCP (Skinny Call Control Protocol) sau SIP (Session Initiation Protocol).

Dezavantajele protocolui RTP sunt următoarele:

nu are un mecanism pentru asigurarea transmisia pachetelor la timp;

nu garantează calitatea serviciilor;

nu garantează ordinea pachetelor trimise;

nu există un control al fluxului.

6.2. Descriere algoritmi

În aeastă secțiune vom detalia principalele protocoale de comunicație a fluxului de date între client și server.

Protocolul RTSP este un protocol de control al sesiunii care oferă un framework extensibil pentru controlul pachetelor de date în timp real. A fost dezvoltat de MMUSIC în 1998 și este util pentru stabilirea și controlarea sesiunii media între terminale, însă nu este responsabil pentru transmisia datelor media. În schimb, RTSP se bazează pe mecanisme RTP, iar în contrast cu HTTP, acesta este dinamic și se pot face cereri de informație și de la client și de la server. Cererile se pot face în trei moduri: conexiuni persistente în tranzacții, o singură conexiune per tranzacție cerere / răspuns sau fără conexiune.

Câteva exemple de implementări RTSP populare sunt: QuickTime Streaming Server (QSS) și RealNetworks’ Helix Universal Server.

Download-ul progresiv este o tehnică de transfer de date între un server și client care a devenit populară și larg răspândită pe Internet. Download-ul progresiv poate fi realizabil folosind un server HTTP normal. Utilizatorii cer conținut multimedia care este apoi descărcat progresiv într-un buffer local. Atunci când există o cantitate suficientă de date, conținutul video este redat. Dacă rata de playback depășește rata download-ului, redarea este amânată până când avem o cantitate suficientă de date.

Dezavantajele download-ului progresiv sunt:

lărgimea de bandă este utilizată la maxim chiar dacă utilizatorul a oprit conținutul video;

nu avem adaptări la ratele de biți, fiecare client este considerat la fel în termeni de lățime de bandă;

nu există suport pentru surse media live.

Streaming-ul adaptiv este o tehnică prin care se detectează disponibilitatea lărgimii de bandă și capacitatea CPU-ului pentru a se regla calitatea video-ului care este redat, astfel se obține cea mai bună calitate în circumstanțele curente. Are nevoie de un encodor cu un CDN pentru a oferi scalabilitate mai bună. Ca și rezultat, utilizatorul au o experiență de streaming media cu cea mai bună calitate pe care o pot avea.

Metodele de adaptare a ratei de biți la o lărgime de bandă variabilă se pot clasifica în trei categorii: transcodare, encodare scalabilă și comutarea stream-ului.

Prin transcodare este posibil să convertim din mers, direct pe server, conținutul video neprelucrat. Pentru a potrivi o rată de biți specifică transcodăm dintr-un encodor în altul. Avantajul acestei abordări este granularitatea care poate fi obținută, întrucât stream-urile pot fi transcodate lărgimii de bandă a user-ului. În figura 6.1 prezentăm diagrama bloc a tehnicii de transcodare:

Figura 6.1 – Diagrama bloc pentru procedeul de transcodare

Dezavantajele metodei sunt explicate mai jos:

costul ridicat pentru transcodanță, ce necesită adaptări ale conținutului video neprelucrat de mai multe ori pentru cereri multiple de calitate diferită;

scalabilitatea scade, transcodarea este făcută pentru fiecare lărgime de bandă a clienților;

procesul de encodare trebuie făcut în servere apropiate pentru a fi lansat în CDN-uri.

Utilizând un codec standard scalabil, de exemplu H.264/MPEG-4 AVC, rezoluția pozei și rata de cadre pot fi adaptate fără a fi nevoie să re-encodăm conținutul video. Această metodă reduce procesul de încărcare, dar este limitată la un set de formate scalabile de codecuri. Metoda se observă în figura 6.2:

Figura 6.2 – Diagrama bloc pentru encodarea scalabilă în cazul streaming-ului adaptiv

Metoda de comutare a stream-ului encodează conținutul video la diferite rate de biți crescânde, generând mai multe nivele de video. Algoritmul trebuie să aleagă nivelul care se potrivește cu lărgimea de bandă a utilizatorului. Atunci când apar schimbări în lărgimea de bandă, algoritmul comutează la alt nivel pentru a asigura redarea continuă. Aceste detalii sunt explicate în figura 6.3:

Figura 6.3 – Diagrama bloc pentru metoda de comutare a stream-ului video

Obiectivul prinicipal al acestei metode este de a minimiza costul de procesare, întrucât nu este necesară procesarea atunci când toate nivelurile au fost generate. În plus, această tehnică nu necesită un codec specific să fie implementat. În contrast, mediul de stocare și de transmisie trebuie stabilite în prealabil, deoarece același conținut video este encodat de n ori (dar la rate de biți diferite). Calitatea nivelurilor nu este incrementală, astfel un singur stream trebuie să fie cerut. Singurul dezavantaj al acestei metode îl constituie granularitatea brută, fiindcă avem un singur set de nivele discrete. În plus, dacă nu există nici un client pentru o rată predefinită, nu este nevoie să generăm acest nivel; acest lucru costă spațiu doar serverul curent (sau serverele) și nu toate serverele trebuie să stocheze toate nivelurile unui stream.

Recent, o nouă soluție pentru streamingul adaptiv a fost concepută. Aceasta este bazată pe metoda de comutare a stream-ului și folosește HTTP ca protocol de comunicare, în loc să definească un protocol nou.

Sursele video și audio sunt tăiate în segmente mici de aceeași lungime (câteva secunde). Opțional, segmentele pot fi tăiate de-a lungul unui video cu un grup de poze, astfel fiecare segment începe cu o cheie a cadrului, adică segmentele nu au dependențe trecute / viitoare între ele. În final, toate segmentele sunt encodate în formatul dorit și hostate pe un server HTTP.

Clienții cer segmentele secvențial și le descarcă prin download HTTP progresiv. Segmentele sunt redate în ordine și pentru că sunt contigue, rezultatul total de redare este foarte fin. Întreaga logică de adaptare este controlată de client. Clientul calculează timpul de cerere al fiecărui segment.

Framework-ul media pentru Android suportă nativ streaming-ul pe RTP și RTSP. Din păcate, majoritatea versiunilor de Android nu suportă protocoale adaptive pe HTTP. Doar Honeycomb suportă nativ Apple-HLS.

Câteva exemple de implementări Apple-HLS pentru Android sunt:

NexPlayer: lansat în septembrie 2010 de Nextreaming Corp. Ei susțin ca au suport pentru streaming-ul adaptiv Apple, dar atât aplicația cât și detalii de funcționare nu sunt oferite publicului;

VPlayer este un player video comercial care poate fi descărcat de pe GooglePlay. Din păcate, VPlayer nu este compatibil cu toate dispozitivele Android;

Daroon Player este un player video gratis dezvoltat de Daroonsoft și oferit pe piața GooglePlay. Suportă o gamă largă de formate media și protocoale de streaming, inclusiv RTSP și Apple-HLS.

Streaming-ul adaptiv Microsoft-LSS încă nu oferă suport pentru Android, chiar dacă Microsoft a indicat că îl vor face disponibil în plug-inurile navigatoare Silverlight. Totuși, implementarea open-source a Silverlight pentru sisteme de operare Unix, a fost portată experimental pe Android.

În tabelul 6.1 prezentăm o comparație între diferite soluții HTTP adaptive:

Tabelul 6.1 – Comparație între metodele HTTP adaptive

Pentru a implementa un serviciu de live streaming pentru Android, toate limitările sistemului de operare trebuie avute în vedere și să fie ales un server compatibil. Luăm în considerare următoarele aspecte:

soluțiile Adobe și Microsoft sunt proprietare și ambele au nevoie de servere specializate. Aceste abordări cresc costul și scad deschiderea serviciului rezultate;

Apple-HLS intenționează să fie un standard IETF, dar specificația lui (referitor la codec și container) este de ajuns să fie considerată o implementare straightforward pentru Android. Chiar dacă H.264 este un codec cu suport integral pe Android, MPEG-TS este un container care este inclus în versiuni Android mai mari de 3.0;

MPEG-DASH este un standard care iese la suprafață, destul de flexibil să fie implementat pe despozitive Android.

Alte considerente ar fi portabilitatea redării video-ului pe un ecran mare, cum ar fi de exemplu în transmisiile Mobile 3DTV.

3DTV și Mobile TV sunt două tehnologii noi pe piața audio-video. Se dorește vizualizarea realistică a scenelor 3d aflate în mișcare și înlocuirea efectivă a sistemului HDTV din casa oamenilor. Mobile TV aduce conținut video dinamic și fresh, gadget-urilor care pot fi ținute în mână.

Conceptul general al 3DTV-ului este de a afișa conținutul video pe display-uri mari / largi și simultan mai multor utilizatori.

Pe baza acestui concept, s-au dezvoltat display-uri care au nevoie de ochelari și display-uri autostereoscopice. Companii precum Philips, Panasonic, Sony si Samsung au adus suport pentru fiecare din aceste tehnologii.

Pentru Mobile TV, impunerea unui standard a fost necesară, astfel s-a creat DVB-H pentru Europa. A fost adoptat ca standard in 2004 și este tehnologia preferată de UE pentru mobile broadcasting terestru. Cei mai mari competitori pentru DVB-H sunt MediaFLO, 3G-ul celular bazat pe MBMS (Multimedia Broadcast Multicast Service) mobile TV și ATSC-M/H (Advanced Television Systems Commitee – Mobile/Handheld) în SUA. În prezent, DVB-SH (Satellite to Handhelds) și, in viitor, DVB-NGH (Next Generation Handheld) sunt îmbunătățiri pentru DVB-H, oferind o îmbunătățire spectrală eficientă (rata informațională transmisă pe o lărgime bandă dată) și o mai bună flexibilitate a modulației. DVB-H a fost un eșec comercial, iar serviciul nu mai este on-air. Finlanda a fost ultima țară care a închis semnalul în martie 2012.

Primele broadcast-uri DVB-H TV au început în câteva țări europene cu niște terminale compatibile care pot fi ținute în mână, dezvoltate de Nokia, Samsung, Motorola și LG.

3DTV și Mobile TV sunt mai degrabă două tehnologii divergente, unde primul se bazează pe ecrane foarte mari și imagini realiste, în timp ce Mobile TV se bazează pe dispozitive portabile.

Se poate vorbi de o convergență a celor două tehnologii, unde putem avea în buzunar un 3DTV? Pare un lucru foarte atractiv. Pentru a-l face realizabil, cercetările din domeniu trebuie să le facă adaptabile, să le modifice și să avanseze cu tehnologia video 3D.

Câteva cercetări din domeniu sunt:

Korean 3D-TDMB – implementarea serviciilor 3D AV asupra sistemului TDMB (Terrestrial transmission, utilizeaza MPEG-4 H.264 pt video)

3DPhone – utilizatorii pot comunica în spații virtuale 3D, interacționează cu aplicațiile din telefon și cu dispozitivul în sine în 3D

Mobile3DTV – dezvoltare formate, codec-uri, tool-uri pentru redarea conținutului video prin canalul DVB-H.

Conținutul video stereo este capturat, encodat eficient, iar apoi este transmis robust prin canalul DVB-H pentru a fi receptat, decodat și redat de un dispozitiv portabil care are activat DVB-H.

H.264/AVC simulcast, H.264/AVC stereo SEI message, MVC folosesc doar stereo video data, în timp ce MPEG-C Part 3 este bazat pe video plus depth. O pereche de imagini stereeo arată aceeași scenă din diferite puncte vizuale care corespund ochiilor. Astfel o pereche de imagini stereo poate fi vizualizată direct pe un display 3D.

Într-o reprezentare V+D, un semnal video și harta pixelilor depth este transmisă utilizatorilor. Informațiile video și depth, se randează la decodor. Astfel, V+D are o funcționalitate extinsă față de V+V, unde impresia stereo poate fi ajustată și customizată după transmisie. Totuși, avem un dezavantaj întrucât există o complexitate mai mare pentru receiver și sender.

Conceptul de V+D este foarte interesant datorită backward compatibilității la video clasic 2D și a funcționalității extinse. Mai mult, se pot folosi codecuri video existente. Este nevoie doar să specificăm o sintaxă de nivel înalt care lasă decodorul să interpreteze două fluxuri video care sunt transmise: culoare și depth.

Codarea V+V operează pe două secvențe video înrudite. H.264/AVC înseamnă o codare simplă independentă a celor două video-uri fără a exploata redundanța inter-view. Celelalte două, H.264/AVC stereo SEI și MVC, efectuează predicții inter-view între secvențele video stereo folosind metode diferite.

Codarea obținută din predicții inter-view variază mult. Duce la o reducție a bitrate-ului semnificativă pentru câteva secvențe. Însă, în unele cazuri aceasta este neglijabilă

6.3. Implementare

În implementarea prezentată în acest raport de cercetare vom folosi operatorul de interpolare biliniară pentru downsamling, respectiv upsampling.

Proiectul de față a fost implementat folosind mediul de dezvoltare Microsoft Visual Studio 2010, limbajul Visual C#. Pentru manipularea imaginilor am integrat biblioteca EmguCV

Interfața grafică cu utilizatorul pentru subsistemul server, este prezentată în figura 6.4:

Figura 6.4 – Interfața grafică cu utilizatorul pentru subsistemul server

Unde:

A: textbox-ul unde utilizatorul își introduce adresa IP a serverului (default este localhost);

B: textbox-ul unde utilizatorul introduce port-ul deschis pentru acceptarea pachetelor de la client;

C: simulatorul latenței de rețea, are un pas de incrementare de 2.5 %;

D: flag boolean pentru streaming-ul de date adaptiv, unde true = ON, false = OFF;

E: trimite către client stream-ul video preluat de la camera web.

La apăsarea butonului „Send Video Stream”, se deschide un thread pentru conexiunea socket (IP-ul este preluat din textbox-ul A, iar port-ul din textbox-ul B).

byte[] totaldata = new byte[TOTAL];

IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(ipBOX), portBOX);

streamClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

Capturarea fiecărui frame de la camera web se face prin metoda EmguCV capture(). Cât timp thread-ul este activ se execută iterațiile de downsampling și upsampling ale fiecărei imagini.

Iterația 1

Imaginea originală este captura de la webcam. Se encodează ca bitmap prin funcția ToBitmap(). Imaginea downsampled are dimensiunile imaginii originale înjumătățite (original.Width / 2, respectiv original.Height / 2), iar imaginea bitmap upsampled se compune din imaginea downsampled având dimensiunile imaginii originale (downsampled.Width * 2, respectiv downsampled.Height * 2). În final, imaginea cu detaliile iterației 1 se compune apelând metoda imgSub(original, upsampled):

private Bitmap subImages(Bitmap A, Bitmap B)

{

Bitmap sub = new Bitmap(A.Width, B.Height);

Image<Rgb, Byte> A1 = new Image<Rgb, byte>(A);

Image<Rgb, Byte> A2 = new Image<Rgb, byte>(B);

Image<Rgb, Byte> A3 = A1.Sub(A2);

return img3.ToBitmap();

}

Iterația 2

Imaginea originală are dimensiunile înjumătățite ale capturii webcam-ului. La fel ca la iterația 1, se encodează ca bitmap. Imaginea downsampled are dimensiunile imaginii originale înjumătățite (original.Width / 2, respectiv original.Height / 2, acest lucru înseamnă că este de 4 ori mai mică decât imaginea preluată de la webcam). Imaginea upsampled se compune la fel ca la iterația 1, iar detaliile imaginii iterației 2 se compune prin metoda imgSub.

Iterația 3

Se procedează la fel, rezultând imaginea downsampled de 8 ori mai mică decât imaginea originală capturată de camera web.

În final, în funcție de parametrii setați de latență rețea și streaming adaptiv, se trimit imaginiile de detalii clientului pentru a fi ulterior procesate:

while (true)

{

trimiteImagine(i1,0);

trimiteImagine(detaliiPas3,0);

trimiteImagine (detaliiPas2,0);

trimiteImagine (detaliiPas1,0);

break;

}

Sfârșitul frame-ului este marcat de trimiterea unui bitmap de 1×1.

Pentru a avea o calitate cât mai bună a detaliilor se aplică algoritmul de compresie Huffman.

Subsistemul client este prezentat în figura 6.5:

Figura 6.5 – Interfața grafică cu utilizatorul pentru subsistemul client

Unde:

A: demarează start-ul imaginilor de la webcam;

B: imaginea finală rezultată din compunerea detaliilor primite de la server, care sunt compresate Huffman;

C: filtrele pe care utilizatorul le poate aplica imaginii: blur, median, gaussian, bilateral, binarizarea imaginii și detecția contururilor.

Acțiunea declanșată de apăsarea butonului „Start Video” deschide socketul pentru ascultarea pachetelor primite de la server.

Socket streamClient = socket.Accept();

IPEndPoint client = (IPEndPoint)client.RemoteEndPoint;

Se alocă un obiect de tipul MemoryStream care conține secvențele de octeți ce compun imaginiile transmise de la server. Mai departe, se interpretează iterațiile 1 – 3, astfel încât după compunerea unei imagini de detaliu se testează dacă s-a primit bitmap-ul de sfârșit frame. În cazul în care imaginile au fost compresate Huffman la server, acestea se decodifică înainte de afișare.

Filtrele sunt aplicate imaginilor de detaliu, ele fiind stocate în memorie sub forma unei structuri de variabile booleene. La alegerea unui filtru de către utilizator, se fac verificări în timp real în thread-ul pentru ascultarea pachetelor. De exemplu, dacă s-a selectat filtrul de smoothGaussian, imaginea de detaliu primită este trecută prin acest filtru și apoi afișată. Se utilizează funcția filterBitmap:

private Bitmap filtru(Image src)

{

Bitmap res = (Bitmap)src;

Emgu.CV.Image<Rgb, Byte> imgOriginal = new Image<Rgb, byte>(res);

if (filters.smoothGaussian)

{

imgOriginal = imgOriginal.SmoothGaussian(25);

}

res = imgOriginal.ToBitmap();

return res;

}

6.4. Rezultate obținute

În cadrul experimentelor am folosit o cameră web A4Tech PK-760E ce are o rezoluție senzor de 0.3 MP, o rezoluție foto de 5 MP și o rezoluție video de 2560 x 2048. Modul de conectare cu calculatorul se face prin USB. De asemenea, am folosit un desktop PC dotat cu un procesor Intel Core2 Duo E8400 3 GHz, placă video HIS ATI Radeon HD4870 512MB DDR5 256-bit și 4GB RAM DDR2. Testele au fost făcute în rețeaua locală și simulând o latență din ce în ce mai mare.

Primul scenariu de test l-am făcut pentru a evalua performanțele cadrelor transmise pe secundă (FPS) în cazul aplicării algoritmului Huffman. Rezultatele se pot vedea în graficul din figura 6.6:

Figura 6.6 – Performanțe în termeni FPS cu și fără compresie Huffman

Se observă că cele mai bune performanțe le-am avut atunci când nu există latență în rețea (0 %), unde am obținut o medie de aproximativ 38 fps în transmiterea secvențelor de imagini bitmap având compresie Huffman, respectiv 29 fps fără compresie.

Putem concluziona că s-a observat o creștere a cadrelor pe secundă cu aproximativ 30% în cazul aplicării algoritmului Huffman asupa imaginilor de detaliu.

Al doilea scenariu de test l-am făcut prin obținerea unei evaluări subiective ale performanței de recompunere ale imaginii finale la receptor. Am obținut evaluarea unui grup de 5 persoane (3 băieți și 2 fete) cu vârste cuprinse între 24-26 de ani, asupra calității imaginii finale.

Fiecare subiect a trebuit să dea o notă de la 1 la 10 asupra calității a 3 secvențe video rulând între 20 și 30 de secunde cu factori perturbatori de la un nivel scăzut la unul accentuat. Rezultatele experimentale se pot vedea în tabelul 6.2:

Tabelul 6.2 – Evaluarea calității imaginiilor finale de la receptor

Subiecții au vizionat sevențe video mai întâi normale, fără aplicarea operațiilor de upsampling – downsampling. Acest lucru a fost necesar pentru ca ei să se poată obișnui cu webcam-ul și pentru a obține un punctaj cât mai relevamt pentru evaluarea algoritmilor. Se observă că avem un scor de 9.2 / 10 în cazul în care avem un nivel mediu de perturbație al camerei web și un scor de 8.8 / 10 în condiții ridicate de mișcare al camerei.

Ultimul scenariu de test l-am făcut prin aplicarea filtrelor asupra imaginiilor de detaliu la decodor. Scopul acestui test a fost de a obține o creștere a calității imaginii finale prin aplicarea unui filtru de imagine. Cele mai bune rezultate le-am avut cu un filtru Gaussian:.

Figura 6.7 – În stânga: imagine din secvența video fără filtru, în dreapta: captură cu filtru Gaussian

7. Concluzii

Prin îmbinarea tehnologiilor de recunoașterea facială, de detectare a mișcării și de alertă prin telefon am propus un sistem de supraveghere video securizat al unei încăperi

Recunoașterea facială este o metodă biometrică non-invazivă și care poate fi folosită chiar fără ca subiectul să știe.

Algoritmii de recunoaștere a obiectelor, formelor, vorbirii, mișcării sau gesticii constituie o categorie specifică, ce caracterizează domeniul multimedia. Recunoașterea este o altă formă de clasificare, care nu se mai bazează pe măsurarea dimensiunilor și formelor obiectelor.

Descrierea bazată pe conținut a imaginii se realizează în principal prin recunoașterea și interpretarea unor caracteristici esențiale ale tipului de mediu, cum ar fi: culoarea, textura, forma, locația spațială, regiunile de interes, caracteristicile faciale, cadrele cheie, detectarea modificărilor de scenă. Recunoașterea automată a caracteristicilor importante ale unui mediu necesită un algoritm corespunzător, ale căror criterii de optimizare sunt atât micșorarea costurilor, dar și asigurarea unei indexări consistente.

Prin cercetarea derulată de-a lungul celor patru semestre am reușit să îndeplinim obiectivele trasate la început și am reușit să evaluăm, implementăm și optizăm algoritmii necesari dezvoltării sistemului de supraveghere video.

Prototipurile și experimentele din domeniu deschid noi porți de dezvoltare și cercetare în domeniul computer vision.

În viitor, dorim să îmbunătățim transmiterea cadrelor de imagini pentru telefoane mobile prin tehnologii Mobile 3DTV. Astfel, vom oferi utilizatorului o experiență unică și cursivă a unui live streaming în timp real.

De asemenea, propunem pentru viitor o construcție virtuală a încăperii unde se realizeză supravegherea video.

Bibliografie

Large Displacement Optical Flow from Nearest Neighbor Fields – Zhuoyuan Chen, Hailin Jin, Zhe Lin, Scott Cohen, Ying Wu; Proc IEEE Conf. Computer Vision and Pattern Recognition, Iunie 2013.

Introductory Techniques for 3D Computer Vision – E. Trucco, A. Verri; Prentice Hall (Martie 16, 1998).

Digital Image Processing – R. C. Gonzales, R. E. Woods; 2nd Edition, Prentice Hall, 2002.

Sweeping solids on manifolds. In Symposium on Solid and Physical Modeling – Sergei Azernikov; Proceeding SPM '08 Proceedings of the 2008 ACM symposium on Solid and physical modeling, pp 249-255, ACM New York, NY, USA 2008.

A computational approach to edge detection. Pattern Analysis and Machine Intelligence – John Canny; Pattern Analysis and Machine Intelligence, IEEE Transactions on (Volume:PAMI-8 , Issue: 6 ),pp. 679-698 Noiembrie 1986.

A hierarchical approach for fast and robust ellipse extraction. Pattern Recognition – F. Mai, Y. Hung, H. Zhong, W. Sze; Journal Pattern Recognition archive Volume 41 Issue 8, August, 2008, pp 2512-2524.

Introduction to Video and Image Processing: Building Real Systems and Applications (Undergraduate Topics in Computer Science) – Thomas B. Moeslund; Springer; 2012 edition (Ianuarie 23, 2012).

Laborator Sisteme și Tehnici Multimedia – Francisc Iacob; suport laboratoare Master Calculatoare, 2013.

The model method in facial recognition – W. W. Bledsoe; Technical report PRI 15, Panoramic Research Inc., Palo Alto, 1966.

Face recognition using eigenfaces – M. Turk, A. Pentland; Proc. IEEE Conference on Computer Vision and Pattern Recognition, Maui, Hawaii, 1991.

Eigenfaces vs Fisherfaces: recognition using class specific linear projection – V. I. Belhumeur, J. P. Hespanha and D. J. Kriegman; IEEE Trans. PAMI 19(7), pp. 711-720, 1997.

Mixtures of local linear subspaces for face recognition – Brendan J. Frey, Antonio Colmenarez, Thomas S. Huang; Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition 1998, Santa Barbara, CA. IEEE Computer Society Press: Los Alamitos, CA.

Bayesian face recognition – B. Moghaddam, T. Jebara, A. Pentland; Technical Report TR2000-42, Mitsubishi Electric Research Laboratories, 2000.

Face recognition from frontal and profile views – G. Gordon; Proc. International Workshop on Face and Gesture Recognition, pp. 47-52, 1996.

Automatic face authentication from 3D surface – C. Beumier and M. P. Acheroy; Proc. British Machine Vision Conf. (BMVC), pp 449-458, 1998.

Face recognition using componentbased SVM classification and morphable models – J. Huang, V. Blanz, B. Heisele; SVM 2002, pp. 334- 341, 2002.

The HISCORE face recognition application: Affordable desktop face recognition based on a novel 3D camera – N. Mavridis, F. Tsalakanidou, D. Pantazis, S. Malassiotis, M. G. Strintzis; Proc. International Conf. on Augmented Virtual Environments and 3D Imaging (ICAV3D), Mykonos, Greece, 2001.

3D Face Recognition without Facial Surface Reconstruction – Alexander M. Bronstein, Michael M. Bronstein, Ron Kimmel, Alon Spira; Techion Computer Science, Technical Report, CIS 2003-05.

Bending invariant representations for surfaces – A. Elad, R. Kimmel, Proc. CVPR, pp. 168-174, 2001.

One-shot active shape acquisition – M. Proesmans, L. Van Gool, A. Oosterlinck; Proc. Internat. Conf. Pattern Recognition, Vienna, Vol. C, pp. 336- 340, 1996.

Shape from 2D edge gradients, Pattern Recognition – S. Winkelbach, F. M. Wahl; Lecture Notes in Computer Sciences 2191, pp. 377-384, Springer, 2001.

Shape from single stripe pattern illumination – S. Winkelbach, F. M. Wahl; L. Van Gool (Ed): Pattern Recognition (DAGM 2002), Lecture Notes in Computer Science 2449, pp. 240-247, Springer, 2002.

A 3D recognition and positioning algorithm using geometrical matching between primitive surfaces – O. D. Faugeras, M. Hebert; Proc. 7th International Joint Conf. on Artificial Intelligence, pp. 996–1002, 1983.

The free form matching problem. Machine vision for threedimensional scene – P. J. Besl; Freeman, H. (ed.) New York Academic , 1990.

Recovering the position and orientation of free-form objects from image contours using 3D distance map – G. Barequet, M. Sharir; IEEE Trans. PAMI, 19(9), pp. 929–948, 1997.

A numerical solution to the generalized mapmaker's problem: flattening nonconvex polyhedral surfaces – E. L. Schwartz, A. Shaw, E. Wolfson; IEEE Trans. PAMI, 11, pp. 1005-1008, 1989.

Texture mapping using surface flattening via multi-dimensional scaling – G. Zigelman, R. Kimmel, N. Kiryati; IEEE Trans. Visualization and Comp. Graphics, 8, pp. 198-207, 2002.

Computational surface flattening: a voxel-based approach – R. Grossman, N. Kiryati, R. Kimmel; IEEE Trans. PAMI, 24, pp. 433-441, 2002.

Modern multidimensional scaling – I. Borg, P. Groenen; Theory and applications, Springer, 1997.

Discussion of a set of points in terms of their mutual distances – G. Young, G. S. Householder; Psychometrika 3, pp. 19-22, 1938.

Content based retrieval of VRML objects – an iterative and interactive approach – A. Tal, M. Elad, S. Ar; EG Multimedia, 97, pp. 97-108, 2001.

Computing geodesic on manifolds – R. Kimmel, J. A. Sethian; Proc. US National Academy of Science 95, pp. 8431–8435, 1998.

A review of the theory, algorithms, and applications oflevel set method for propagating surfaces – J. A. Sethian; Acta numerica, pp. 309-395,1996.

Ordered upwind methods for static Hamilton-Jacobi equations: theory and applications – J. Sethian, A. Vladimirsky; Technical Report PAM 792 (UCB), Center for Pure and Applied Mathematics, 2001 Submitted for publication to SIAM Journal on Num. Anal., 2001.

Curs Aplicații biometrice. Recunoașterea fețelor – Iulian Ciocoiu; Curs CIPS, Facultatea de Electronică și Telecomunicații Iași, Capitolul 1, Curs 8.

Motion stabilisation for video sequences – Oliver Wilkie; Imperial College London, Final Year Project, Iunie, 2013, pp. 2-5.

Achieving Anonymity Against Major Face Recognition Algorithms – Benedikt Driessen, Markus Durmuth; 4th IFIP TC 6/TC 11 International Conference, CMS 2013, Magdeburg, Germany, September 25-26, 2013.

A Novel Approach to Face Recognition using Image Segmentation Based on SPCA-KNN Method – Kamencay Patrik, Zachariasova Martina, Hudec Robert, Jarina Roman, Benco Miroslav, Ubik Jan HL; Radioengineering;Apr2013, Vol. 22 Issue 1, p92, Aprilie, 2013.

A Dynamic Adaptive HTTP Streaming Video Service for Google Android – uciano Rubio Romer. Degree project in Communication Systems Second level, 30.0 HEC Stockholm, Sweden. Octombrie 2011, pp.7 – 25.

Live Video Streaming from Android-Enabled Devices to Web Browsers – Justin Bailey, A thesis submitted in partial fulfillment of the requirements for the degree of Master of Science Department of Computer Science and Engineering College of Engineering University of South Florida. Octombrie 2011.

The video streaming over Wi-Fi network application client on the Android platform – Preeti Yadvendra M.Tech. Student (C.SC.) GEC, Ajmer (Rajasthan),India. IRACST – International Journal of Computer Science and Information Technology & Security (IJCSITS), ISSN: 2249-9555 Vol. 3, No.4, August 2013.

An end-to-end testbed for scalable video streaming to mobile devices over HTTP – Yu-Sian Li ; Dept. of Comput. Sci. Nat., Tsing Hua Univ., Hsinchu, Taiwan ; Chien-Chang Chen ; Ting-An Lin ; Cheng-Hsin Hsu. Multimedia and Expo (ICME), 2013 IEEE International Conference on 15-19 July 2013.

Live Streaming with Content Centric Networking – Hongfeng Xu, Zhen Chen, Rui Chen, Junwei Cao – ICNDC '12 Proceedings of the 2012 Third International Conference on Networking and Distributed Computing Pages 1-5 IEEE Computer Society Washington, DC, USA 2012.

Implementation of continuous HTTP live streaming using playback position request mechanism in heterogeneous networks – Minseok Jang ; Dept. of Electr. Eng., KAIST (Korea Adv. Inst. of Sci. & Technol.), Daejeon, South Korea ; Hyeontak Oh ; Jinhong Yang ; Jun Kyun Choi. Advanced Communication Technology (ICACT), 2013 15th International Conference on 27-30 Jan. 2013 PyeongChang.

Laborator Procesarea Imaginilor – Tiberiu Marita; Laborator 11: Detecția punctelor de muchie pp. 2-5, Universitatea Tehnică din Cluj Napoca, Catedra de Calculatoare.

Downsampling of compressed images in the DCT domain – A. N. Skodras, C. A. Christopoulos – Electronics Laboratory, University of Patras, GR-26110 Patras, Greece; Computer Technology Institute, PO box 1122, GR-26110 Patras, Greece; Ericsson Telecom AB, Compression Lab, TN/ETX/PN/XML, S-126 25 Stockholm, Sweden.

MPEG Video Compositing in the Compressed Domain – Y. Noguchi, D. G. Messerschmitt and S.-F. Chang – Proc. IEEE ISCAS-96, 1996.

2:1 Upsampling-downsampling image reconstruction system – Mihai Cristian TĂNASE, Mihai ZAHARESCU, Associate Professor PhD Eng. Ion BUCUR – Department of Computer Science and Engineering, Faculty of Automatic Control and Computers Science University “Politehnica” of Bucharest, Splaiul Independenței 313, Bucharest, 060042, Romania.

Fast Algorithm for Computing Discrete Cosine Transform – C. W. Kok. IEEE Trans on Signal Processing, Vol. 45, No. 3, pp. 757-760, Mar. 1997.

Image and Video Compression Standards: Algorithms and Architectures – V. Bhaskaran and K. Konstantinides – Second Edition, Kluwer Academic Publishers, 1997.

Image Super-Resolution by Vectorizing Edges – Chia-Jung Hung, Chun-Kai Huang, Bing-Yu Chen, National Taiwan University, 1999.

Local Thresholding Image Binarization using Variable-Window Standard Deviation Response – Costin-Anton Boiangiu, Alexandra Olteanu, Alexandru Victor Stefanescu, Daniel Rosner, Alexandru Ionut Egner – Proceedings of the 21st International DAAAM Symposium, 20-23 October 2010, Zadar, Croatia, pp. 133-134.

Downsampling dependent upsampling of images – Tamas Frajka, Kenneth Zeger – University of California, San Diego, Department of Electrical and Computer Engineering, 9500 Gilman Dr, MC0407, La Jolla, CA 92093-0407, USA – 2 October 2003.

Mastering OpenCV with Practical Computer Vision Projects – Daniel Lélis Baggio, Shervin Emami, David Millán Escrivá, Khvedchenia Ievgen, Naureen Mahmood, Jasonl Saragih, Roy Shilkrot. ISBN-10: 1849517827 – 3 Decembrie 2012.

Application of the Hough Transform – Kyewook Lee. University of Massachusetts, Lowell – Ianuarie 2006.

An Improved Canny Edge Detection Algorithm – Bing Wang, Shaosheng Fan. Computer Science and Engineering, 2009. WCSE '09. Second International Workshop on (Volume 1) – 28-30 Oct. 2009 – pp. 497 – 500.

Probabilistic approach to the Hough transform – R. S. Stephens. Journal Image and Vision Computing archive Volume 9 Issue 1, Feb. 1991 – pp. 66 – 71.

Using projection operators in Computer Aided Geometric Design – Laurent Buse, Mohamed Elkadi, and Bernard Mourrain – Comtemporary Mathematics 334 (2003) – pp. 321 – 342.

Automatic perspective correction for quadrilateral objects – Nash Blog – 12 Ianuarie 2013.

The OpenCV Library: Computing Optical Flow – David Stavens; Stanford Artificial Intelligence Lab (tutorial de la: http://robots.stanford.edu/).

A new Method for Face Recognition Using Variance Estimation and Feature Extraction – Walaa Mohamed, Mohamed Heshmat, Moheb Girgis, Seham Elaw; International Journal of Emerging Trends & Technology in Computer Science (IJETTCS), vol. 2 issue 2, Martie – Aprilie 2013.

Object recognition using the OpenCV Haar cascade-classifier on the iOS platform – Staffan Reinius; UPPSALA Universitet, Department of Information Technology , lucrare de licență, Ianuarie 2013.

Similar Posts