Tehnici de detecție a comportamentului unei mulțimi de [618293]

1
Universitatea “Politehnica” din București
Facultatea de Electronică, Telecomunicații și Tehnologia Informației

Tehnici de detecție a comportamentului unei mulțimi de
perso ane

Proiect de diplom ă

prezentat ca cerin ță parțială pentru ob ținerea titlului d e

Inginer în domeniul Electronică și Telecomunicații

programul de studii de licen ță Electronică Aplicată (ETC – ELA)

Conduc ător științific, Absolvent: [anonimizat]. Bogdan Emanuel Anton Filip VOICU
IONESCU

Anul IV

2

3
Declara ție de onestitate academic ă

Prin prezenta declar că lucrarea cu titlul “ Tehnici de detecție a comportamentului unei
mulțimi de persoane ”, prezentată în cadrul Facultății de Electronică, Telecomunicații ș i
Tehnologia Informației a Universității “Politehnica” din București ca cerință parțială pentru
obținerea titlului de Inginer în domeniul Electronică, Telecomunicații și Tehnologia Informației ,
programul de studii Electronică Aplicată este scrisă de mine ș i nu a mai fost prezentată niciodată
la o facultate sau instituție de învățămînt superior din țară sau Străinătate.

Declar că toate sursele utilizate, inclusiv cele de pe Internet, sunt indicate în lucrare, ca
referințe bibliografice. Fragmentele de text din alte surse, reproduse exact, chiar și în traducere
proprie din altă limbă, sunt scrise între ghilimele și fac referință la sursă. Reformularea în
cuvinte proprii a textelor scrise de către alți autori face referință la sursă. Înțeleg că plagiatul
constituie infracțiune și se sancționează conform legilor în vigoare.

Declar că toate rezultatele simulărilor, experimentelor și măsurătorilor pe care le prezint
ca fiind făcute de mine, precum și metodele prin care au fost obținute, sunt reale și provin din
respectivele simulări, experimente și măsurători. Înțeleg că falsificarea datelor și rezultatelor
constituie fraudă și se sancționează conform regulamentelor în vigoare.

București, 25.06.2018
Absolvent: [anonimizat]

4

5
Cuprins

Lista figurilor
Lista acronimelor
Introducere ………………………….. ………………………….. ………………………….. ………………………….. …. 11
1 Teoria lucrării ………………………….. ………………………….. ………………………….. …………………… 13
1.1 Inteligență artificială ………………………….. ………………………….. ………………………….. …… 13
1.2 Rețele neuronale ………………………….. ………………………….. ………………………….. …………. 14
1.2.1 Rețele neuronale convoluționale ………………………….. ………………………….. …………. 15
1.3 Învățarea profundă (Deep Learning) și învățarea mecanică (Machine Learning) ……… 16
1.4 Algoritmul Viola Jones ………………………….. ………………………….. ………………………….. .. 18
1.5 Support Vector Machi ne ………………………….. ………………………….. ………………………….. 21
1.6 Detectorul de persoane cu ajutorul HOG (Histogram of Oriented Grdient). …………….. 24
2 Metode propuse ………………………….. ………………………….. ………………………….. ………………… 29
2.1 Detectorul bazat pe mișcarea obiectelor ………………………….. ………………………….. ……… 29
2.2 Viola Jones în detecția de persoane ………………………….. ………………………….. ……………. 31
2.3 Detectorul YOLO (,,You only look once’’) ………………………….. ………………………….. … 33
2.4 Metode de detecție bazate pe număratul oamenilor ………………………….. ………………….. 35
3 Modelul propus ………………………….. ………………………….. ………………………….. ………………… 37
3.1 Tool -urile folosite ………………………….. ………………………….. ………………………….. ……….. 37
3.2 Implementarea ………………………….. ………………………….. ………………………….. ……………. 37
3.3 Perspective de viitor ………………………….. ………………………….. ………………………….. ……. 39
4 Testarea algoritmului ………………………….. ………………………….. ………………………….. ………… 41
Concluzii ………………………….. ………………………….. ………………………….. ………………………….. ……. 43
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. … 45
Anexa 1 ………………………….. ………………………….. ………………………….. ………………………….. ……… 47
Anexa 2 ………………………….. ………………………….. ………………………….. ………………………….. ……… 49
Descriptorul ………………………….. ………………………….. ………………………….. …………………………. 49
Clasa Rectangle ………………………….. ………………………….. ………………………….. ……………………. 50
Fișierul principal ………………………….. ………………………….. ………………………….. ………………….. 54

6

7
Lista figurilor

Figura 1.4.1. Exemple trăsături Haar , pagina 1 9.
Figura 1.4.2. Corespondență trăsături Haar , pagina 1 9.
Figura 1.5.1. Reprezentarea în plan bidimensional a două clase, clasa cerc si respectiv clasa
pătrat , pagina 21.
Figura 1.5.2. Suprafețe posibile de separație între clasa cerc si clasa pătrat , pagina 21.
Figura 1.5.3. Exemplu de imposibilitate de separare liniară a claselor cerc si respectiv pătrat ,
pagina 22.
Figura 1.5.4. Impleme ntarea unor noi distanțe, care să ducă la crearea unor noi criterii de
separare a claselor cerc si respectiv pătrat , pagina 23.
Figura 1.5.5. Noua suprafață de separare a claselor pătrat și cerc , pagina 23.
Figura 1.6.1. Seturi de imagini din baza de date INRIA , pagina 2 5.
Figura 1.6.2. Detecția multiplă a aceluiași obiect , pagina 27.
Figura 2.1.1. Metoda ini țială rulată , pagina 30.
Figura 2.1.2. Simularea detecției în urma unor optimizări , pagina 31.
Figura 2.2.1. Rezultate oferite de detectorul de persoan e, pagina 32.
Figura 2.2.2. Puterea detectorului de fețe , pagina 33.
Figura 2.3.1. Procesul făcut de detectorul YOLO , pagina 3 4.
Figura 2.3.2. Detecțiile făcute de un detector YOLO , pagina 3 5.
Figura 3.2.1. Detecție nereușită, pagina 38.
Figura 4.1. Testar ea unui exemplu pe care s -a făcut o calibrare foarte eficientă a detectorului ,
pagina 41.
Figura 4.2. Detecția făcut ă pe mulțimi mai aglomerate, pagina 42.

8

9
Lista acronimelor

AI = Artificial Intelligence (i nteligență artificială )
DL = Deep Learning (învățare adâncă)
ML = Machine Learning (învățare mecanică)
HOG = Histogram of Oriented Gradient (histograma gradienților orientați)
SVM = Support Vector Machine ( vector de suport mașină)
VJ = Viola Jones
YOLO = You only look once
CV = Computer vision (v iziunea computerului)
OpenCV = Open Source Computer Vision Library (librărie cu licență liberă pentru CV)
LAN = Local Area Network (rețea locală)

10

11
Introducere

Lucrarea de fa ță are ca scop documentarea și realiz area unui sistem care poate procesa
imaginile provenite de pe camerele video de supraveghere, în vederea automatizării detecției de
persoane. Pe măsur ă ce tehnologia a avansat, tot mai multe sisteme de învățare autonome au fost
dezvoltate, perfecț ionate și au devenit din ce în ce mai uș or de implementat în diverse arii de
interes. Se observă o ascensiune tot mai puternică a inteligen ței artificiale în vaste domenii din
aria electronicii și nu numai.
Supravegherea video este un tip de CCTV (closed -circuit te levision), ce este utilizat în
vederea monitorizării unei anumite arii de observație. Aceasta poate fi folosit ă pentru a detecta
oameni, ma șini, diverse obiecte , etc. Un sistem de supraveghere const ă în camere de vedere,
monitoare și o re țea de comunicare între acestea. Adi țional, pot fi ad ăugate dispozitive de
înregistrare sau dispozitive de analiz ă a filmului, care sunt de obicei calculatoare ce au
implementat un sistem automatizat de detecție. Unele dintre scopurile supravegherii video sunt
scăderea infr acționalit ății (în locuri publice, b ănci, magazine, etc), monitorizarea traficului,
procese industriale (linii de asamblare) și monitorizarea zonelor de lucru.
În prezent majoritatea sistemelor de supraveghere video sunt digitale, însă inițial acestea
erau analoage, se bazau pe tehnologie analog CCTV, necesitau înregistrare video și reprezentau
simple camere c e trimiteau semnalul prin cablu l coaxial unor monitoare, furnizând o imagine de
slabă calitate, ce nu putea fi utilizată pentru alte scopuri în afar ă de simpla monitorizare. În
schimb, sistemele digitale se preteaz ă la procese mai fine de prelucrare a imaginii, deoarece se
bazeaz ă pe camere video digitale, care transmit semnalul prin LAN (local area network) unui
server, ceea ce înseamnă inclusiv că da tele pot fi accesate de la distan ță, în cazul conect ării
rețelei locale la Internet, lăsând la o parte opțiunile performante de a folosi un canal de
transmitere criptat sau de a le stoca în cloud (acest termen va fi dezvoltat în conținutul lucrării) .
Unele camere pot avea unitate central ă de procesare și memorie, astfel pot face preprocesare
video locală, ceea ce deschide drumul unor noi posibilități, inclusiv recunoașterea și/sau
monitorizarea obiectelor din cadru.
Pentru o mai bun ă postprocesare este ide al ca preprocesarea să elimine din imagine tot ce
nu prezintă interes. De aceea, este recomandată codificarea separată a fundalului și a prim –
planului, deoarece fundalul este constant și, în general, nu prezint ă interes. Standardele de codare
video H.264/F VC și H.265/HEVC pot fi folosite pentru codare și decodare, dar este necesar a se
lua în calcul faptul ca acestea sunt utilizate în aplica ții video generale, nefiind optimizate pentru
supraveghere. De asemenea, este importantă și comprimarea și stocarea da telor. Fundalul este
codat ca un flux video separat, fiind extras din secvență printr -un filtru și actualizat mai lent față
de prim -plan. Pentru reconstrucț ia video este necesar ă decodarea și combinarea fundalului și a
prim -planului.

12
Un domeniu în care re cent s -au implementat sisteme de detecție a persoanelor este cel
auto. Majoritatea produc ătorilor au incorporat multiple sisteme care să sprijine conduc ătorul î n
iminen ța unui eventual accident, inițial doar prin asistență la franare. Ulterior, sistemele a u
devenit extrem de perfomante, reușind nu doar să detecteze pietoni, alte mașini sau animale care
sar în fața ma șinii, ci și să franeze mașina în timp util, protejâ nd concomitent și conduc ătorul
auto, dar și pietonii, prin diverse moduri (de ex emplu ridicarea capotei în caz de accident).
Camerele video montate pe un autovehicul au fost antrenate să detecteze în timp real obstacole,
animale sau pietoni pentru a putea frâna mașina, iar cele performante pot detecta inclusiv
schimbările de direcție anormale, s pre exemplu în cazul scăderii distanței de siguranță între
autovehicul și parapet, situație în care mașina avertizează conducatorul auto iar în cazul în care
acesta nu reac ționeaz ă, se fr ânează de urgență. Acest lucru este posibil și prin “învățarea” stilu lui
de condus, senzorii din volan preluând informații despre ajustările direcției efectuate de
conducătorul auto și observând când acesta își pierde atenția, ceea ce este tradus ca stare de
somnolență de către ma șină, aceasta putând atenț iona șoferul să ia o pauz ă de la condus sau
poate frâna, în caz ca șoferul nu reacționează la avertismentele din bord. De asemenea, există
sisteme care pot observa semnele de circulaț ie și le pot raporta imediat șoferului. Toate aceste
sisteme sunt foarte bine puse la punct și sunt din ce în ce mai cerute pe piața producătorilor auto.
Automatizarea detecției de persoane are o aplicabilitate crescută, putând creș te
performan ța sistemelor de securitate, de siguranță, de monitorizare a activității, etc. În funcție de
necesitat e, sistemul poate fi axat pe simpla prezență uman ă, poate detecta o persoană anume sau
poate recunoaște anomaliile, spre exemplu un comportament diferit (cădere, alergare). Pentru
detectarea persoanelor este necesară crearea unei secvențe de imagini static e. Acestor imagini li
se va indepărta fundalul și se va extrage doar prim -planul. De asemenea, foarte utile sunt și
reducerea artefactelor de zgomot și compresie, ce pot scădea calitatea imaginii. Opțional, se pot
analiza sub -eșantioane ale imaginilor. Det ectarea umană se face pe baza detectării siluetelor și a
mișcării din imaginile precedente. Se identifică regiuni de interes (ROI), care, alături de
confirmarea detecției umane, duc la posibilitatea urmăririi persoanei în cadru. Pentru
monitorizarea activi tății umane este necesar ă clasificarea și încadrarea părților corpului uman în
categorii, ulterior acestea putând fi urmărite îndeaproape spre a da informații despre diverse
comportamente anormale. În cazul detecției unei mișcă ri nea șteptate în cadrul anal izei, se poate
seta declanșarea unei alarme.

