Detectia Obiectelor in Csharp

download Detectia Obiectelor in Csharp

of 14

description

Detectia Obiectelor in Csharp

Transcript of Detectia Obiectelor in Csharp

Proiect Badescu Cristian Anul 1 Master TAVTHaar - Detectia Obiectelor in C sharp

Cuprins

1.Definitie C sharp2.Introducere3.Istoric1. Caracteristici simple 2. Cascada atenional3.Reprezentarea integral a imaginii4.Codul surs5.Folosirea codului6.Puncte de interes7.Concluzie8.Bibliografie-Referine9. Licenta

1.Definitia C sharp

C#C#este unlimbaj de programareorientat-obiect conceput deMicrosoftla sfritul anilor 90. A fost conceput ca un concurent pentrulimbajul Java. Ca i acesta, C# este un derivat al limbajului de programareC++.C# i programarea WindowsC# simplific mult scrierea de programe pentru sistemul de operareWindows.Exemplu de program simplu Windows scris n Managed C++ ( C++/CLI) i C#:Cod scris n Managed C++ ( C++/CLI):

public:int main(array ^args){ // Activarea efectelor vizuale Windows XP nainte de crearea oricrui control Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false);

// Crearea i rularea ferestrei principale Application::Run(gcnew Form1()); return 0;}Cod scris n C#:public static void Main(){

Form1 form1 = new Form1(); form1.Show(); Application.Run(form1);}(1)

2.Introducere

n 2001, Viola i Jones au propus primul cadru de detectare a obiectelor n timp real. Acest cadru, fiind capabil s funcioneze n timp real cu privire la 2001 de hardware, a fost parial dedicat de detectia feei umane. i rezultat toat lumea il tie - de detectia feei este acum o caracteristic implicit pentru aproape orice aparat de fotografiat digital i de telefon mobil de pe pia. Chiar dac aceste dispozitive nu pot fi folosi direct metoda lor, aceast disponibilitate acum omniprezente, de dispozitive de detectare a feei au fost cu siguran influenat de activitatea lor.

Acum, aici vine una dintre cele mai interesante puncte ale acestui cadru. Pentru a localiza un obiect ntr-o scen mare, algoritmul pur i simplu efectueaz o cutare exhaustiv, folosind o fereastr de alunecare, folosind diferite dimensiuni, rapoarte de aspect, i locaii. Cum se face ceva de genul asta ar putea fi att de eficiente?

i aici incepe contributia autorilor:

Acest articol ar trebui s prezinte cititorului un cadrul de detectare a obiectelor Viola-Jones, i ghid la punerea n aplicare a acestuia n interiorul cadrului de Accord.NET. O aplicaie de prob este prevzut astfel nct cititorii interesai pot ncerca detectarea imaginilor i a vedea cum poate fi realizat cu ajutorul cadrului.

3.Istoric

Contribuiile aduse de Paul Viola i Michael Jones au avut loc de trei ori. Mai nti, s-au concentrat pe crearea unui clasificator bazat pe combinarea mai multor clasificatori slabi, pe baza caracteristicilor extrem de simplu, pentru a detecta o fa. n al doilea rnd, au modificat un algoritm pe atunci standard, pentru combinarea clasificatori pentru a genera clasificatorii, care ar putea avea chiar ceva timp pentru a detecta de fapt, o fata intr-o imagine, dar care ar putea respinge regiuni care nu conine o fata extrem de rapid. i n al treilea, au folosit o reprezentare elegant imagine care ar putea n mod efectiv pre-calcul operaiunile de aproape foarte costisitoare necesare pentru rularea clasificator lor la o dat.

1. Caracteristici simple

De cele mai multe ori, atunci cnd unul este pe cale de a crea un clasificator, trebuie brusc s decid ce caracteristici s ia n considerare. O caracteristic este o caracteristic, ceva care va aduce, sperm, suficiente informaii n procesul de decizie, astfel nct clasificatorul poate repune n decizia sa. De exemplu, s presupunem c se ncearc s creeze un clasificator pentru a distinge dac o persoan este supraponderal. O alegere direct de caracteristici ar fi nlimea i greutatea persoanei. Culoarea parului, de exemplu, nu ar fi o caracteristic mult mai informativ n acest caz.