13
1 Teoria lucrării

1.1 Inteligenț ă artificială

Inteligen ța artificial ă este un termen folosit în simularea inteligenței aplicată pe sisteme de
calcul. Aceste sisteme de calcul sunt programate să ,,gândească” precum o persoană și să
mimeze modul în care o persoană acționează. Cea mai importantă caracteristică a inteligen ței
artificiale const ă în abilitatea de a raț ionaliza și de a lua decizii cu șansele cele mai mari în
vederea atinger ii unui anumit obiectiv, c u toate că termenul de inteligență artificial ă se poate
eticheta și pentru sistemele de calcul ce prezintă trăsături asociate cu mintea umană, precum
învățatul sau rezolvarea problemelor.
Scopurile inteligenței artificiale cuprind învățarea, raționamentul și percep ția. Pe mă sură ce
tehnologia a avansat, precedentele referințe au devenit depășite. Spre exemplu, sistemele ce
calculează funcții elementare sau recunosc text prin metode cum ar fi recunoașterea caracterului
optim nu mai sunt luate în calcul drept sisteme ce folosesc inteligență artificial ă, din moment ce
aceste sarcini sunt preluate direct de orice computer modern.
Câteva exemple de sisteme ce folosesc inteligenț a artificial ă sunt mașinile de calcul
capabile să joace șah, care sunt pe piață de mul t timp deja, sau autovehiculele capabile să se
piloteze singure, un progres înregistrat în ultimii ani. Toate aceste sisteme trebuie să ia în
considerare efectele produse de acțiunile lor, deoarece orice astfel de acțiune va avea un rezultat.
La inteligenț a artificial ă folosită pentru un joc de șah, rezultatul final este câștigarea partidei. În
cazul autovehiculelor cu propulsie autonomă, sistemul trebuie să ia în calcul toate datele
provenite de la mediul î nconjur ător și să le proceseze astfel încât să pre vină orice eventuală
coliziune.
Încă de la început, inteligenț a artificial ă s-a aflat sub cercetarea oamenilor de știință și
deopotrivă a publicului ce beneficiază de avantajele oferite. O teorie foarte dezbă tută este aceea
că roboții vor deveni atât de bi ne dezvoltați încât oamenii nu vor mai putea ține pasul. Un alt
impediment produs de inteligenț a artificial ă ar putea proveni din situația în care mașinile de
calcul ar putea pă trunde în intimitatea oamenilor sau ar putea deveni chiar amenințătoare,
asemăn ător multor scenarii de filmele ș i cărțile science fiction.
Autovehiculele ce se pot pilota singure sunt un subiect de controversă, deoarece acestea
sunt concepute pentru a asigura cele mai mici riscuri de impact și cele mai puț ine daune
colaterale. În tim p ce sunt înlăturate erorile umane, acest lucru duce la situații ipotetice în care
autovehiculul va trebui să ia o decizie între coliziunea cu o persoană și coliziunea cu o altă
persoană. În acest caz, sistemul va calcula opțiunea care va cauza cel mai mic impact, dar totuși
va fi obligat să aleagă. Multe voci spun că viețile lor nu ar trebui puse la indemâna unei
mașinării.

14

1.2 Rețele neuronale

Rețelele neuronale sunt seturi de algoritmi , modelați să funcționeze într -un mod
asemănător creierului uman, cu apl icabilitate în recunoașterea modelelor matematice. Ele
interpretează datele într -o formă asemănătoare percepției umane și anume folosind tehnologii
care simulează felul în care un om percepe lucrurile din jurul său. Aceste informații sunt mai
apoi etichet ate sau clasificate după criterii obiective, ce vizează obținerea unui rezultat.
Modelele recunoscute de că tre re țelele neuronale sunt de tip numeric, stocate în vectori, ce
procesează orice tip de informație, fie imagini, sunet sau text. Toate aceste mod ele pot fi traduse
în limbaj matematic și clasificate în funcție de un set de trăsături care sunt urmă rite.
Clasificarea
Toate problemele legate de acurateț ea clasific ării depind de setul de date pe care î l au în
spate. Factorul uman se face responsabil de a transfera percepția s a către setul de date în vederea
facilitării procesului de învăț are a re țelei. În funcție de eticheta pe care o au componentele din
seturile de date, se crează o corela ție între aceste componente (etichete, date). Acest proces este
cunoscut sub denumirea de ,,învățare supervizată’’. Un exemplu de clasificare, util î n elaborarea
detec ției de persoane, este identificarea obiectelor dintr -o imagine. În prezent există sisteme de
învățare autonome, ce pot face deosebirea dintre obiectele aflate într -un cadru. Acesta este
rezultatul unei antrenări complexe, cu baze de date foarte mari ș i diversificate în funcție de tipul
detecției ce se dorește efectuată. Spre exemplu, anumite detectoare pot observa simultan obiecte
precum semne de circulaț ie, vehicule, marcaje și pietoni, pentru a putea integra toate aceste
obiecte într -un ansamblu de monitorizare a traficului într -o intersecție. Acesta ar fi un caz
specific în care utilizarea unui sistem este dedicată unei anumite sarcini.
Gruparea
O altă strategie de învățare este cea nesupervizată, care se bazează doar pe informațiile
provenite din setul de date de intrare și nu are cunoștințe î n leg ătură cu valorile corespondente de
la ieșirea rețelei.
Ideea de grupare constă în punerea împreună a unor similarităț i. În natur ă obiectele nu
pot fi întotdeauna etichetate și, de aceea, un algoritm va funcționa cu atât mai eficient î n detec ția
obiectelor, cu cât a fost antrenat mai mult și cu seturi de valori mai variate, reușind astfel să
discearn ă între trăsăturile implementate pentru fiecare model. Așadar, învățarea nesupervizată
este capabilă să producă modele foarte precise, cu mare aplicabilitate în detectarea persoanelor
sau a obiectelor, motiv pentru care devin extrem de importante în lucrarea de față.
Structura
Structura unei reț ele neuronale const ă într -un set de vectori de intrare, care vor reprezenta
trăsăturile pe care dorim să le clasific ăm. Aceste trăsături, amplificate sau reduse în funcție de
vectorul de ponderi specific fiecărui strat a scuns de neuroni (care mai este numit și strat de

15
învățare), sunt trecute secvențial prin procesul de învățare. Cu cât numărul straturilor de învățare
este mai mare, cu atât complexitatea algoritmilor creș te considerabil. În cazul sistemelor de
învățare su pervizată, valorile ponderilor din straturile de învățare se vor reajusta după fiecare
încărcare a unui set de date din mulțimea vectorilor de intrare, dacă rezultatele obținute în urma
procesării lor nu vor fi cele așteptate și precizate în etichetele lot ului de învățare.
Antrenarea
Când se defineș te o re țea neuronală, ponderile neuronilor din stratul ascuns sunt
inițializate aleator, motiv pentru care rezultatele vor fi slabe. În procesul de antrenare a rețe lelor
neuronale se porne ște cu performanțe slab e și se ajunge la rezultate cu acuratețe mare. Funcția de
activare corespondentă fiecărui neuron din straturile ascunse se dorește a fi cea pentru care sunt
cât mai puține pierderi de informație prin rețeaua neuronală. Dacă performanțele rezultate în
urma reajustării ponderilor nu sunt încadrate ca fiind peste un anumit prag stabilit inițial, atunci
se poate apela la înlocuirea funcției de activare și la o nouă antrenare. Așadar, antrenarea
rețelelor neuronale are ca scop minimizarea informației pierdute, n umită și funcție de pierdere.
Minimizarea acestei funcții de pierdere reprezintă cea mai ușor de implementat modalitate de a
face optimizări.
1.2.1 Rețele neuronale convoluționale

Aplicabilitate
Cu toate că aria lor de utilizare este cel mai adesea în analiza imaginilor, ele pot fi
utilizate și în analiza datelor sau probleme de clasificare. Cel mai adesea ne referim la o rețea
neuronală convolu țional ă ca la o rețea neuronală clasic ă, ce are un grad de specializare în
alegerea sau detecția modelelor și implemen tarea lor. Straturile ascunse ale unei reț ele neuronale
convolu ționale se mai numesc și straturi convoluț ionale.
Eficien ța rețelelor neuronale convoluționale se reflectă în numărul mare de aplicații pe
care acestea le deservesc în domeniu inteligenței artificiale. Utilizarea lor se face în domenii
precum autovehicule autonome, robotică, drone sau diagnostic medical.
Un aspect important de men ționat este că rețelele neuronale convoluționale nu percep
imaginile așa cum le percep oamenii. Așadar va fi nev oie de o perspectivă diferită a modului în
care imaginile sunt servite spre antrenare și procesare unei reț ele convolu ționale. O imagine este
gandită ca un volum și nu ca un spațiu bidimensional, definit de lățime și lungime. Volumul are
semnificația unui spațiu tridimensional, în acelaș i mod în care imaginile digitale color au o
codare de tip roșu -verde -albastru, mixând aceste trei culori pentru a produce un spectru vizibil
oamenilor. Rețelele neuronale convoluționale privesc imaginile ca pe trei straturi de culori,
suprapuse unul peste celălalt.

Cum funcționează

16
Așadar, o re țea neuronală convolu țional ă prime ște o imagine color reprezentată sub
forma unui paralelipiped dreptunghic, având la bază o lățime și o lungime, care sunt măsurate
prin numărul de pi xeli de -a lungul acestor dimensiuni ș i o ad âncime de trei straturi
convoluț ionale, c âte unul pentru fiecare din culorile roș u, verde și albastru.
Pentru fiecare pixel dintr -o imagine, intensitatea culorilor roș u, verde și albastru este
exprimată printr -un număr care va fi un element într -unul din cele 3 straturi suprapuse peste
matricea bidimensională inițială și vor forma împreună volumul imaginii.

1.3 Învățarea profundă (Deep Learning) și învățarea mecanică (Machine
Learning)

Deep Learning este o func ționalitate a inteligenței artificiale prin care se dorește imitarea
modului în care acționează creierul uman pentru procesarea datelor și crearea unor modele prin
care să se poată lua o decizie. Învățarea adâncă este un subset al machine learning (învățare
mecanică, va fi dezvoltat și acest capitol în cele ce urmează), care are rețele nesupervizate
capabile să învețe din seturi de date etichetate corespunzător.
Deep Learning a evoluat în paralel cu era digitală, unde dimensiunea datelor a crescut
semnificativ în toate domeniile. A apărut conceptul de Big Data, date mari în traducere liberă, un
concept ce se referă la volumul de date structurate sau nestructurate și la viteza la care acestea
sunt create și colectate. Aceste date mari sunt aduse din surse precum rețele de socializare,
motoare de că utare online, platforme de comer ț electronic sau platforme de seriale și filme
online. Aceste cantități uriașe de date sunt accesibile și pot fi distribuite prin intermediul
aplicațiilor de tip cloud (servicii în domeni ul distribuirii tehnologiei informației, în care resursele
sunt regăsite cu ajutorul internetului prin unelte sau aplicații web, spre deosebire de crearea unei
conexiuni directe prin intermediul unui server). Avantaj ul folosirii cloud este că datele
utiliz atorilor pot fi păstrate într -o bază de date la distan ță, în loc să fie ținute pe un hard disk
fizic.
Cât timp un dispozitiv electronic beneficiază de conexiune la internet, acesta are acces la
datele sale în orice loc s -ar afla, o caracteristică ce oferă un nivel mare de flexibilitate. Cloud se
traduce prin nor, denumit astfel destul de sugestiv, pentru că ai mereu acces la datele tale,
indiferent de dispozitivul de pe care le cauți sau de locul în care te afli.
Volumul datelor ce nu pot fi structurate es te unul uriaș, care ar lua un timp de ordinul
zecilor de ani unei persoane să îl poată înț elege și mai apoi descifra pentru extragerea
informațiilor relevante. Marile companii realizează poten țialul foarte mare pe care l -ar avea
deslușirea acestor cantităț i de informații și de aceea aderă la adoptarea unor sisteme automatizate
ce folosesc inteligenț a artificial ă.

17
Una din cele mai frecvente tehnici pentru procesarea datelor mari cu ajutorul inteligenței
artificiale este machine learning (învățarea mecanic ă), despre care se vor spune mai multe î n
paragra fele ce urmează. Principiul folosit este acela că un algoritm ce se poate auto adapta
devine din ce în ce mai performant î n analiza și detec ția modelelor cu cât sunt experimentate mai
multe date noi. De exempl u, dacă o companie din domeniul plăților dorește să detecteze existența
sau posibilitatea unei fraude, poate utiliza unelte de învățare mecanică în acest scop. Algoritmul
de calcul dezvoltat într -un model automatizat va procesa toate tranzacțiile ce au loc pe o
platformă digitală, va gă si trăsături în seturile de date și va sesiza orice neregulă detectat ă de
modelul folosit.
Deep learning, un subset al machine learning, folosește o ierarhizare a rețelelor neuronale
artificiale prin care se face procesul de machine learning. Rețelele neuronale sunt construite după
modelul creierului uman, avâ nd neuroni interconecta ți similar unei pâ nze de p ăianjen.
Programele tradiționale construiesc analiza datelor în mod liniar, spre deosebire de sistemele
deep learning, ca re folosesc o abordare neliniară . Compa rând modul liniar de clasificare a
trăsăturilor cu un model neliniar, putem face câteva observații pe exemplul de mai sus al
detecției unei fraude financiare. Modelul liniar ar putea depista, să zicem, numărul de tran zacții
efectuate, în timp ce tehnica deep learning ar putea depista mult mai mulți parametri, precum
locația de unde se efectuează o tranzac ție, adresa IP de pe care se realizează o tranzac ție, numele
persoanelor implicate și multe alte informații care pot fi folosite pentru a depista o eventuală
neregulă. Primul strat al rețelei neuronale procesează datele de intrare, precum numărul de
tranzacții și le trimite mai departe către al doilea strat ascuns după ce datele au fost procesate. Al
doilea strat va pri mi informațiile prelucrate de primul nivel ș i le va procesa la r ândul său,
adăugând funcționalitate î n plus, s ă zicem informații legate de locația de unde se efectuează
tranzac țiile. Următorul strat ascuns va primi la intrare datele procesate și de cel de -al doilea strat
și îi va adă uga o nou ă caracteristică, precum adresa IP de pe care se face o tranzacție. Procesul
acesta continuă pâ na când se vor extrage suficiente informații pentru a se putea lua o decizie î n
legătură cu integritatea unei tranzacții.
Folosind sistemul de detecție a unei fraude prezentat mai sus cu machine learning, se poate
crea un exemplu pentru modelul de deep learning. Dacă sistemele ce folosesc machine learning
crează un model cu parametri construiți în jurul sumelor de bani pe care un utilizator le primește
sau le trimite, metoda cu deep learning poate începe să construiască peste rezultatele pe care le
oferă machine learning.
Fiecare strat din arhitectura rețelei neuronale se bazează pe datele oferite de stratul
precedent, peste ca re se adaugă noi funcț ionalit ăți, proces care ar lua ani de zile unei persoane.
Algoritmii de deep learning sunt antrenați nu doar pentru crearea unor trăsături provenite din
tranzacții, ci și pentru a descoperi când un model semnalează nevoia pentru inves tigarea unei
eventuale situații de fraudă. Stratul final al rețelei poate transmite un semnal către persoana care
analizează desfășurarea tranzacțiilor și se poate astfel suspenda tranzacția î n desf ășurare p ână în
momentul în care se fac toate investigații le referitoare la securitatea acesteia.

18
Deep learning este folosit în multe domenii pentru un număr diferit de sarcini. Aplicațiile
comercializate pentru recunoașterea facială, platformele de reclame online sau studiile medicale
ce se ocupă de administrar ea de substanț e interzise în scopul tratării afecțiunilor sunt doar câteva
dintre ariile unde se extinde întrebuințarea metodelor de învăț are ad âncă.
Machine learning este conceptul prin care un program executat de o mașină de calcul poate
învăța și se poa te adapta noi lor obiective, fără a mai fi nevoie de factorul uman pentru aceasta.
Algoritmii din categoria machine learning permit programelor software să devină mai precise în
predicția rezultatelor. Premiza din spatele acestui concept este dezvoltarea de algoritmi care pot
primi seturi de date de intrare și pot utiliz a analiza statistică pentru a prezice un rezultat, în timp
ce noi date se actualizează.
Procesele implicate în machine learning sunt asemănătoare cu cele din minatul datelor sau
analiza predi ctivă a modelelor. Ele necesită căutarea printre date pentru a descoperi modele ș i a
face ajust ări în acest sens. Aproape orice persoană este familiarizată cu machine learning din
cumpărăturile făcute online, după care apar mereu noi reclame pentru produse le căutate. Acest
lucru se întâmplă deoarece recomandările se folosesc de machine learning pentru a personaliza
reclamele online, aproape în timp real. Pe lângă particularizarea pieței, alte întrebuințări
frecvente ale algoritmilor de machine learning incl ud filtre de spam, securitatea rețelei și
detectarea posibilelor înșelătorii sau preferințe în rețelele de socializare.
Algoritmii de machine learning pot fi etichetați ca supervizați și nesupervizați.
• Algoritmii supervizați necesită un specialist în tehn ici de machine learning care să
asigure atât setul de date de intrare , cât și rezultatele dorite pentru aceste date, pentru a
putea oferi un feedback .
• Algoritmii nesupervizați nu necesită să fie antrenați cu un set de rezultate dorite. În
schimb, ei folose sc procedeul iterativ numit deep learning .

1.4 Algoritmul Viola Jones

În anul 2001, Paul Viola și Michael Jones au implementat prima versiune a unui detector
de obiecte capabil să ofere rezultate în timp real. Acest lucru se datorează în mare mă sură și
proceselor tehnologice mai avansate, ce au facut posibile utilizarea echipamentelor de calcul
mult mai performante decât cele pe care s -a încercat pana în acel moment detecția umană [2].
Aplicabilitatea algoritmului este posibilă în multe clase de obiecte, însă principal a
utilizare pentru care a fost dezvoltat o reprezintă detectarea fețelor.
Câteva dintre avantajele algoritmului de detecț ie a fe țelor Viola Jones ar fi rata foarte
buna de detecție și timpii de execuție mici. Acest algoritm se deosebește de alte modalități de
detecție umană prin trei contribuții cheie: prima diferență este reprezentarea imaginii sub formă
“Integral Image”, ce permite computarea mult mai rapidă a informațiilor. A doua îmbunătățire
este un algoritm de învățare, bazat pe AdaBoos t, care nu numai că are randament crescut, ci

19
poate chiar selecta un num ăr mic de caracteristici vizuale critice dintr -un set mai general, astfel
crescând suplimenta r eficiența algoritmului. De asemenea, Viola Jones folosește o metodă de
combinare a clasif icatorilor în “cascad ă”, care permite îndep ărtarea fundalului, odată cu alocarea
resurselor pentru analizarea regiunilor din imagine ce prezintă interes crescut. Acest mecanism
“în cascad ă” poate fi văzut ca o focalizare specific ă pe obiect, ceea ce, spre deosebire de abordări
anterioare, scade statistic șansele ca regiuni le de interes din imagine să fie îndep ărtate odată cu
fundalul.
Procesul de antrenare este cel consumator de timp, dar odat ă implementat, algoritmul
funcționeaz ă eficient. În domeniul det ectării feței are randamente comparabile cu sistemele
anterioare cele mai performante. Ar mai fi de men ționat că algoritmul este folosit doar pentru
detecț ia fețelor, nu pentru recunoașterea acestora, însa faptul că poate oferi rezultate rapide în
timp rea l îi ofer ă valoare adă ugată. Fără să necesite informa ții auxiliare, cum ar fi cadre multiple
din secvențe video sau compararea pixelilor pentru determinarea culorii pielii, ce sunt utilizate
pentru a crește randamentul altor detectoare faciale, detectorul poate rula la 15 cadre pe secund ă.
Informațiile suplimentare pot fi integrate din surse alternative în sistem, pentru a crește numarul
de cadre rulate.
Prima îmbunătățire adusă de acest algoritm este o nou ă metod ă de reprezentare a
imaginii, numit ă “Integr al Image”. Prin această reprezentare se pot evalua foarte rapid trăsăturile
faciale. Sistemul de detecție nu lucreaz ă direct cu intensitatea imaginilor, motivația din spate
datorându -se în parte [1], însa, asemăn ător acestor autori, este folosit un set de trăsături ce duce
cu gândul la figurile Haar.

Fig. 1.4.1. Exemple trăsături Haar [2] Fig. 1.4.2. Corespondență trăsături Haar [2]

A doua contribuție reprezintă o metodă de construcție a unui clasificator bazată pe
selectarea unui n umăr mic de trăsături folosind AdaBoost. În cadrul oricărei părți dintr -o
imagine, numărul de trăsături Haar este foarte mare, mult crescut față de numărul de pixeli. De
aceea, pentru a asigu ra o clasificare rapid ă, procesul de antrenare trebuie să exludă marea
majoritate a trăsăturilor prezente. Astfel, se va concentra pe un set redus de trăsături critice.