Deci, s ne ntoarcem la funciile alese pentru clasificatorul Viola-Jones. Caracteristicile prezentate mai jos sunt caracteristici dreptunghiulare Haar-cum ar fi. n timp ce aceasta nu este imediat evident, ceea ce reprezint este diferenele n intensitate (tonuri de gri), ntre dou sau mai multe zone dreptunghiulare adiacente din imagine.

De exemplu, luai n considerare n cazul n care una dintre aceste caracteristici este plasat deasupra unei imagini, cum ar fi poza imagini Lena Sderberg de mai jos. Valoarea caracteristic ar fi rezultatul nsumarea toi pixelii de intensitate n partea alb a dreptunghiului, nsumarea pixelii n partea albastr a dreptunghiului, iar pe atunci calcul diferena lor. Sperm c aceasta ar trebui s fie limpede de imaginile de pe partea dreapt a secvenei de ce aceste caracteristici dreptunghiulare ar fi eficace in detectarea o fata. Avnd n vedere uniformitatea de umbre n faa uman, anumite caracteristici par s se potriveasc foarte bine.

Imaginea de mai sus ofer, de asemenea, o idee despre cum funcioneaz algoritmul de cutare. Acesta ncepe fie cu o fereastr mare (sau mica) i scaneaz imaginea exhaustiv (de exemplu, cum ar fi prin dislocarea ferestrei cteva puncte la dreapta, i merge n jos, pana la captul liniei). Cnd o scanare se termin, se micoreaz (sau creste) aceast fereastr, repetnd procesul peste tot din nou.2. Cascada atenional

n cazul n care detectorul nu a fost extrem de rapid, acest sistem, cel mai probabil nu va lucra bine n timp real. Chestia este c detectorul este extrem de rapid , pana la aruncarea ferestre nepromitoare. Deci, se poate determina rapid n cazul n care o regiune nu conine o fata. Atunci cnd aceasta nu este foarte sigur de o anumit regiune, se petrece mai mult timp ncercnd s verifice c acesta nu este un chip. Cnd n cele din urm renun la ncercarea de a o respinge, se poate trage concluzia c este o fata.

Deci, cum detectorul face asta?

Ea face acest lucru prin utilizarea o cascad atenionala . O cascad este o modalitate de a combina clasificatori ntr -un mod in care un anumit clasificator este prelucrat numai dup ce toti ceilalti clasificatori de dinaintate acestuia au fost deja procesati . ntr- o cascad ,obiectul de interes are permisiunea doar s inainteze n cascada dac nu a fost aruncat de ctre detectorul anterior .

Schema de clasificare folosit de metoda Viola - Jones este de fapt o cascad de clasificatori amplificati. Fiecare etap n cascad este n sine un clasificator puternic, n sensul acesta poate obine o rat foarte mare de respingere prin combinarea a o serie de clasificatori, n unele feluri, mai slabi.Un clasificator slab este un clasificator care poate funciona doar marginal mai bine dect la intamplare. Acest lucru nseamn c este doar puin mai bun dect rsturnarea unei monede i de a decide dac exist ceva n imagine sau nu. Cu toate acestea, este posibil s se construiasc un clasificator puternic prin combinarea deciziei mai multor clasificatoare slabe ntr-o singur decizie, ponderat. Acest proces de combinare a mai multor invatatori slabi, pentru a forma un nvator puternic se numete boosting. A nva un clasificator ca aceasta poate fi realizat, de exemplu, folosind multe din variantele algoritmului de nvare AdaBoost.n metoda propus de Viola i Jones, fiecare clasificator slab ar putea cel mult depinde de o singur caracteristic Haar. Este destul de interesant, stabilise n ea o soluie la o problem de nedescris: Viola i Jones au patentat algoritmul lor. Deci, n scopul de a folosi in mod comercial, va trebui s acorde licene de la autori, eventual, s plteasc o tax. Ca o modalitate de a extinde detector, Dr. Rainer Lienhart, implementatorul iniial a detectorului caracteristica OpenCV Haar, a propus adugarea a dou noi tipuri de funcii i transformarea fiecare nvator slab ntr-un arbore. Acest truc mai trziu, n afar de a ajuta la clasificarea, a fost, de asemenea, suficient pentru a iei din protecia brevetului de inventie din metoda original.Ei bine, aa c pn acum avem un sistem de clasificare care pot fi potenial rapid la respingerile fals pozitive. Cu toate acestea, amintii-v ca acest clasificator trebuie s funcioneze pe mai multe regiuni scalate ale imaginii, n scopul de a scana complet o scen. Diferenele de calcul la nivelul intensitii ar fi, de asemenea, destul de consumatoare de timp (imagina nsumeaza o zon dreptunghiular din nou i din nou, pentru fiecare caracteristic, i Recalculnd pentru fiecare re-scalare). Ce se poate face pentru a o face mai repede?