20
Selecția trăsăturilor se efectuează printr -o modificare a procedurii AdaBoost: fiecare clasificator
slab este constrâns astfel încât să depindă doar de o singură trăsătură. Așadar, fiecare stadiu de
accelerare în care este selectat câte un clasificator ineficient poate fi privit ca un proces de
selectare a trăsăturilor. Utilizarea AdaBoost furnizeaza un algoritm eficient de învățare și putere
mare de gene ralizare.
A treia mare contribuție adus ă de Viola Jones este metod ă de combinare succesiv ă a
clasificatorilor complecși în cascadă, care, prin focalizarea atenției pe regiunile importante ale
imaginii, crește suplimentar viteza detecției. Ideea abordării acesteia este dată de posibilitatea
crescută de a determina rapid unde anume într -o imagine va putea apărea un obiect.
Așadar imaginea este trecută prin mai multe procedee de parcurgere la nivelul pixelilor,
pentru a putea fi identificate trăsăturile spe cifice unei fețe și nu poate prezice după o singură
parcurgere locurile unde s -ar putea detecta o față, pentru a le evalua mai apoi doar pe acestea.
Astfel, procesele mai complexe sunt rezervate doar pentru aceste regiuni promițătoare.
Măsurarea eficienței abordării acesteia se face prin rata de fals negativ din cadrul procesului de
învățare: trebuie ca toate sau aproape toate obiectele căutate să fie selectate pentru ca algoritmul
să fie funcțional.
Deși feț ele umane se disting prin multe caracteristici, totuși acestea au în comun unele
propriet ăți, cum ar fi:
– regiunea ochilor este mai întunecată dec ât regiunea pomeților .
– zona nasului este mai luminată decât ochii.
Pe baza acestor similarități faciale, se pot identifica arii de detecție pentru zona oc hilor, a
gurii sau a nasului, cu ajutorul calculelor de gradient a intensității pixelilor, metodă ce este
folosit ă pentru determinarea tr ăsăturilor digitale Haar. Trăsăturile Haar constau în drepunghiuri
adiacente, ce sunt situate în regiuni specifice ale ferestrei de detecție.
Pentru o persoană, procesul de detecț ie a fe țelor este foarte facil, dar o mașină de calcul
are nevoie de instrucțiuni foarte clare. Funcționalitatea algoritmului Viola Jones se aplică eficient
în cazul în care fețele ce se doresc a fi detectate sunt văz ute în întregime și din perspectivă
frontal ă. Aceasta constr ângere ar putea diminua performanțele detecției, deoarece, în imaginile
de pe camerele de vedere, persoanele sunt surprinse în multe ipostaze și destul de rar se va
întampla ca toate persoanele dintr -un cadru să fie poziționate cu faț a la camer ă. Acest aspect face
ca tehnica de detecție a comportamentelor oamenilor dintr -o mulțime să nu aibă o eficien ță bună
dacă are la baza un detector de feț e. În practica însă, aceste limit ări pot deveni acceptabile, dacă
se aplic ă și un set de calibrări suficient de riguros.

21
1.5 Support Vector Machine

Un vector support mașină(SVM) este un clasificator formal, definit de un hiperplan
separator. Cu alte cuvinte, având dat un set de date expe rimentale, algoritmul va avea ca output
un hiperplan optim care va clasifica noi exemple. Într-un spa țiu bidimensional, acest hiperplan se
reprezintă printr -o dreapt ă care separă planul în două par ți unde se vor regăsi două clase complet
independente una d e cealaltă.
Să presupunem c ă avem un grafic pe care sunt reprezentate două clase, reprezentate ca în
figura 1.5.1. Este nevoie să se identifice o suprafa ță care să creeze o separare în două planuri
specifice fiecăreia dintre clase.

Figura 1.5.1. Reprez entarea în plan bidimensional a două clase, clasa cerc și respectiv clasa
pătrat
Mai multe posibilități de a face această separa re sunt exemplificate în figura 1.5.2. Tot ce
se regăsește în figura 1.5.2 la stânga suprafețelor de separație va fi coresponden t clasei cerc, în
timp ce tot ce se află la dreapta suprafețelor de separație va fi încadrat la clasa pătrat.

Figura 1.5.2. Suprafețe posibile de separație între clasa cerc si clasa pătrat

22
Separarea claselor este ce face un SVM. Va găsi o linie sau un hiperplan într -un spațiu
multidimensional, care delimitează clasele. Deși până acum am discutat pe un exemplu cu două
clase liniar separabile direct, în practică se lucrează cu exemple mult mai laborioase.
Să presupunem un scenariu precum cel din Figura 1.5.3. În mod evident, nu este nicio
linie care să separe cele două clase în plan bidimensional. Este nevoie de o transformare care să
adauge o nouă dimensiune. Portând exemplul din figura 1.5.3 într-un sistem de axe
tridimensional, vom putea prelucra noi calcule și aproximări in vederea unor noi ecuații care să
ofere o soluție în privința suprafețelor de separație dintre cele două clase.

Figura 1.5.3. Exemplu de imposibilitate de separare liniară a claselor cerc si respectiv pătrat.
O nouă clasificare poate fi făcută calculând distanța de la un punct situat pe noua axă, la
poziția elementelor din cele două clase. Această variant ă este exemplificată grafic în figura 1.5.4,
unde se plasează arbitrar un punct P pe axa Z și se calculează distanțe le de la pu nct la
componentele claselor. Astfel se va putea dezvolta o clasificare nouă, prin care să fie delimitate
cele două clase.

23

Figura 1.5.4. Implementarea unor noi distanțe, care să ducă la crearea unor noi criterii de
separare a claselor cerc si respectiv pătrat.
Toate aceste distanțe calculate vor oferi posibilitatea obținerii unui clasificator având
modelul celui din figura 1.5.5.

Figura 1.5.5. Noua suprafață de separare a claselor pătrat și cerc.
Aceste transformări sunt cunoscute sub denumirea de nu clee. Facilitatea lucrului cu
SVM -uri constă în faptul că nu este nevoie ca utilizatorul să găsească transformarea pentru
fiecare set de date folosit pentru antrenare. Librăria sklearn oferă implicit implementarea
vectorilor suport mașină.

24
În exemplele d in figura 1.5.2 si respectiv figura 1.5.5 am observat mai multe posibilități
în alegerea suprafețelor de separație dintre cele două clase. Aici intervin criteriile de performanță
ale algoritmilor de clasificare. Găsirea perfectă a claselor din care fac par te elementele din lotul
de antrenare durează foarte mult, în special pentru loturi foarte largi.
Pentru a face procesul de separație cât mai eficient, se definesc termenii de nucleu,
regularizare și gamma. Acești parametri au rolul de a regla clasificato rul SVM. Variind valorile
parametrilor se pot crea suprafe țe neliniare de separație cu o acuratețe bună și într -un timp bun.
Nucleul
• joacă un rol important în operațiile de transformare a problemei folosind operații de
algebră liniară.
Regularizarea
• este parametrul care îi comunică vectorului suport mașină care este gradul de evitare a
erorii de clasificare. Cu alte cuvinte, care este marja de toleranță pe care vectorul suport
mașină trebuie s ă o respete în momentul în care ia decizii în privința suprafeț ei de
separație între clase.
Gamma
• este parametrul care definește influența unui singur exemplu de antrenare. Pentru valori
mici ale lui gamma, se caută puncte situate la depărtarea hiperplanului, în timp ce pentru
valori mari ale lui gamma, se caută punc te din imediata vecinătate a hiperplanului.
1.6 Detectorul de persoane cu ajutorul HOG (Histogram of Oriented Grdient ).

Detectorul de persoane ce folosește HOG a fost prezentat pentru prima dată de catre Dalal
și Triggs, la conferin ța CVPR din 2005 [3].
Una dintre cele mai utilizate și eficiente metode pentru detectarea persoanelor este cea
care folose ște HOG împreuna cu SVM. HOG este un clasificator de trăsături, având scopul de a
generaliza obiectele în așa fel încât același obiect (sau, în cazul de față, o persoană) să producă
pe cât de mult același set de trăsături în momentul în care este urmărit dintr -o altă perspectiv ă.
Acest concept are la bază un SVM care este antrenat să poată recunoaște trăsături HOG
ale persoanelor. Detectorul de persoane HOG folo sește un set global de tr ăsături pentru a putea
identifica o persoană. Astfel se pot grupa seturile de particularități ce fac reconstrucția unei
persoane cu ajutorul unui vector de caracteristici. Acest lucru este pus în balanță cu un eventual
algoritm ce ar avea la bază mai mulți vectori de caracteristici care să se ocupe de reprezentarea
pe bucăț i a părților unei persoane.
Dectectorul de persoane HOG folosește o fereastră ce gliseaz ă pe toată suprafața unei
imagini. Această fereastră, numită și fereastră de detec ție, este procesat ă de clasificatorul HOG.
Ulterior, clasificatorul apeleaza SVM -ul antrenat pentru a cataloga dacă respectiva fereastră

25
conține sau nu în ea o persoană. Deoarece este importantă scala la care se realizează această
detec ție și pentr u ca un astfel de detector să poată avea suc ces în recunoașterea de persoane și în
implementarea video, fiecare imagine este eșantionată pe mai multe dimensiuni. Fiecare astfel de
eșantion este la r ândul său procesat de către SVM, pentru a face detecția ma i performantă. Aici
însă se vor produce întârzieri semnificative, desigur în funcție de numărul de eșantioane în care
va fi reinterpretată imaginea.
Clasificatorul de persoane HOG are la bază o fereastră de detec ție cu dimensiunea de 64
de pixeli lățime ș i 128 de pixeli lungime. Astfel de imagini din lotul de antrenare sunt
reprezentate în figura 1.6.1, preluată din baza de date ,,Inria’’ [4].

Figura 1.6.1. Seturi de imagini din baza de date INRIA [4]
Presupunând că se folosesc celule a câte 8×8 pixeli pe post de fereastră de detec ție, într -o
asemenea celulă se calculează un vector de gradient la nivelul fiecă rui pixel. În urma computării
celulelor vor rezulta 64 de vectori de gradient, ce vor fi depuși într -o histogramă cu nouă capsule.
Histograma ia v alori cuprinse între 0 și 180 de grade, a șadar vor fi câte 20 de grade
corespondente pentru fiecare capsulă . Contribu ția fiecărui vector de gradient î n histogram ă este
dată de magnitudinea vectorului. Această contribu ție se î mparte între cele mai apropiate două
capsule. În funcț ie de împărțirea vectorilor pe histogramă, cele mai apropiate două capsule între

26
care va fi împărțită contribu ția se vor afla la valorile centrate, exprimate în grade, a căror
diferen ță în valoare absolută este egală cu valoarea vect orului curent.
Prin plasarea gradienților într -o histogramă, se face o optimizare importantă și anume
cuantizarea. În cazul propus mai sus, se va restrânge complexitatea algoritmului de la 64 de
vectori de gradient, fiecare avâ nd un num ăr de două celule r eprezentative, la un vector cu nouă
valori ale magnitudinilor fiecărei celule. Această cuantizare este echivalentul unei compresii, ce
va adăuga o viteză mai mare de procesare a clasificatorului HOG.
Următoarea etap ă necesa ră procesării unei clasifică ri este de a normaliza histograma
calculat ă mai sus. Prin acest proces de normalizare a vectorilor de gradient, aceștia pot deveni
invarianți în raport cu eventuale multiplicări ale valorilor pixelilor. Efectele multiplicărilor
pixelilor pot duce la o luminozi tate mai mare a pixelilor care sunt deschiși la culoare și la o
scădere în luminozitate a pixelilor întunecați. Prin normalizare se urmărește diminuarea
influențelor multiplicării valorii pixelilor, așadar o mai bună clasificare.
Normalizarea la nivel de bloc este un procedeu suplimentar de optimizare, ce constă în
gruparea celulelor în blocuri și normalizarea lor în raport cu toate histogramele din blocul
respectiv.
Antrenarea unui detector de obiecte folosind HOG ar presupune un număr destul de mare
de pași. În primul rând, trebuie ales un numă r de e șantioane pozitive (care să fie scopul detecției)
pentru care se vor extrage descriptorii HOG. După aceea, se alege un alt numă r de e șantioane, de
data aceasta negative (ce nu conțin nicio informaț ie similar ă cu lotul pozitiv) și se extrag din nou
descriptori HOG. În practică este important ca numărul de eșantioane pozitive să fie considerabil
mai mic decât numărul eșantioanelor negative.
După aceș ti primi pa și, se va antrena un vector suport mașină pe eșanti oanele de mai sus.
Apoi, pentru orice imagine din loturile de antrenare și pentru orice rescalare a acestora se va
aplica tehnica ferestrei glisante. Pentru fiecare fereastră de acest gen, se vor procesa descriptorii
HOG și se va folosi clasificatorul. Dac ă informația dintr -o fereastră va fi clasificată î n mod gre șit
drept un obiect, lucru ce se va întâmpla la un moment dat, se va reține vectorul de caracteristici
împreună cu o etichetă ce va semnala eroarea făcută. La fel se intâmplă și în cazul detecției
corecte a unui obiect din interiorul ferestrei, doar că de această dată eticheta pusă vectorului de
clasificare va fi una corectă. În urma acestui proces, se iau toate eșantioanele găsite, se sortează
după un criteriu stabilit și se reintroduc în procesul de antrenare.
În momentul în care acuratețea detectorului pentru care se face antrenarea se încadrează
peste un anumit prag stabilit ini țial, detectorul se consideră ca fiind suficient de bine antrenat
pentru a putea fi supus unor noi teste, cu date din a fara seturilor de antrenare.
Aceștia au fost pașii minimi pe care un utilizator trebuie să îi urmeze pentru procesul de
antrenare. Una din problemele care pot surveni unui astfel de mecanism este apariția mai multor
detecții asupra aceluiași obiect. Un e xemplu în acest sens este ilustrat î n figura 1.6.2, unde un
algoritm de detec ție a fe ței a detectat de trei ori același lucru.

27

Figura 1.6.2. Detec ția multiplă a aceluiași obiect

28

29
2 Metode propuse

2.1 Detectorul bazat pe mișcarea obiectelor

Exemplul propus este un detector implementat deja în biblioteca de exemple din toolbox -ul
computer vision din cadrul Matlab [5].
Acest exemplu are la bază două părți:
– detectarea obiectelor ce se deplasează în fiecare cadru .
– asocierea detecției corespunzătoare aceluiași obiect, constantă în timp.
Detec ția obiectelor ce se mișcă are în spate un algoritm de substragere a fundalului, bazat pe
o combina ție de modele Gaussiene.
În urma extragerii fundalului, în cadru vor rămâne în cazul cel mai favorabil doar obiectele.
După ce sunt detectate aceste obiecte, asupra acestora sunt aplicate operații morfologice,
deoarece este necesară eliminarea zgomotului.
La final, se va face o analiză pe rezultatele prelucrărilor de mai sus, pentru a detecta pixeli i
grupați care ar putea reprezenta obiecte.
Principiul prin care se dorește urmărirea aceluiași obiect pe toată durata în care acesta apare
în cadru este bazat doar pe mișcare. Deplasările ce survin pe durata înregistrării au fost estimate
cu ajutor ul unui filtru Kalman, folosit pentru a prezice locația obiectului detectat în urma
suprapunerii cadrelor. Așadar, un aspect important al acestui algoritm a fost buna funcționare a
urmăririi obiectelor ce încep să se deplaseze. În orice cadru, unele detecț ii ar putea începe
urmărirea pentru obiecte ce ulterior se va observa că nu sunt în mișcare, în timp ce alte obiecte ce
vor începe tardiv să se deplaseze nu vor fi urmărite de la bun început. Aspectul acesta este
important de menționat, mai ales pentru cazurile în care un obiect apare rapid în filmare și
detectorul nu are un timp de reacție suficient de bun pentru a îl putea percepe în timp util.
Urmăririle se execută secvențial, pe masură ce se derulează cadrele.
Obiectele aflate în mișcare vor fi numerota te în cadrul acestui algoritm, o modalitate
foarte bună și pentru utilizator de a putea aproxima randamentul sistemului. În momentul în care
un obiect iese din cadru, numărul cu care a fost înregistrat inițial va rămâne nealocat. Este o
foarte bună modalit ate de a număra de exemplu câte persoane tranzitează un anumit loc într-un
interval orar. Un astfel de sistem ar putea fi de mare ajutor și în zona comercial ă, unde numărul
oamenilor ce trec aleator prin fața unui magazin reprezintă o foarte bună sursă de a atrage noi
clienți pentru o locație. Întrebuințările pe care le-ar putea avea aplicarea acestui algoritm sunt
foarte importante, securitatea fiind un alt domeniu unde s-ar putea implementa.
Pornind de la acest exemplu, am încercat să aduc cât mai multe optimizări în reglarea
parametrilor de detecție. Am făcut procesul de urmărire mai rapid, prin calibrarea detecției și
anume ignorarea obiectelor ce din start nu au dimensiunea potrivită. Astfel s-au lansat mai puține

30
procese de urmărire. Am modificat detec torul de obiecte preantrenat din toolboxul Computer
Vision cu un detector de persoane preantrenat, în scopul optimizării algoritmului către targetul
lucrării și anume detectarea comportamentelor unei mulțimi de persoane. Apoi am schimbat
toată sintaxa cu ajutorul meniului help din cadru l Matlab, pentru a scăpa de toate erorile de
compilare și în final să compar rezultatele obținute pe această variantă cu cele inițiale, oferite de
varianta deja implementată.
În figura 2.1.1 se poate observa unul din exemplel e pe care a fost rulată metoda inițială.

Figura 2.1.1. Metoda inițială rulată
Metoda nefiind optimizată pentru detecț ia explicit ă a persoanelor, este foarte imprecisă,
mai ales în cazul densităților mari de persoane. Informațiile din planuri secunde nu sunt
clasific ate deloc de către algoritm, aspect observat și din lipsa cadranelor ce prezic o eventuală
apariț ie în cadru a unei persoane. Evident, acest algoritm suferă la mai multe capitole, dar a fost
un început bun atât pentru familiarizarea în Comput er Vision , cât și pentru experiența în
dezvoltarea de cod.
Versiunea modificată a avut un efect vizibil mai bun, detecția fiind mai precisă și timpii
de execuție sesizabil mai mici. În figura 2.1.2 este ilustrat ă simularea detecției implementate de
mine, pornind de la modelul anterior. Este de precizat și faptul că exemplul ilustrat este cel care a
funcționat cel mai bine, din toate eșantioanele cu care a fost testat modelul. Avantajul acestui
algoritm a constat în recunoașterea eficientă de la distan ță a particularit ăților unei persoane, care
în cazul anterior era foarte vagă.

31

Figura 2.1.2. Simularea detecției în urma unor optimizări
Această implementare este însă una rudimentară și cu toate că au fost făcute optimizări
destul de semnificative, modelul elaborat nu este o soluție care să poată face față supravegherii
grupurilor mai mari de persoane. Exemplul ideal în care detectorul acesta oferă un randament
satisf ăcător este unul cu persoane aflate în prim planul imaginilor și la o distan ță vizibilă una de
cealaltă.
2.2 Viola Jones în detec ția de perso ane

O alt ă abordare prin care se poate face detecția de persoane este cu ajutorul algoritmul
Viola Jones de detecț ie a fe țelor. Acest lucru presupune ca monitorizarea video să se facă dintr -o
perspectivă la niv elul fețelor. Potențialul unui astfel de sistem se restrânge din start așadar unor
scenarii destul de rare. O aplicație ce s -ar putea dezvolta din această metod ă ar fi monitorizarea
persoanelor ce intră pe rând într -o încăpere. Nu doar că se pot detecta uș or aceste persoane, dar
în urma procesului de detecț ie a fe ței unui individ, chenarul ce reține poziț ia facial ă poate fi chiar
decupat și importat într -o bază de date. Odată adus acolo, este posibilă implementarea unui
sistem care să recunoască persoanele detectate pe baza unei fotografii, chiar din actul de
identitate. Însă cum acesta nu face obiectul lucrării de față , este de men ționat că metoda detec ției
de persoane folosind detecț ia de fe țe nu va avea un randament bun în cazul în care imaginile vor
fi luate de pe camere de filmat montate sub sau deasupra fluxului de persoane.
Am testat modul în care lucrează detectoarele de persoane din Computer Vision, pentru a
avea o idee de ansamblu asupra limitărilor acestora. În figura 2.2.1 este un exemplu de detec ție
care funcționează bine, fiind favorizată ș i de condi țiile de luminozitate foarte bune [6].

32

Figura 2.2.1. Rezultate oferite de detectorul de persoane
Problema unui astfel de algoritm în detectarea și urmărirea persoanelor este c ă pentru
fiecare ca dru examinat, algoritmul nu va încerca să prezică următoarea poziț ie a fe țelor detectate.
Când se va trece la următorul cadru, algoritmul va căuta din nou toate feț ele de la cap ăt. Timpul
necesar procesării înregistrărilor performante de minimum 30 de cadr e/secundă va fi în mod cert
unul foarte mare și va face detec ția persoanelor în timp real imposibilă. Totuși, am început să
concep un astfel de model, pentru a observa rezultate experimentale și a construi o privire de
ansamblu asupra mai multor aspecte ce țin de detectarea și urmărirea unei persoane dintr -o
mulțime.
Rezultatele înregistrate însă au fost cu adevărat slabe. Parcurgând cadru cu cadru un
videoclip de 10 secunde în compresie mp4, timpul necesar unei simulări complete a fost de
aproximativ 2 m inute. Rezultatele detecției au fost slabe, deoarece exemplele folosite nu au fost
cele pentru care un astfel de detector funcț ionează în parametri optimi .
Totuși, în multe situații, detecția fețelor este o modalitate foarte utilă și practică pentru a
putea urmări o persoană. Este nevoie ca un astfel de sistem să fie dedicat și foarte bine calibrat
pentru ceea ce urmează să proceseze. În figura 2.2.2. este ilustrat un exemplu în care puterea de
detecție a algoritmului utilizat este foarte mare și totodată , poziționarea camerei este una propice
unui detector de persoane. Alte abordări de detecție ar fi fost mult mai ineficiente în identificarea
persoanelor din cadru. Pentru lucrarea de față însă, scenariile urmărite sunt cele surprinse de
camerele de luat v ederi obișnuite, montate pentru supraveghere și în care detecția fie posibilă și
pentru situațiile în care nu se poate vedea fața unei persoane în imagini.

33

Figura 2.2.2. Puterea detectorului de fețe.

2.3 Detectorul YOLO (,,You only look once’’)

Detectorul YOLO este diferit de alte mijloace de detecție a obiectelor prin faptul că
folosește o singură rețea neuronală convolu țional ă, atât pentru clasificare, cât și pentru
localizarea ariilor dreptunghiulare de detecție a obiectelor [7]. Acest lucru duce la o m ai bună
optimizare a algoritmului de detecție, în comparatie cu o abordare de tipul HOG, unde se alege o
fereastră de detec ție, care va fi glisată pe toată suprafața unei imagini în vederea recunoașterii
unor modele. Este un procedeu lent prin faptul că necesită aplicarea unui clasificator de un
număr mare de ori.
Abordarea YOLO este eficientă prin faptul că mai întâi încearcă să prezică î n ce p ărți ale
imaginii se găsesc zone de interes ș i ulterior s ă ruleze clasificatorul direct pe acele zone. Această
optimizare duce la un număr mai mic de aplicări ale clasificatorului propriu -zis în spațiul unei
imagini.
În figura de mai jos este explicat procesul prin care detectorul YOLO studiat acționează.
Imaginile sunt mai întâi redimensionate la 448*448 pixeli, du pă care se trece imaginea printr -o
rețea neuronală convolu țional ă, pentru ca mai apoi să se aplice un prag de detecție care decide
dacă î n imagine se reg ăsesc sau nu obiectele cu care s -a făcut antrenarea, exemplificare î n figura
2.3.1 [7].

34