3.Reprezentarea integral a imaginii

Caching. Acest lucru este de multe ori o optimizare pe care o vom efectua n fiecare zi, atunci cnd codificam. Cum ar fi cache de ieire a unei variabile dintr-o bucl n loc de recalcularea ei de fiecare dat. Cred c cei mai multi sunt familiarizai cu ideea.

Ideea de a face detectarea Haar practic nu era diferit. n loc de a recalcula sume de dreptunghiuri pentru fiecare caracteristic la fiecare re-scalare, calculam toate sumele chiar de la nceput i s le salvam pentru calculele viitoare. Acest lucru poate fi realizat prin formarea unui tabel tip zon nsumate pentru rama datelor prelucrate, de asemenea, cunoscut sub numele de calculul in reprezentarea sa ca imagine integral.

Ideea este de a calcula toate zonele dreptunghiulare posibile n imagine. Din fericire, acest se poate face ntro singur trecere peste imaginea utiliznd o formul de recuren:

sau, spus mai simplu,

ntr-o imagine integral, zona pentru orice regiune dreptunghiular din imaginea poate fi calculat folosind doar 4 matrici accese. Imaginea de mai jos poate ajuta, sperm, la ce ilustreaz acest punct.

Matricele albastre reprezint imaginile originale, iar cele violet reprezint imaginile dup transformarea integral. Dac ar fi s calculm zona umbrit din prima imagine, ne-ar fi trebuit s rezumam toi pixeli individual, ajungnd se rspund de 20, dup aproximativ 6 intrari de memorie. Folosind imaginea integral, tot ce este necesar este un unic acces (dar acest lucru doar pentru c am fost n frontiera). In cazul in care nu sunt n grani, tot ar fi nevoie ar fi la maxim 4 matrici accese, independent de mrimea regiunii, reducnd efectiv complexitatea computaional de la O (n) O (1). Aceasta va necesita doar dou scderi i unul lng prelua suma zona haurat pe imaginea din dreapta, aa cum este descris din ecuaia de mai jos.

4.Codul surs

n cele din urm, codul surs! S ncepem prin a prezenta o diagrama de clase cu principalele clase pentru aceast aplicaie.

(7)mi pare ru dac aceasta este un pic cam greu de citit, dar am ncercat s-l pstrai la fel de dens pe cat e posibil, astfel nct s-ar putea potrivi mai mult sau mai puin sub 640px. Putei s-l click pentru o versiune mai mare, sau verifica versiunea cea mai noua de la site-ul cadru Accord.NET.Ei bine, aa c primele lucruri n primul rnd. Cutarea exhaustiv explicat mai nainte (n introducere), se ntmpl n HaarObjectDetector. Acesta este principala clasa de detectare a obiectelor. Constructorul ei accept un HaarClassifier ca parametru care va fi apoi utilizate n cadrul procedurii de detectare a obiectelor. Rolul HaarObjectDetector este doar pentru a scana imaginea, cu o fereastr de alunecare, relocarea i re-scalarea dac este necesar, apoi apelnd la HaarClassifier pentru a verifica dac exist sau nu exist o fa n regiunea curent.Clasificatorul, pe de alt parte, este complet specificat de un obiect HaarCascade i scara de operare curent. Am uitat s spun, dar fereastra nu are ntr-adevr nevoie s fie re-scalat n timpul de cutare. Caracteristicile Haar sunt scalate n schimb, care este mult mai eficient.Deci, continu. HaarCascade posed o serie de etape, care trebuie evaluate secvenial. De ndat ce o etap din cascada respinge fereastra, clasificatorul se oprete i se ntoarce fals. Acest lucru se vede cel mai bine prin verificarea de fapt, modul n care HaarClassifier trece prin cascada:/// /// Detects the presence of an object in a given window./// /// public bool Compute(IntegralImage2 image, Rectangle rectangle){ int x = rectangle.X; int y = rectangle.Y; int w = rectangle.Width; int h = rectangle.Height; double mean = image.GetSum(x, y, w, h) * invArea; double factor = image.GetSum2(x, y, w, h) * invArea - (mean * mean); factor = (factor >= 0) ? Math.Sqrt(factor) : 1;