Figura 2.3.1. Procesul făcut de detectorul YOLO [7]
Procesul este unul simplu și anume o singură rețea neuronală convolu țional ă prezice
simultan mai multe cadrane dreptunghiulare ș i probabilit ăți legate de clasele în care s -ar putea
regăsi obiectele din aceste cedran e. Antrenarea rețelei se face pe imagini întregi și optimizează în
mod direct performanțele detecției.
YOLO împarte imaginea într -un câmp de 13×13 celule. Fiecare dintre aceste celule poate
prezice câte cinci încadrări în cadrane dreptunghiulare. Se retur nează un scor de încredere, care
indică nivelul de certitudine ca un astfel de cadran să conțină un obiect. Scorul nu spune nimic
despre tipul obiectului conținut, ci doar că forma din interiorul cadranului este suficient de bună
spre a fi supusă detectoru lui, care va lua ulterior o decizie.
Un astfel de clasificator reprezintă o metod ă de detec ție extrem de riguroasă. Antrenarea
pentru un astfel de model trebuie executa pe seturi de date foarte mari, pentru a oferi o
diferențiere foarte bine stabilită în tre tipurile de obiecte pe care se va face detecț ia. În articolul
menț ionat [7], algoritmul de clasificare dezvoltat este capabil să detecteze obiecte precum
biciclete, bă rci, ma șini, pisici, c âini sau persoane.
Utilitatea unui astfel de model se extinde în foarte multe arii și implementarea unui astfel
de sistem ar reprezenta o metodă de supraveghere foarte performantă. Desigur, pentru a putea
folosi un astfel de detector, este nevoie de o putere de calcul foarte mare și cu siguranță nu va
putea fi implem entat în viitorul apropiat pentru dispozitivele de tip smartphone, deoarece timpii
de execuție necesari nu ar fi îndeajuns de buni pentru a suporta YOLO în timp real.
Un exemplu al modului în care acționează detectorul YOLO este ilustrat în figura 2.3.2.

35

Figura 2.3.2. Detecțiile făcute de un detector YOLO.

2.4 Metode de detecție bazate pe număratul oamenilor

Multe tehnici de supraveghere video ce au implementate sisteme de detecție a persoanelor
și num ărarea acestora au fost dezvoltate ș i ofer ă performanțe foarte bune în timp real. Tehnicile
de clasificare pot fi aplicate, spre exemplu, pentru a se decide dacă într -o imagine se află sau nu
o persoană. Un astfel de clasificator foarte folosit este vectorul suport mașină (SVM) [8]. Alt ă
modalitate de a face c lasificarea se bazează pe arbori de clasificare, folosiți pentru a reprezenta
posibile forme ale oamenilor [9].
O alternativ ă în modelarea formelor unei persoane este folosirea unor detectoare mai mici,
fiecare dintre acestea fiind antrenate pentru a recu noaște doar anumite părți ale corpului uman ș i
combin area rezultatelor. Ideea învățarii acestor forme cu ajutorul AdaBoost și un set de
clasificatori slabi este prezentată î n [10]. Un procedeu de învățare folosit este combinarea
seturilor de clasificatori slabi cu detectoare de pă rti corporale, ce ulterior vor fi reunite cu
ajutorul unui model probabilistic al unei persoane.
Toate aceste abordări necesită un set de date de antrenare foarte larg, pentru a face posibilă
învățarea parametrilor care stau la baz a modelului. Cu toate că metodele de clasificare
menționate mai sus sunt bine puse la punct și nu prezintă riscu l de a se bloca, ele nu sunt
potrivite pentru a segmenta un grup de persoane în indivizi.

36
O metod ă de a face numărătoare a de persoane într -un birou, de exemplu, este montarea
unor uși rotative, ce permit doar accesul rând pe rând spre încăpere. Totuși, eforturile financiare
foarte mari pe care le -ar implica o astfel de soluție nu sunt pe deplin justificate. Analiza video
este însă o solu ție mult mai uș or de implementat , atât din punct de vedere logistic, cât ș i material.
Simpl a segmentare a grupurilor de persoane nu este însă suficient ă pentru o numărătoare
eficientă a persoanelor ce intră sau ies dintr -un cadru. Pentru a putea avea o abordare efi cientă,
este necesar ă urmărirea individuală a tuturor persoanelor surprinse de camera video pe care se
face procesul. O variantă de detector ce este capabil să numere persoanele folosind mai multe
unghiuri de supraveghere este menț ionat ă în articolul [11].
Algoritmul de segmentare a persoanelor aflate într -un grup procesează toate zonele dintr –
o imagine în care există o posibilitate mare să se pozitioneze mai mulți oameni. Rezultatul
segmentării dintr -un cadru va conține informații referitoare la numărul d e persoane detectate,
precum și coordonatele poziției lor.
Factorul ce duce la o imprecizie din partea acestui principiu este zgomotul ce afectează
procesul de extragere a trăsăturilor. O altă problem ă este reprezentată de zonele de ambiguitate,
în care este greu de făcut o clasificare perfectă. O optimizare în acest sens poate fi adusă de un
filtru Kalman.
În orice regiune de interes, modulul de segmentare va separa mulțimile de persoane în
indivizi. Desigur, acuratețea unui numărător de persoane depind e de modul în care se face
asocierea datelor necesare pentru procesul de urmă rire.
Un astfel de sistem a fost testat pentru a monitoriza persoanele ce intră în sediul unei
companii. O singură camer ă de filmat este montată la aproape 5 metri înălțime față de trotuar.
Pentru a acoperi cât mai multe din scenariile posibile, dezvoltatorii sistemului i -au rugat pe
oamenii ce intrau să încerce să meargă în mai multe moduri diferite. Rezultatele în cazul unei
singure persoane au fost foarte bune. Printre cazuril e nefavorabile, unde sistemul nu acționează
eficient, sunt grupurile de trei -cinci persoane ce merg împreună sau cazul a două grupuri de
persoane ce se deplasează î n direc ții opuse una față de cealaltă. Sistemul are avantajul că permite
și o estimare a dis tanței dintre obiecte și astfel cre ează o imagine de ansamblu foarte bună asupra
geometriei din capturile video.
În concluzie, sistemul acesta de supraveghere are rezultate foarte bune și reprezintă o
abordare eficientă în domeniul tehnicilor de analiză v ideo, fiind capabil nu doar să umărească, ci
și să numere persoanele aflate în aria vizuală a unei camere video.

37
3 Modelul propus

În urma documentației premergătoare implement ării unui sistem capabil să recunoască și să
urmărească persoane, am decis s ă merg pe varianta unui algoritm ce are la bază un clasificator de
tip vector suport mașină (SVM) și histograma de gradient (HOG). Motivul pentru care această
abordare mi s -a părut cea mai plauzibilă a fost suportul pe care l -am gă sit și, totodată , rezulta tele
bune pe care le oferă.
Pentru implementarea algoritmului de detecție a persoanelor, am pornit de la algoritmii deja
implementați în OpenCV (Open Source Computer Vision Library). După cum îi spune și
numele, OpenCV este o librărie specializată în soft ware pentru inteligență artificial ă, pus ă la
dispoziția oricărui utilizator ce are nevoie să se folosească de varietatea de aplicații în care se
poate extinde aceasta.
Detec ția de fe țe, perso ane sau obiecte î n OpenCV necesit ă mult timp pentru reglarea
parametrilor și, chiar și așa, nu există nicio garanție că exact același set de parametri va funcționa
la fel de bine de la o imagine la alta.
Tot codul a fost implementat pornind de la zero. În urma mai multor încercări de dezvoltare
a unor sisteme precum ce le prezentate la capitolul cu metode propuse, direcția pe care am dorit
să merg a fost clară de la bun început. Pentru sintaxa codului în Python, cu care nu am mai lucrat
până în momentul în care am dezvoltat acest cod, am folosit de mai multe ori meniul h elp, unde
cu ajutorul căruia am ajuns mereu la un rezultat.
3.1 Tool -urile folosite

• Python este un limbaj de programare de nivel î nalt, orie ntat pe obiecte, cu paradigmă
dinamic ă, implementat pentru programarea de uz general. Structurile de date de nivel
înalt preimplementate, î n combina ție cu sistem dinamic de codare ș i garbage collector
automatic îl fac să fie foarte bun în dezvoltarea aplicațiilor de Computer Vision .
• Open CV, menționat la începutul capitolului
• NumPy, o parte a colec țiilor de librării SciPy , este o libră rie științifică folosită pentru
Python. A fost folosită pentru crearea unor vectori N -dimensionali și a unor funcții de
algebră liniară care sunt folosite de descriptorul HOG spre a manipula și a executa
algoritmul de detecție pentru toate ca drele în timp real. De asemenea, este de ajutor în
procesul de urmă rire individual ă a obiectelor aflate în mișcare.
3.2 Implementarea

Descriptorul HOG a fost antrenat cu ajutorul bazei de date INRIA Person Dataset [4].
Această bază de date este compusă din im agini cu dimensiunea de 64×128 pixeli, având
etichetele corespunzătoare ce marchează pozițiile oamenilor care stau în picioare, drepți. Acest
set de date limitează într -o oarecare măsură funcționalitatea descriptorului în momentul în care

38
filmarea se face de pe camere orientate în unghiuri extreme ( de mai mult de 90 de grade în jos),
dar pentru camerele poziționate pe străzi este în general suficient.
Datorit ă complexit ății ș i varia ției rezoluțiilor camerelor video, precum și a poziț ionării
acestora, mai m ulte optimizări au fost necesare în urma calculelor HOG pentru eliminarea
detecțiilor de tip fals -pozitiv (detecții greșite care au fost etichetate ca fiind corecte) și a
dublurilor.
Din alegerea lotului de imagini, apar probleme la identificarea persoane lor din înregistrări
făcute la rezoluții foarte joase. În figura 3.2.1, este prezentată rularea unui exemplu foarte
simplu, o persoană ce se deplasează direct prin fața camerei, ce nu poate fi identificată de către
detector.

Figura 3.2.1. Detecție nereuș ită.
Detecția din figura 3.2.1 nu a reușit datorită dimensiunii videoclipului pe care a fost
executată. Dimensiunea unui cadru este de 320 de pixeli lățime și 240 de pixeli înălțime. Pentru
astfel de situații, detectorul nu își va putea face treaba, decât poate după un număr foarte mare de
prelucrări succesive ale listei sale de parametri.
Totuși, exemplul din figura 3.2.1 a fost folosit doar pentru a sugera una din posibilile
limitări pe care le are sistemul dezvoltat. În momentul de față toate obiective le de monitorizare
au o calitate a imaginii de minim 640 de pixeli lățime și 360 de pixeli înălțime. Cu astfel de
înregistrări a fost testat algoritmul de detecție și tocmai din motive de a putea fi direct utilizat în
lumea reală, pe condițiile impuse apar atura de actualitate.
Pentru dubluri, cea mai întâlnită problemă a fost că detectorul HOG face detecția unei
perso ane de două ori, în condi țiile în care o arie de detecție e ste cuprinsă în interiorul alteia.
Aceste erori au fost remediate cu ușurință prin:
• verificarea ariilor de detecție existente înainte de a adăuga una nouă .

39
• înlăturarea acestora în cazul în care deja se află o arie de detecție în zona
respectivă .
Erorile cauzate de detec țiile de tip fals -pozitiv au reprezentat însă o problem ă ceva mai
dificil de rezolvat.
• Mai întâi a fost adăugată o durată minimă de cadre pentru urmărirea oricărei
persoane înainte de a fi afișată .
• Majoritatea fals -pozitive lor erau urmărite pentru două sau trei momente .
• Prin adăugarea un ei condiții ca obiectul să fie detec tat după minimum cinci
momente în care a fost observat, aceste erori au fost în mare parte remediate .
În acest punct, mai multe optimizări sunt posibile. Una dintre acestea ar fi aplicarea unor
algoritmi performanți de detectare a fețelor, care să fie apli cați în mod selectiv noilor obiecte
pentru care pragul de detecție este foarte apropiat de valoarea minimă. Aceasta ar fi o
îmbunătățire care ar reduce numărul detecțiilor de tip fals -pozitiv, dar din cauza lotului de
antrenare compus din imagini standard focusate pe feț e orientate c ătre camerele de filmat,
această încercare nu a fost una foarte eficientă, din cauza obiectelor vestimentare purtate de
oameni (precum pălării, șepci sau eșarfe).
O alt ă posibilitate de optimizare ar fi ca mai întâi să se efectu eze un algoritm de detecție a
prim planului î n video înregistrare. În acest scop, este nevoie de un cadru gol sau ca primul cadru
surprins să aibă rolul de bază și de un algoritm de detectare a contururilor care să se execute
cadru cu cadru pentru a sesiza schimbările de contur pe versiunile rescalate ale imaginilor. În
teorie, această procedură ar permite executarea algoritmului HOG pe ariile conturate, reducând
astfel semnificativ timpii de execuție per cadru și probabil ar permite unor alț i algoritmi s ă
imbunătățească calitatea detecției. Totuși, acest aspect este problematic din cauza calității slabe a
camerelor de luat vederi folosite în zonele publice. Pe lângă problemele legate de rezoluția
acestora, cele mai multe camere folosesc algoritmi de compres ie video, care vor lăsa zgomot pe
imagini.

3.3 Perspective de viitor

Implementarea prezentată mai sus a oferit procentaje foarte ridicate în momentul în care
detectorul a fost bine calibrat din punct de vedere al rezoluție camerei de filmat ce a oferit
imag inile. Limitările sunt date de algoritmul de deteție bazat pe HOG în sine. Desigur, o
posibilitate de viitor ar fi una a combinării detectorului de persoane cu alte mijloace de detecție
specializate cu identificarea unor alte obiecte. Acest algoritm pus în combinație cu un altul ar
putea produce rezultate foarte bune și ar putea să dobândească o parte de funcționalitate în plus.
Un alt mod de dezvoltare pe direcția aceasta ar putea fi un detector de comportamente
specifice ale unor persoane din cadrul unei mulțimi. Spre exemplu, s -ar putea detecta persoanele
dintr -o înregistrare ce fac ceva diferit de restul celorlalți, cum ar fi persoanele care aleargă, sau

40
cele care se deplasează lent. Procesul de urmărire este deja realizat și pe baza sa, pot fi făcute
mai multe modificări ce ar putea să transforme simpla detecție de persoane în detecția unor
persoane care ies din contextul înregistrării.
Implementarea algoritmului lasă loc pentru mai multe posibile interpretări. Ce este
important de menționat, este că î n urma detecțiilor de persoane, vor fi reprezentate grafic și
direcțiile pe care acestea avansează , până la momentul când fie vor dispărea din cadru, fie nu vor
mai fi poziționate în zone care să permită detec ția.

Figura 4.3.1. Poziție detectată parțial.
În figura 4.3.1 se observă că sistemul face o detecție, însă aceasta nu este foarte precisă.
Persoana este detectată, dar aria de detecție nu este integral descoperită. În legătură cu modul în
care o persoană este urmărită, se poate observa în figura 4.3. 1, în aria de detecție, o linie curbă,
de culoarea chenarului. Această linie reprezintă coordonatele centrilor ariilor de detecție, încă din
momentul în care s -a făcut prima detecție.
Cu ajutorul punctelor cu care sunt detectați centrii ariilor de detecți e, se pot face mai multe
prelucrări pentru a stabili noi premize și moduri de folosire a acestui detector. În funcție de
traiectoria pe care o descriu aceste puncte, pot fi definite mai multe modalități în care acest
sistem de detecție să acționeze.

41
4 Testarea algoritmului

Metoda implementat ă a fost testată cu eșantioane de videoclipuri preluate din baz e de date
open source și de pe platforme video online. Pe baza fiecărui eșantion se vor face prelucrări
individuale, cu ajutorul reglării parametrilor de scriptorului HOG din OpenCV. Dimensiunea unui
cadru al videourilor este de 640 pixeli lățime înmulțit cu 360 pixeli înălț ime. Parte a de cod a
algoritmilor implementați va fi descrisă mai îndeaproape î n con ținutul anexei 2.

Figura 4.1. Testarea unui exemp lu pe care s -a făcut o calibrare foarte eficientă a detectorului.
În figura 4.1 este ilustrat ă modalitatea în care este efectuată detec ția. O clas ă din cadrul
programului va genera o fereastră în care va fi încadrată o persoană dintr -o mulțime de persoane .
Îi este urmărit comportamentul acestei persoane până cand aceasta va ieși din cadru ș i detec ția se
va finaliza.
Pentru a elimina din eventualele detecții ce nu ar fi corecte, se face o verificare a
numărului de cadre în care o persoană a fost detectată de către sistem. Pentru a fi marcate
ferestrele de detecție este necesar ca numărul de cadre în care a fost detectată o persoană să fie
mai mare ca o anumită valoare de prag, stabilită î n general în funcție de rezoluția și de numărul
de cadre pe secundă a le unei înregistrări.

42
În momentul în care o persoană iese din aria de detecție sau, printr -o întâmplare, nu mai
poate fi detectată corect, acest lucru va fi sesizat printr -o variabilă locală ce memoreaz ă numărul
de detecții al fiecărei ferestre de acest tip. În momentul în care această valoare scade sub un
anumit prag, elimină chenarul și eticheta cu numărul persoanei ce fusese detectată. Pentru fiecare
nouă detec ție, num ărul instanțelor clasei dreptunghi reprezintă chiar ordinea în care au fost
detectate acestea. Este o modalitate foarte bună de a men ține eviden ța și de a face un calcul rapid
în privința procentajului de detecții corecte făcut de această implementare.
La o foarte bună calibrare, num ărul persoanelor detectate de către algoritm coincide cu
numărul total de persoane pe care le poate observa și ochiul uman. Procentajul de 100% este
atins chiar în filmarea din care a fost surpinsă imaginea din figura 4.1.
Un alt exemplu în care detecțiile făcute sunt foarte bune este cel prezentat în figura 4.2.

Figura 4.2. Detecția făcut ă pe mulțimi mai aglomerate

În figura 4.2, fluxul de persoane este ceva mai mare și se formează mai multe grupuri de
persoane. Dimensiunea unui cadru din înregistrarea pe care s -a făcut captura de mai sus este de
640 de pix el lățime și 360 de pixeli înălțime. Rulând cu parametri setați pentru exemplul
anterior, dar modificând doar numărul de rescalări pe care le va face detectorul, s -au obținut
rezultate foarte bune, în timp real. Acest lucru demonstrează ca puterea sistemul ui este destul de
mare și că pot fi procesate multe tipuri de distribuții ale persoanele într -un cadru.

43
Concluzii

Sistemul de detecție și urmărire a persoanelor dintr -o mulțime este unul perfect funcțional,
capabil să ofere o rezultate optime în timp rea l și să aducă îmbunătățiri importante unor modele
standard. Mai multe detalii privind blocurile de cod utilizate pentru a face detecția menționată
mai sus vor fi prezentate în Anexa 2. În comparație cu alte modele ce folosesc principii de
detecție mai avan sate sau rețele antrenate pe seturi de date mai largi, programul elaborat în
prezenta lucrare are o mică problema în a fi portat pe camere de filmat cu specificații diferite.
Este necesară calibrarea detectorului de trăsături pe alte tipuri de setări, în f uncție de numărul de
cadre pe secundă pe care le înregistrează o cameră de supraveghere, sau de rezoluția la care se
filmează.
Cu toate acestea, în momentul în care s -au facut ajustările necesare, algoritmul funcționează
foarte eficient și oferă un randame nt foarte bun . Performanța sa mai este afectată și de numărul
persoanelor detectate. Cu cât sunt depistați mai mulți oameni, cu atât este nevoie de mai multe
marcaje de detecție și de monitorizarea acestora.
În urma procesului de documentare, am putut de scoperi foarte multe informații în
legătură cu progresele foarte importante ce s -au făcut în ultimul timp în zona inteligenței
artificiale. Varietatea modrilor în care inteligența artificială oferă un sprijin real în viața de zi cu
zi demonstrează ca în mo mentul de față nimic nu mai poate fi considerat de nerealizat în acest
domeniu. O mulțime de sisteme care ne înconjoară au incorporat tehinci de învățare și
perfecționare, pentru a avea un impact cu adevărat notabil.
Domeniul detecție i de persoane a înre gistrat progrese foarte mari, în prezent foarte multe
sisteme de acest gen sunt deja implementate în diverse puncte de interes. Pe lângă simpla
detecție, există sisteme capabile să efectueze și cercetări în timp real asupra identității
persoanelor care sun t detectate. Astfel de sisteme sunt implementate în domenii de securitate
națională, unde precizia și viteza sunt detalii esențiale. Cercetările în domeniu se desfășoară în
permanență și mereu sunt noi abordări sau implementări ce aduc un plus de eficiență metodelor
actuale.
În eventualitatea continuării studiilor mele în acest domeniu, pot spune că am fost atras
de tema pe care am abordat -o, prin care am avut prima tangență cu tehnicile de învățare
automată. Am putut să înțeleg și să descopăr evoluția și impactul pe care îl au sistemele de
detecție în viața de zi cu zi și despre perspectivele de dezvoltare ale acestora.

44

45
Bibliografie

[1] C. Papageorgiou, M. Oren, and T. Poggio. A general framework for object detection ,
International Conference on Computer Vision, 1998.
[2] Viola, Jones. Rapid object detection using a boosted cascade of simple feature , Accepted
Conference on Computer Vision and Pattern Recognition
[3] Histograms of Oriented Gradients for Human Detection N. Dalal and B. Triggs CVPR 2005
[4] http://pascal.inrialpes.fr/data/human/ , accesat ultima dată pe 29.06.2018
[5] https://uk.mathworks.com/help/vision/examples/motion -based -multiple -object -tracking.html ,
accesat ultima dată pe 29.06.2018
[6] https://u k.mathworks.com/help/vision/ref/vision.cascadeobjectdetector -system -object.html ,
accesat ultima dată pe 29.06.2018
[7] You Only Look Once: Unified, Real -Time Object Detection, Joseph Redmon University of
Washington, Santosh Divvala Allen Institute for Art ificial Intelligence
[8] C. Nakajima, M. Pontil, B. Heisele, and T. Poggio. People recognition in image sequences by
supervised learning. In MIT AI Memo, 2000.
[9] D. Gavrila. Pedestrian detection from a moving vehicle. In Proc. 6th European Conf.
Computer Vision, Dublin, Ireland, volume 2, pages 37 –49, 2000
[10] C. Schmid K. Mikolajczyk and A. Zisserman. Human detection based on a probabilistic
assembly of robust part detectors. In Proc. 8th European Conf. Computer Vision, Prague, Czech
Republic, volume 1, pages 69 –82, 2004.
[11] Danny B. Yang, Hector H. Gonz ´ alez -Ba ´ nos, and Leonidas J. ˜ Guibas. Counting people
in crowds with a real -time network of simple image sensors. In Proc. 9th Int. Conf. on Computer
Vision, Nice, France, pages 122 –129, 2003
[12] J. Giebel, D.M. Gavrila, and C. Schnorr. A bayesian frame – ¨ work for multi -cue 3d object
tracking. In Proc. 8th European Conf. Computer Vision, Prague, Czech Republic, pages 241 –
252, 2004.
[13] J. R. Uijlings, K. E. van de Sande, T. Gevers, and A. W. Sm eulders. Selective search for
object recognition. International journal of computer vision, 104(2):154 –171, 2013.
[14] https://www.pyimagesearch.com/2014 /11/10/histogram -oriented -gradients -object –
detection/ , accesat ultima dată pe 29.06.2018
[15] https://www.pyimagesearch.com/2015/11/09/pedestrian -detection -opencv/ , accesat ultima
dată pe 29.06.2018

46
[16] J. Yan, Z. Lei, L. Wen, and S. Z. Li. The fastest deformable part model for object detection.
In Computer Vision and Pattern Recognition (C VPR), 2014 IEEE Conference on, pages 2497 –
2504. IEEE, 2014
[17] P. Sermanet, D. Eigen, X. Zhang, M. Mathieu, R. Fergus, and Y. LeCun. Overfeat:
Integrated recognition, localization and detection using convolutional networks. CoRR,
abs/1312.6229, 2013
[18] D. Hoi em, Y. Chodpathumwan, and Q. Dai. Diagnosing error in object detectors. In
Computer Vision –ECCV 2012, pages 340 –353. Springer, 2012