// For each classification stage in the cascade foreach (HaarCascadeStage stage in cascade.Stages) { // Check if the stage has rejected the image if (stage.Classify(image, x, y, factor) == false) { return false; // The image has been rejected. } }

// If the object has gone all stages and has not // been rejected, the object has been detected. return true; // The image has been detected.}

i asta e tot. i acum vine metoda Clasificare a obiectului HaarCascadeStage. Amintii-v c fiecare etap conine o serie de arbori de decizie. Tot ce trebuie s facei este apoi s proceseze mai multe arbori de decizie, i verificai dac acesta este mai mare dect un prag decizie./// /// Classifies an image as having the searched object or not./// public bool Classify(IntegralImage2 image, int x, int y, double factor){ double value = 0;

// For each feature in the feature tree of the current stage, foreach (HaarFeatureNode[] tree in Trees) { int current = 0; do { // Get the feature node from the tree HaarFeatureNode node = tree[current];

// Evaluate the node's feature double sum = node.Feature.GetSum(image, x, y);

// And increase the value accumulator if (sum < node.Threshold * factor) { value += node.LeftValue; current = node.LeftNodeIndex; } else { value += node.RightValue; current = node.RightNodeIndex; } } while (current > 0); }

// After we have evaluated the output for the // current stage, we will check if the value // is still lesser than the stage threshold. if (value < this.Threshold) { // If it is, the stage has rejected the current // image and it doesn't contains our object. return false; } else { // The stage has accepted the current image return true; }}

Ei bine, dac nu am interpreta ceva foarte prost, acest ar trebui s fie reazultatul. Fiecare nod de decizie dintr-un arbore conine un singur element, i un singur element poate conine dou sau trei dreptunghiuri. Aceste caracteristici pot fi, de asemenea, nclinat, dar m voi opri de la a explica caracteristici nclinate, s-ar aduga doar complicaii i articolul necesita deja prea mult timp! Este mai bine s sari pe modul de utilizare a codului.5.Folosirea codului

Folosind codul este destul de simpla. Cadrul deja vine cu unele definiii HaarCascade implicite disponibile clase instantiable (nu este nevoie de *. Fiiere XML). Crearea unui detector se poate face ca acesta:// First we create a classifier cascadeHaarCascade cascade = new FaceHaarCascade();

// Then we feed this cascade into a detectorvar detector = new HaarObjectDetector(cascade, 30); Ca un nod secundar, ar putea fi interesant de observat c aceste definiii au fost create n mod automat din *. Fiierele de definiie XML OpenCV, folosind un generator de clas numit convenabil HaarCascadeWriter. Cu toate acestea, pentru a fi scris ceva, cu siguran, definiiile au n primul rnd s fie ncrcate n cadrul. Din acest motiv, cadrul poate deschide fiiere de definiie OpenCV folosind standard. NET de serie.Acum, c detectorul a fost creat, putem procesa o imagine solicitat:// Process frame to detect objectsRectangle[] objects = detector.ProcessFrame(picture); i apoi putem marca n cele din urm aceste dreptunghiuri n imaginea original cu ajutorul// Create a rectangles marker to draw some rectangles around the facesRectanglesMarker marker = new RectanglesMarker(objects, Color.Fuchsia);