47
Anex a 1

48

49
Anexa 2

Codul folosit pentru modelul propus

Descriptorul

class PeopleDetection: // se definește clasa People detection
def __init__(self): // se apelea ză constuctorul clasei
// se define ște descriptorul unei instanțe ca fiind descriptorul HOG din OpenCV
self.descriptor = cv2.HOGDescriptor()
// se setează detectorul pe detecția de persoane
self.descriptor.setSVMDetector(cv2.HOGDescriptor_ getDefaultPeopleDetector())

# acest proces se apelează pentru fiecare frame
def process_frame(self, frame):
//apelează funcția de detectare pe mai multe scalări din OpenCV și actualizează detecțiile, care
//sunt arrayuri de numpy weights, ce repre zintă ponderile; o pondere apropiată de 0 reprezintă
//incertitudine, în timp ce o pondere apropiată de 1 reprezintă siguranță în detecție
detections, weights = self.descriptor.detectMultiScale(frame, winStride=(4, 4), padding=(4,
4), scale=1.08)
//dacă nu s -a făcut nicio detecție se returnează instant arrayul gol
if len(detections) is 0:
return []

//aici se construiește un array numit passing pentru toate detecțiile care au ponderile mai mari de
// 0.5
//pentru detecții mai cla re, se poate alege o valoare mai apropiată de 1 a acestor ponderi, după
//care se returnează acest array
for i in range(0, detections.shape[0]):
if weights[i] >= 0.5: # Discard anything that we're less than 50% confident about

50
passing.append(detections[i])

return passing

Clasa Rectangle

// se definește clasa Rectangle
class Rectangle:
// se definește constructorul clasei, ce are ca parametri instanța curentă și un array de 4 valori de
//tip întreg, unde sunt stocate coordonatele carteziene x și y, precum și alți doi parametri,
//înălțimea și lățimea
def __init__(self, numpy_rect):

//se calculează coordonatele stânga sus si dreapta jos ale unei detecții
self.topLeft = (numpy_rect[0], numpy_rect[1])
self.bottomRight = (numpy_rect[0] + numpy_rect[2], numpy_rect[1] + numpy_rect[3])

// se mi cșorează cu 10% tot dreptunghiul de mai sus, pentru c ă OpenCV returnează în general o //
//fereastră mai mare pentru detecție
self.topLeft = (int(self. topLeft[0] + numpy_rect[2] / 9), int(self.topLeft[1] + numpy_rect[3]
/ 9))
self.bottomRight = (int(self.bottomRight[0] – numpy_rect[2] / 9), int(self.bottomRight[1] –
numpy_rect[3] / 9))

// ticks se m ărește pentru fiecare frame și contabilizează d e câte ori a fost detectat un obiect de
//către OpenCv, pornește inițializat de la 0
self.ticks = 0
// dacă un dreptunghi nu mai este detectat se așteaptă 5 rulări ale OpenCv fără să se mai
//detecteze
// vreun obiect în apropierea celui curent p ână să îl elimine din lista de urmărire
self.deathTicks = 0

51

// id-ul pornește de la None
self.id = None
// culoarea pornește de la None
self.color = None

// se cre ează istoria centrelor ferestrelor de detecție valoarea inițială fiind un array în care este
//pus centru l elementului
self.pointHistory = [self.center_point()]

// funcție care determină dacă unul din tre dreptunghiurile detectate în frameul anterior, care este
//primit ca parametru, poate să fie un dreptunghi no u
def could_be(self, other_rect):
// se verifică dacă este o diferență mai mare de 15 pixeli între punctele din stânga sus și punctele
//din dreapta jos
max_diff = (15, 15)

top_left_diff = _abs_tuple_sub(self.topLeft, other_rect.topLeft)
bottom_right_diff = _abs_tuple_sub(self.bottomRight, other_rect.bottomRight)
// dacă ambele diferențe sunt mai mici de 15 pixeli, dreptunghiul din cadrul anterior va fi
//actualizat cu cel din cadrul nou
result = top_left_diff < max_diff and bottom_right_diff < max_diff
return result
// această funcție verifică dacă dreptunghiul curent se află în interiorul unui alt dreptunghi
def is_inside(self, other_rect):
top_left_inside = self.topLeft[0] – other_rect.topLeft[0] > 0 and s elf.topLeft[1] –
other_rect.topLeft[1] > 0
bottom_right_inside = self.bottomRight[0] – other_rect.bottomRight[0] < 0 and
self.bottomRight[1] – other_rect.bottomRight[1] < 0

52
return top_left_inside and bottom_right_inside
// această funcție v a fi apelată din clasa main și va verifica dacă un obiect a fost detectat cel puțin
//pentru 5 cadre, înainte de fi afișat în chenarul de detecție
def should_display(self):
return self.ticks >= 5 # Must have been tracked for n ticks in order t o display

// această funcție actualizează un dreptunghi cu unul nou care tocmai a fost găsit de OpenCV
def update_with(self, other_rect):
// se setează coordonatele stânga sus și dreapta jos cu cele ale obiectului primit ca parametru
self.topLef t = other_rect.topLeft
self.bottomRight = other_rect.bottomRight

// se incrementează numărul de detecții ale unui obiect
self.ticks = self.ticks + 1
// se resetează în 0 numărul timpilor în care nu a fost detectat un obiect, deoarece unul nou
tocmai a //fost detectat
self.deathTicks = 0

// se actualizează și centru noului obiect și daca diferența dintre coordonatele noului centru și cea
//a vechiului centru este mai mare de 2 pixeli, se încarcă acest nou centru și în istoricul de centre,
//pentru a fi afișat corespunzător
new_center = self.center_point()
if _abs_tuple_sub(self.pointHistory[ -1], new_center) > (2, 2):
self.pointHistory.append(new_center) # Add to point history
// de fiecare dată când nu este apelată această funcție, se incrementează numărul timpilor în care
//nu a fost făcută nicio nouă detecție, iar dacă au trecut mai mult de 10 timp i fară ca obiectul
//curent să fie detectat, funcția va returna 1 (adevărat) și respectiva instanță va fi eliminată
def should_remove(self):

53
self.deathTicks = self.deathTicks + 1
return self.deathTicks > 10

// funcția aceasta va obține culoarea unui obiect de tip dreptunghi, în mod aleator
def get_color(self):
if self.color is None:
self.color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
return self.color

// această funcție se apelează pentru fiecare cadru în parte și crează noi obiecte de tip dreptunghi
//în momentul în care se face o nouă detecție
def draw_into(self, frame):
current_color = self.get_color()
// se cre ează un dreptunghi din OpenCV, care primește ca parametri coordonatele, culoarea și
//grosimea liniilor chenarului
cv2.rectangle(frame, self.topLeft , self.bottomRight, current_color, 1)
// dacă obiectul nu are un id asociat, i se acordă unul prin variabila global_id care pornește de la
//1 (primul obiect detectat) și se incrementează pentru fiecare obiect nou găsit
if self.id is None:
global global_id
self.id = global_id
global_id = global_id + 1

// scrie id -ul la coordonatele din stânga jos, cu fontul HERSHEY și culoarea neagră
cv2.putText(frame, str(self.id),
(self.topLeft[0], self.bottomRight[1]),
cv2.FONT_HERSHEY_SIMPLEX,
0.5,
(255, 255, 255), 1)

54
// funcția aceasta returnează co ordonata centrului dreptunghiului
def center_point(self):
return (self.topLeft[ 0] + self.bottomRight[0]) / 2, (self.topLeft[1] + self.bottomRight[1]) / 2

// pentru două tupluri (o coordonată de tip x,y) calculează diferențele în valoare absolută dintre
//coordonatele pe axa Ox respective Oy
def _abs_tuple_sub(first_tuple, second_tup le):
first_var = first_tuple[0] – second_tuple[0]
second_var = first_tuple[1] – second_tuple[1]
return abs(first_var), abs(second_var)

Fișierul principal

//în clasa main se vor importa clasa Rectangle și Descriptorul
// se va crea un obiect d e captură video și mai apoi detectorul de persoane
cap = cv2.VideoCapture("videos/video3.mp4")
detector = descriptor.PeopleDetection()
// visibleRects este o listă cu toate dreptunghiurile ce trebuie afișate
visibleRects = []

// se intră într -o buclă infi nită
while True:
// se descompune videoclipul cadru cu cadru ; cadrele vor fi reținute în ret
ret, frame = cap.read()
// în momentul în care nu se mai citește nicun frame, adică înregistrarea a ajuns la final, se iese
//din bucla infinită
if not r et
break

55
//detectorul rulează funcția de procesare pe fiecare frame și obține dreptunghiurile care trec de
//valoarea de prag stabilită anterior
rectangles = detector.process_frame(frame)

// se parcurg toate dreptunghiurile
for each in re ctangles:
// cre ează obiectul dreptunghi
newRect = rectangle.Rectangle(each)

// se verifică două lucruri
//dreptunghiul să fie nou, adică să nu fie la distanța de prag față de un dreptunghi existent
isNew = True
// dreptunghiul să nu fie conținut în interiorul niciunui alt dreptunghi, caz în care va fi ignorat
isInsideAnother = False
//pentru fiecare dreptunghi vizibil în cadrul anterior, se verifică dac ă dreptunghiul nou este în
//interiorul/unuia deja existent
for eachVi sible in visibleRects:
// dacă este conținut deja într -un alt dreptunghi, se afișează coordonatele sale și este ignorat
if newRect.is_inside(eachVisible):
print("Ignoring "+str(newRect)+" due to it being contained in "+str(eachV isible))
isInsideAnother = True
// dacă obiectul nou ar putea fi unul din cele vechi, atunci se continuă urmărirea prin actualizarea
//dreptunghiului vechi cu unul nou și se etichetează ca nefiind un dreptunghi nou
if newRect.co uld_be(eachVisible):
eachVisible.update_with(newRect)
isNew = False
break

// dacă obiectul este nou și nici nu este conținut de un altul, acesta se adaugă în lista obiectelor
//vizibile și va fi afișat dacă va rămâne detectat pentru numărul minim de frameuri stabilit

56
if isNew and not isInsideAnother:
visibleRects.append(newRect)

// se parcurge lista obiectelor de tip dreptunghi și se apeleaz ă funcția should_display(), care
//indică sau n u afișarea
for each in visibleRects:
if each.should_display():
each.draw_into(frame)

// numără câte dreptunghiuri au rămas și dacă înainte erau mai multe decât în momentul curent,
//înseamnă că au fost eliminate o parte dintre aces tea și se afișează acest lucru
countBefore = len(visibleRects)
// apelează funcția should_remove() pentru fiecare dreptunghi, dacă se returnează adevărat,
//atunci se elimină dreptunghiul respectiv
visibleRects[:] = [tup for tup in visibleRects if not tup.should_remove()]
countAfter = len(visibleRects)

if countBefore > countAfter:
print ("Removed "+str(countBefore – countAfter) + " rectangles due to inactivity.")

print ("Rendering "+str(countAfter) + " tracked rectangles.")

//apelează funcția OpenCV pentru afișa rea frameu lui, după ce a adăugat dreptunghiurile
//corespunzătoare
cv2.imshow('frame', frame)
// se așteaptă tasta ,q’ pentru a se întrerupe simularea
if cv2.waitKey(1) & 0xFF == ord('q'):
break

// aștea ptă apăsarea oricărei taste pentru începerea simulării,

57
if waitAfterFirst:
cv2.waitKey(0)
waitAfterFirst = False

// la final se elimină toate capturile și se distrug toate ferestrele
cap.release()
cv2.destroyAllWindows()

Similar Posts