// Applies the marker to the picturepictureBox1.Image = marker.Apply(picture); i Rezultatul poate fi vzut n formularul tipizat, disponibil pentru descrcare n sus a articolului. Sper c vi se pare interesant!

6. Puncte de interes

n primul rnd, permitei-mi s subliniez: poriuni de cod s-au bazat pe nelegerea algoritmic furnizate prin citirea implementarea excelent ActionScript prin Masakazu Ohtsuka pe proiectul lui Marilena. Ca atare, seciuni ale acesta proiect urmeaz aceeai licen BSD ca Marilena, fiind, de asemenea, dublu liceniat sub LGPL.Unele note despre aplicarea probei: cererea de proba este de prelucrare a unei imaginii de 600 x 597 de pe toate elementele sale. n anul 2008, notebook-ul Core 2 Duo, este nevoie de aproximativ 400ms pentru a detecta toate cele cinci chipuri din imagine folosind procesare paralel. De data aceasta scade la aproximativ 10 ms. Dac identificarea este restricionata pentru o singur fa, pornind de la dimensiuni mai mari de ferestre. Pe o aplicaie tipic, imaginea ar fi fost redimensionat la dimensiuni mult mai mici nainte de a rula un detector, realizarea ori mult mai rapid de detectare.i apropo, articolul a prezentat o descriere destul de simplist a metodei. De exemplu, caracteristicile Haar au o justificare pentru numele lor. Ele se bazeaz pe funciile de baz Haar wavelet utilizate, printre altele, prin PAPAGEORGIOU Oren e POGGIO, 1998. Mi-a rmas, de asemenea, Haar nclinat dispune afara discuiei, dar ele pot fi calculate prin calcularea unei imagini special integral nclinat nainte de a ncepe prelucrarea (versiunea cadru complet ofer suport complet pentru ei). Un alt lucru care a ieit din discuie este nvarea de astfel de clasificator. Cu toate acestea, nu a pune prea mult speran pe punerea n aplicare a unei versiuni demonstrabil pentru acest articol. A nva o cascad de clasificatori impulsionat ar putea dura sptmni.i, n sfrit, eu sunt contient ca detectarea cascad Haar poate, de asemenea, au fost discutate de mai multe ori, chiar i aici, n CodeProject. Alte articolede asemanatoare cu detectarea feei. Cu toate acestea, ceea ce este prezentat aici nu este un port, nici a unei nveli n jurul biblioteci native. Aceasta este a unei C # aplicare pur. i, n plus, folosind ceva deja fcut este doar jumtate din distracie.7.Concluziin acest articol, ne-am revizuit una dintre metodele cele mai de baz pentru detectare a feei. Aceast metod a fost o variant din populara metoda Viola & Jones bazat pe caracteristici Haar ca dreptunghiulare, aa cum este descris de Viola & Jones (2001) i n continuare prin aprimorated Lienhart. Codul prezentat aici este parte Cadrului Accord.NET, a unei cadru pentru construirea de aplicaii calcularea tiinifice n sprijinul. Jertf NET pentru masina de nvare i de viziune main de metode, cum ar fi cele elaborate de aici. Dac v simii curios, verificai pagina proiectului la http://accord.googlecode.com. i promit c nu va fi un zmbet dezamgit. (6)8. Bibliografie

(1)- http://ro.wikipedia.org/wiki/C_sharp(2)-Viola and Jones, "Rapid object detection using a boosted cascade of simple features", Computer Vision and Pattern Recognition, 2001(3)-Lienhart, R. and Maydt, J., "An extended set of Haar-like features for rapid object detection", ICIP02, pp. I: 900903, 2002(4)-Papageorgiou, Oren and Poggio, "A general framework for object detection", International Conference on Computer Vision, 1998.(5)-Masakazu Ohtsuka, "Project Marilena", SPARK project.Available from:http://www.libspark.org/wiki/mash/Marilena(6)- http://www.codeproject.com/Articles/441226/Haar-feature-Object-Detection-in-Csharp(7)- http://www.codeproject.com/KB/graphics/441226/class-diagram.png9. LicenAcest articol, mpreun cu orice cod surs asociat i fiiere, este liceniat sub Cod proiect Open License (CPOL)