FUNDAȚIA PENTRU CULTURĂ ȘI ÎNVĂȚĂMÂNT IOAN [627405]

FUNDAȚIA PENTRU CULTURĂ ȘI ÎNVĂȚĂMÂNT “IOAN
SLAVICI” TIMIȘOARA
UNIVERSITATEA “IOAN SLAVICI” TIMIȘOARA
FACULTATEA DE INGINERIE
DOMENIUL CALCULATOARE ȘI TEHNOLOGIA INFORMAȚIEI
FORMA DE ÎNVĂȚĂMÂNT – ZI

SISTEM DE PARCARE
INTELIGENT

COORDONATOR ȘTIINȚIFIC
Prof.uni v.dr. Slavici Titus

ABSOLVENT: [anonimizat]
2020

FUNDAȚIA PENTRU CULTURĂ ȘI ÎNVĂȚĂMÂNT “IOAN
SLAVICI” TIMIȘOARA
UNIVERSITATEA “IOAN SLAVICI” TIMIȘOARA
FACULTATEA DE INGINERIE
DOMENIUL CALCULATOARE ȘI TEHNOLOGIA INFORMAȚIEI
FORMA DE ÎNVĂȚĂMÂNT – ZI

SISTEM DE PARCARE
INTELIGENT

COORDONATOR ȘTIINȚIFIC
Prof.uni v.dr. Slavici Titus

ABSOLVENT: [anonimizat]
2020

UNIVERSITATEA DIN ORADEA
FACULTATEA de Inginerie Electrică și Te hnologia Informației
DEPARTAMENTUL Calculatoare și tehnologia informaț iei

TEMA : SISTEM DE PARCARE INTELIGENT

Proiectul de Finalizare a studiilor a student: [anonimizat]
1). Tema proiectului de finalizare a studiilor:
SISTEM DE PARCARE I NTE LIGENT
2). Termenul pentru predarea proiectului de diplom a 21.08.2020
3). Elemente inițiale pentru elaborarea proiectului de finalizare a studiilor
Suita de programre MS Of fice impli când MS Word, Excel si Python IDE for
Professional Develope rs PhyCharm .
4). Conținutul proiectului de finalizare a studiilor :
Se impune elaborarea unei aplicatii de detec ție a locurilor libere de parcare printr -o
imagine furnizat ă de o camer ă atașată unui Raspberry P i Zero W.
5). Material grafic:
Semn de circul ație inteligent , Schel etul aplica ției , Schema componentel or și portur ilor
, Exemple pentru ROI, Exemplu pentru funcția c2.HoughCircles .
6). Locul de documentare pentru elaborarea proiectului de diplomă:
Biblioteca Universit ății de Vest din T imișoara și Bi blioteca Universității “
Polite hnica ” din Ti mișoara .
7). Data emiter ii temei 05.12.2019

Coordonatori științifici
Prof.uni v.dr. Slavici Titus ,

Cuprins

Cap 1. Introducere ………………………….. ………………………….. ………………………….. ………………………. 7
Cap 1.1. Conceptul de Smart City ………………………….. ………………………….. ………………………….. 7
Cap 1.2. Nevoi identificate ………………………….. ………………………….. ………………………….. ……….. 8
Cap 1 .3. Scopul lucrării ………………………….. ………………………….. ………………………….. ……………. 8
Cap 1.4. P roblematica abordată ………………………….. ………………………….. ………………………….. …. 9
Cap 1.5. Motivația alegerii temei ………………………….. ………………………….. ………………………….. . 9
Cap 1.6. Informații generale ………………………….. ………………………….. ………………………….. ……. 10
Cap 2. Micro -computerul Raspberry Pi ………………………….. ………………………….. ……………………. 11
Cap 2.2. Modele Raspberry Pi ………………………….. ………………………….. ………………………….. …. 11
Cap 2.3. Raspberry Pi Zero W ………………………….. ………………………….. ………………………….. …. 14
Cap 2.4. Raspberry Pi Camera ………………………….. ………………………….. ………………………….. …. 15
Cap 2.5. Sistemul de operare ………………………….. ………………………….. ………………………….. …… 16
Cap 3. Limbajul de programare Python ………………………….. ………………………….. ……………………. 17
Cap 4. Computer Vision ………………………….. ………………………….. ………………………….. …………….. 19
Cap 4.1. Module specializate pentru Computer Vision ………………………….. ………………………… 21
Cap 4.2. Funcții folosite în lucrarea prezentă ………………………….. ………………………….. …………. 21
Cap 5. OpenCV ………………………….. ………………………….. ………………………….. ………………………… 23
Cap 5.1 Funcțiile OpenCV ………………………….. ………………………….. ………………………….. ……… 24
Cap 6. Proiectarea aplicației ………………………….. ………………………….. ………………………….. ……….. 28
Cap 7. Dezvoltarea aplicației ………………………….. ………………………….. ………………………….. ……… 29
Cap 7.1 Dezvoltarea algoritmilor ………………………….. ………………………….. …………………………. 29
Cap 7.2. Configurarea Raspberry Pi-ului pentru transmisia live ………………………….. ……………. 33
Cap 8. Testarea ap licației ………………………….. ………………………….. ………………………….. …………… 34
Cap 9. Concluzii ………………………….. ………………………….. ………………………….. ……………………….. 37
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. ….. 39

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ
ȘI TEHNOLOGIA INFORMAȚIEI
Adresa Oradea, Cod 410087, Bihor, Romania, Strada Universității, nr. 1 ,
Tel/Fax :+40 259/408 412, Tel:+40 259/40 8104; +40 259/408204

REFERAT
PRIVIND PROIECTUL DE DIPLOMĂ
A

ABSOLVENTULUI / ABSOLVENTEI : PĂDURARU( căs. IAN ȚA) ROXANA –
IULIANA

DOMENIUL Calculatoare și tehnologia informației
SPECIALIZAREA Tehnologia informației
PROMOȚ IA 2 020

1. Titlul proiectului

SISTEM DE PARCARE INTELIGENT

2. Structura proiectului

1. Introducere
2. Micro -computerul Ras berry PI
3. Limbajul de programare Python
4. Computer Vision
5. OpenCV
6. Proiectarea aplicatiei
7. Dezv oltarea a plicatiei
8. Testa rea aplicatiei
9. Conclu zii
10. Bibliografie

3. Apreci eri asupra conținutului proiectului de DIPLOMĂ ( finalizare a
studiilor ), mod de abordare, complexitate, actualitate, deficiențe

Lucrarea este corect divizat ă pe capitole și paragrafe, între car e exist ă o bună
coeren ță.
Autorul dezvolt ă în mod corect element teoretice esențiale , inserându -le în lucrare
doar în m ăsura în care contribuie la întelegerea păr ții aplicative.

4. Aprecieri asupra proiectului (se va menționa: numărul tit lurilor bibliografice
cons ultate, frecvența notelor de subsol, calitatea și diversitatea surselor
consultate; modul în care absolventul a prelucrat informațiile din surse
teoretice)

Sursele bibliografice sunt alese în mod co respunzător cu necesitatea folosirii
limbajului de prog ramare Python și a Micro -computerul ui Raspberry Pi Zero W .

(se va menționa: opțional locul de documentare și modul în care absolventul a realizat
cercetarea menționându -se contribuția autorului)

Autorul alege în mod corect sursele de l iteratur ă, lucrarea având la bază un
număr de 19 surse bibliografice. Informa țiile prelucrate din sursele teoretice sunt c itate în
mod corespunzător în lucra re.

5. Concluzii (coordonatorul proiectului trebuie să aprecieze valoarea proiectului
întocmit, relev anța studiului într eprins, competențele absolventului,
rigurozitatea pe parcursul elaborăr ii proiectului, consecvența și seriozitatea
de care a dat dovadă absolventul pe parcurs)
………………………………………………………………….. ………………. ……………………………………………….
……………. …………………………………………………………………………………………………………….. ……….
…………………………. ………………. …………………………………………………………….. …………………………
……………………………………………………………………………………………
………………………… ………………………………………… ……………………………………………………………….
…………………………………………………………………………………………………………….. ………. …………….
………………………….. …………………………………………………………………………………………………….. …
…………………………………………………………………………….. ……………………………………………………..
………………………………………………………………. ………………………………………………………….

6. Redactarea proiectului respec tă ……………….. ……………………………….. cerințele
academice de redactare (părți, capitol e, subcapitole, note de subsol și
bibliografie).
7. Consider că proiectul îndeplinește/ nu îndeplinește condițiile pentru susținere
în sesiunea de Exa men de LICENȚĂ ( finaliz are a studiilor ) din SEPTEMBRIE
2020 și propun acordarea notei ………………

Oradea,
Data Coordonator științific

Cap 1. Introducere

Conceptul de Internet of Things a ajuns in lumina reflecto arelor in 2005 când Uniunea
Internaț ională a Telecomunicațiilor (UIT) a publicat primul raport pe subiect . Acest raport
adoptă o abordare holistică sugerând că Internet of Things va conecta obiectele lumii atât într –
o manieră senzorială cât și i nteligentă combinând evoluția tehnol ogică in identificarea
elementelor, senzori și rețele de senzori wireless, sisteme încorporate ș i nanotehnologii. [1]
Aceste s isteme inteligente au început să facă parte tot mai mult din viața
contemporană cu scopul de a ușura și simplifica anumite aspecte ale acesteia.
Câteva exemple de astfel de sisteme inteligente ar fi:
• Frigiderul pentru managementul alimentelor
• Termostatul controlat prin apl icație mobilă
• Bec controlat prin aplicație mobilă
• Parcare care recunoaște locurile libere și transmite informația pr intr-o
aplicație mobilă /web
Curenta lucrare se încadrează sub acest concept atât prin simpla sa funcționalitate, prin
scopul îndeplinit și prin modul de comunicare cu utilizatorul.

Cap 1.1 . Conceptul de Smart City

Permițând acces și interacțiune cu o largă gamă de dispozitive cum ar fi: camere de
supraveghere, electrocasnice, vehicule, senzori de monitorizare, display -uri și așa mai departe,
Internet of Things va găzdui dezvoltarea unor aplicații care pot folosi cantități enorme și
variate de date gene rate de obiecte pentru a furniza noi servicii cetățenilor, companiilor și
administrațiilor publice. [2]
Vorbind de un scenariu atât de complex, aplicațiile destinate pentru un Internet of
Things într-un context urban, este un interes particular, deoarece r ăspunde insistențe lor multor

guverne de a se adopta soluțiile ofer ite de Tehnologiile Informațiilor și Comunicațiilor (TIC)
în managementul serviciilor publice, prin urmare, realizând conceptul de Oraș Inteligent
(Smart City) [2]

Cap 1.2 . Nevoi identifica te

Cum l umea secolul ui 21 este într-o continuă dezvoltare , se dore ște o schimbare care să
aducă, în principiu, ceva mai bun, mai simplu și accesibil pentru întreaga populați e. Având în
vedere această viteză a tehnologiei se urmărește tot mai mult și un anumit set de aspecte
secundare ale produselor dezvoltate , precum durata de via ță, reziste nța în diferite condiții
meteo etc., caracteristici care reprezintă o calitate mai bună și o flexibilitate mai mare în
utilizare.
Dupa conceptul de Smart City , Timișoa ra este un oraș în plin ă dezvoltar e din punctul
de vedere al unui oraș inteligent . Având în vedere mai multe aspecte precum infrastructura,
industria și nivelul ridicat de populație cu competențe profesionale dezvoltate în domenii
precum ingineria ș i IT&C, se poate lua în considerare implementarea unei astfel de aplicații la
nivel local.
Nevoia unei astfel de aplicații vine din timpul pierdut în căutarea unui loc de parcare ,
datorită faptulu i că Timișoara este un oraș aglomerat din punct de vedere al trafic ului și al
autovehiculelor , iar timpul petr ecut în cău tarea unui loc de parcare poate să difere în funcție
de ora și zonă, care la rândul ei va generar a trafic suplimentar, spre exemplu: un conducător
auto intră într -o parcare în id eea de a găsii un loc li ber,dar negăsind , iese din parcare și se
îndreaptă spre o altă parcare . De cele mai mu lte ori nu găsește un loc liber nici în a 2 -a
parcare și se întoarce la prima parcare cu speranța că s -a eliberat un loc . Traficul ar fi
diminuat dacă nu ar mai exista a stfel de autovehicule care ,,se plimbă” în ac eleași zone
deoarece străzile ar putea fi folosite doar pentru a ajunge dintr -un punct în altul .

Cap 1.3. Scopul lucrării

Scopul propriu -zis a acestei luc rări constă în reducerea timpului de căutare a unui l oc
de parcar e precum și o mai bun ă distribuție a acestora , lucru care va determina și o reducere a
traficului și a pol uării din orașele aglomerate .
Orașe precum Berlin , Dublin , Madrid deja beneficiază de sisteme inteligente de
parcare cu ajutorul cărora se optimizează gestionarea locurilor de parcare într -un mod mai
eficient . [3]

Această aplicație se încadrează în obiectivele necesare unui oraș inteligent și față de
alte soluții precum senzori de greutat e montați sub fiecare loc de parcare , este o soluție relativ
mai ieftină.

Cap 1.4. Problematica abordată

Imagine a de ansamblu a acestui proiect este : o platformă in miniatură cu 8 locuri de
parcare și un raspberry pi care să preia imagi ni, să determine câte locuri sunt libere și câ te
sunt ocupate și în același timp să transm ită această informație pe internet.

Cap 1.5. Motivația alegerii temei

Secolul XXI mai este numit și s ecolul vitezei p entru că tehnologia a avansat atât de
mult înc ât a facilitat un mod de viață în care nimeni nu-și mai dorește să p iardă timpul într -un
mod inutil.
Introducerea sistemelor electronice care să faciliteze efici ența și simplitatea vieții de zi
cu zi a început cu magazinele online, unde cu ajutorul unui br owser web și al unei conexiuni
la internet se pot face cumpărături le într -un m od destul de asemănător celui în care se merge
în magazin, doar mult mai simplu deoarece căutare a unui produs este făcută de un algoritm
special proiectat pentru asta, plata se face direct din contul bancar sau ramburs, iar produsul
este adus d irect la uș ă fără prea mult efort .
Această l ucrarea își propune să ofere o astfel de facilitate, însă într -o situație total diferită, și
anume căutarea unui loc de parcare într -un oraș aglomerat. Imaginați -vă cum ar fi să știți deja
de la intrarea într -o parcare sau într-o zonă aglomerată dacă sunt locuri li bere sau nu sau să
existe indicatoare care să ghideze spre cel mai apropiat loc liber de parcare .

Figură 1. Semn de circulație inteligent [4]

Cap 1. 6. Informații generale

Această lucrare se compune din mai multe elemente esențiale pentru buna funcționare
și îndeplinirea scopului principal și anume : algoritmul de detecție, transmisia video live,
raspberry pi -ul și camera acestuia și, desigur, o conexiune la internet.
Algorit mul de detecție a locurilor libere de parcare s -a construit în limbajul de
programare Python 3.6.5 alături de modulul specializat de Computer Vision OpenCV 3.4.0.
Pe lângă modulul menționat anterior, s -au mai folosit și alte module pentru procesare
numeric ă (NumPy), pentru generare de grafic e (Matplotli b) și formatare de date (JSON).
Trans misia video live este furnizată de Raspberry Pi printr -un software care
monitorizează semnalul primit de cameră numit “Motion”. Acest software poate transmite
video live, transformând Raspberryi Pi -ul într -un server de dimensiuni reduse. Transmisia,
prin parametri impliciți, se face pe IP -ul Raspberryi Pi -ului prin portul 8081.

Cap 2. M icro-computerul Raspberry Pi

Raspberry Pi este un micro -computer, bazat pe un siste m de operare de tip Linux,
capabil să îndeplinească mai multe funcții în același timp , iar u nul dintre avantajele majore ale
Raspberry Pi este că este ieftin, față de un calculator personal, acesta poate ajunge până la 5%
din preț, astfel poate fi folosit în dive rse domenii precum e ducație, reț elistică, sau chiar
proiecte complexe prin achiziționarea a mai multor unități și programarea acestora în scopul
de a-și împărții resursele.

Cap 2.1. Istoria Raspberry Pi

Raspberry Pi a fost creat in februarie 2012 de către Raspberry Pi Foun dation, inițial cu
scopul de a promova și de a învăța luc ruri de bază despre informatică în școli și licee din
Marea Britanie. Inițial au fost lansate doua dispozitive, Model A și Model B, aceste
calculatoare variau în specificaț ii și capabilități.
Produsele erau atât de populare datorita prețurilor lor care variau între 25$ și 35$,
eficiența și durabilitate, lucru care le -a făcut ușor de modificat și de a dezvolta proiecte pe ele .
În 2015 a fost anunțat modelul Raspberr y Pi 2 c are avea un procesor cu frecvența mai
mare cu 200Hz decât prede cesoarele modele (700Hz) și capa citatea memorie i RAM dublată
la 1GB. [5]

Cap 2.2. Modele Raspberry Pi

Frumusețea la Raspberry Pi este ca este un computer cu scop general de dimensiuni
foarte mici (poate fi puțin mai încet decât unele aplicații rulate pe un sistem Desktop, dar mult
mai bun la alte lucruri decât un calcu lator personal), deci poate face tot ce face un calculator
personal. În plus, este destul de ieftin încât poate fi cumpărat cu banii de buzunar st rânși în
câteva zile. [6]
Când cumperi un Raspberry Pi, cumperi, în principiu un Printed Circuit Board (PCB).
Nici măcar nu include un alimentator sau sistem de operare. Pentru că Raspberry Pi utilizează
tastatură s i mouse standard USB , majoritatea setărilor s unt destul de simple, deci utilizatorul
trebuie să se concen treze doar pe sa rcinile specific e pentru Raspberry Pi. [7]

Figură 2. Raspberry Pi Zero (stânga), Raspberry Pi A+ (centru), Raspberry Pi 2 model B (dreapta)
Există mai multe modele ale micro -calculatorului Raspberry Pi . Câteva dintre acestea
sunt prezentate în figura de mai sus , iar diferențele dintre ele sunt reprezentate în tabelul de
mai jos:

Tabel 1. Specificații tehnice pentru diferite modele ale Raspberry Pi

Una dintre probleme le care apar după achiziționarea unui Raspberry Pi este alegerea
sursei de alimentare. Soluția acestei probleme se leagă de faptul ca specificați ile electrice
specifice unei surse de alimentare potrivite pentru Raspberry Pi ofer ă o tensiune de 5V DC. Model RAM Porturi USB Port Ethe rnet Note
3B 1 GB 4 Da Include Wifi
Zero 512 MB 1 (micro USB ) Nu Preț scăzut
2B 1GB 4 Da Procesor Quad –
core
A+ 256 MB 1 Nu
B+ 512 MB 4 Da întrerupt

A 256 MB 1 Nu întrerupt

B rev2 512 MB 2 Da întrerupt

B rev1 256 MB 2 Da întrerupt

Cantitatea de curent pe care sursa de alimentare trebuie să o livreze depinde de modelul
Raspberry Pi -ului și de componentele perif erice atașate acestuia . Cantitatea minimă de curent
pe care ar tre bui s -o livreze o sursa de alimentare este de 700mA . [7]
În cazul utilizării unei surse ce livrează, să zicem, un curent maxim de 2A, Raspberry
Pi-ul nu v -a consuma mai multă electricita te decât în cazul unei surs e de 700mA deoarece
acesta consumă doar curentul de care are nevoie. [7]
În figura de mai jos se poate observa diferența de curent consumat în timpul bootării
între Raspberry Pi 2B si Raspberry Pi B
Figură 3. Consumul de curent al Raspberry Pi in timpu l bootări [7]

În continuare, după ce s -a ales sursa de alimentare, se ad augă per ifericele dorite
(mouse, tastatura, monitor). Mouse -ul și tastatura se conectează, în funcție de model, prin
USB sau mic roUSB, pentru monitor se fol osește portul HDMI sau miniHDMI pentru
versiunile zero.

Cap 2.3 . Raspberry Pi Zero W

Raspberry Pi zero s -a dovedit a fi unul dintre cele mai populare și vândute modele din
gama Raspberry Pi de când a ieșit pe piață în Noiembrie 2015. Totuși, mulți oameni credeau
că îi lipseș te o caracteristică f oarte importantă: internet wireless integrat. [8]
Raspberry Pi Zero W a fost lansat in februarie 2017 și, pe lângă predecesorul său,
Raspberry Pi Zero, are internet wireless integrat.

Figură 5. Raspberry Pi Zero W [8]
Spre deosebire de modelul prece dent u nde antena era încapsulată într -un cip,
Raspberry Pi Zero W are antena printată direct pe placa de circuite. Aceasta se poate
Figură 3. Componente și porturi Raspberry Pi 3B [16]
Figură 4. Componente și portu ri Raspberry Pi Zero [17]

observată în figura de mai sus in partea de jos a imaginii, sub procesor, cu o for mă
triunghiulară.

Cap 2.4 . Raspberry Pi Camera

Modulul de cameră a fost oficial izat de către Raspberry Pi Foundation în 2013 sub
numele Camera Module v1 iar in 2016 a fost lansat ă o versiune îmbunătățită numită Camera
Module v2 . Ambele modele au versiun i infraroșu, numit e NoiR.
Acest modul este o alternativă la camerele web utilizate împreună cu calculatoarele
personale, dar are și avantajul de a se transforma, împreună cu Raspberry Pi -ul într -o cameră
de supra veghere cu anumite caracteristici : activa re la detec ție de mișcare, transmisie live,
stocare de imagini în cloud etc.

În următorul tabel sunt reprezentate specificațiile tehnice ale celor 2 camere:
Modulul Camera v1 Modulul Camera v2
Preț 25$ 25$
Mărime 25x24x9mm 25x24x9mm
Greutate 3g 3g
Rezoluție 5 Megapixeli 8 Megapixeli
Moduri video 1080p30, 720p60 și 1080p30, 720p60 și
Figură 6. Camera module v2.1 [8]

640x480p60/90 640x480p60/90
Integrare Linux V4L2 driver disponibil V4L2 driver disponibil
API programare C OpenMAX IL și altele
disponibile OpenMAX IL și altele
disponi bile
Senzo r OmniVision OV5647 Sony IMX219
Rezoluție senzor 2592×1944 pixeli 3280×2464 pixeli
Aria imaginii pe senzor 3.76×2.74 mm 3.68×2.75mm(diagonală 4.6mm
Mărimea unui pixel 1.4 µm × 1.4 µm 1.12 µm x 1.12 µm
Mărime optică 1/4" 1/4"
SNR 35dB
Dyna mic range 67 dB @ 8x gain
Sensibilitate 680 mV/lux -sec
Focalizare fixă 1m -> infinit
Distanță focală 3.60 mm +/ – 0.01 3.04 mm
Tabel 2 Comparație între Camera Module v1 și Camera Module v2 [8]
Lucrarea prezentă s -a realizat cu o cameră de tip Camera Module v1. 3.

Cap 2. 5. Sistemul de operare

Indiferent de cât de performante sunt componentel e hardware ale lui Raspberry Pi,
fără un sistem de operare, e ste doar o bucată de silicon, fibră de sticlă și alte câteva materiale.
Existe câteva sisteme de oper are diferite p entru Raspberry Pi, incluzând RISC OS, Pidora,
Arch Linux și Raspbian. [9]
Momentan Raspbian este cel mai popular sistem de operare bazat pe Linux pentru
Raspberry Pi. Acesta este un sistem de operare de tip open -source bazat pe Debian, fiind
modi ficat specific pentru Raspberry Pi. [9]

Cap 3. Limbajul de programare Python

Originile limbajului Python se află în decembrie 1989, unde Guido van Rossum l -a
creat dintr -un hobby ca pe un proiect la care să lucreze în perioada sărbătorilor de iar nă.
Python s -a născut din limbajul ABC, iar u nul dintre principalele punct e forte ale acestui
limbaj a fost suportul său pentru multiple platforme și ușurința cu care s -a răspândit, o
inovație vitală pentru zilele primelor calculatoare personale [11]
Python este un limbaj de programare relativ ușor de învățat , dar foarte puternic.
Acesta are structuri d e date de nivel înalt și o abordare simplă dar eficientă asupra progra mării
orientate pe obiect . Sintaxa sa elegantă și scrierea dinamică, împreună cu natur a sa
interpretată, îl fac un limbaj idea l pentru scripting și apl icații rapide pentru majoritatea
platformelor. [12]

Spre deosebire de alte limbaje de programare, Pyth on se remarcă cel mai rapid prin
sintaxa sa minimalistă. Acest lucru îi oferă un avant aj față de alte limbaje când vine vorba de
ușurința înțelegerii. În figura următoare este prezentată diferența dintre sintaxa limbajului
Python și cea a limbajului Java printr -un program ce se găsește în partea introductivă a
oricarei cărți sau a oricărui curs de programare, și anume clasicul program ce afișează pe
ecran textul “Hello world! ”
Figură 7. Captură de ecran a sistemului de operare Raspbian

Figură 8. Python vs Java [13]

Limba jul Python permite scrierea unor programe foarte compacte și ușor de citit ,
aceastea fiind în general mu lt mai scurte decât programe echivalente în C sau C++ din mai
multe motive:
• Datele de nivel înalt permit exprimarea de operații comple xe într -o singură
sintaxă
• Gruparea sintaxelor se face prin indentare în loc de begin și end sau acolade
• Declararea de vari abile sau argumente nu este necesară [12]

Principalele caracteristici ale l imbajului Python sunt:
• Open source
• Extensibil
• Interpretat
• Portabil
• Simplu
• Minimalist
• Multiparadigmă
Python este un limbaj în continuă dezvoltare, prin urmare este imbunătățit de cr eatorii
acesutia periodic. Ultima versiune lans ată este versiunea 3, însă și versiunea 2 este încă
folosită în multe aplicații. Toate p rogramele și porțiunile de cod din această lucrare sunt scr ise
în Python 3.6.
Python 3 are câteva diferențe față de vers iunea 2, cele mai importante dintre aceste a
sunt legate de operatori de împărțire, funcția de print, ASCII/Unicode, xrange sau
manipula rea erorilor.
Pentru a exemplifica aceste diferențe am ales să folosesc funcția de print , deoarece
este una dintre cele m ai utilizate funcții dar și una dintre cele mai simple și u șoare de înțeles .

În următoarele imagini se poate observa instrucțiunile dat e ambelor versiuni de Python și
rezultatul furnizat de acest ea în urma execuției instrucțiunilor.

În urma updat e-ului la versiunea 3 a limbajului Python, acesta nu mai permite două
forme diferite de specificare a argumentelor funcției print ci ne cesită folosirea formei ce
include argumentele funcției între paranteze rotunde.
La nivel global, limbajul de programare Python se clasează printre primele locuri ca și
popularitate pe lângă Java, C++, .NET sau C# și este folosit în instituții de renume pr ecum:
YouTube, Dropbox, NASA, MIT, Instagram, Google etc.

Cap 4. Computer Vision

Cercetătorii în domeniul Computer Visi on au dezvoltat în paralel tehnici matematice
pentru recepția formelor și aparențelor tridimensionale ale obiect elor din imagini. În prezent
avem tehnici de încredere care pot să calculeze un model 3D parțial al unui mediu
înconjurător din mii de poze parț ial suprapuse. Putem detecta o persoană mișcându -se într-un
fundal complex. Putem chiar să găsim și să numim toa te persoanele dintr -o fotografie. Totuși,
lăsând la o parte t ot acest avans, visul de a avea un calculator care să interpreteze o imagine la
același nivel cu u n copil de 2 ani, spre exemplu numărarea tuturor animalelor dintr -o poză,
Figură 9. Input și Output pentru Python 2.x
Figură 10. Input si Output pentru Python 3.x

pare departe. De ce est e vederea atât de dificil ă? În mare parte este pentru că vederea este o
problemă inversă, în care căutăm să recuperăm unele necunoscute care ne oferă o informa ție
insuficientă pentru a specifica soluția deplină. Trebuie, așadar, să recurgem la modele
proba bilistice și bazate pe fizică pentru a dezambiguiza potențialele soluții. Oricum, să
modelăm lume a vizuală cu toate complexitățile acesteia este mult mai greu decât, să zicem, să
modelăm domeniul vocal care produce sun etele vorbite. [14]
În Computer Vision se încearcă să se facă inversul, spre exemplu să descriem lumea
pe care o vedem în una sau mai multe imagini și să reconstruim pr oprietățile ac esteia, cum ar
fi forma, lumina, și distribuția culorilor.
Vestea bună este că Computer Vision es te folosit într -o largă varietate de aplicații în
lumea reală, care includ:
• Recunoașterea caracterelor optice (OCR): citirea c odurilor poștale scrise de
mână pe scrisori și rec unoașterea automata a numerelor de înmatriculare.
• Inspecție de mașini: inspecții de calitate a unor componente folosind vedere
stereo cu iluminare specializată pentru a măsura toleranțe sau căutarea de
defecte în carcase de metal folosind raze X.
• Construcție de modele 3D: construcție de modele 3D automata din imagini
aeriene folosite in sisteme de navigație cum ar fi Google Maps, Bing Maps etc.
• Imagistică medicală: înregistrări pre -operatorii și în timpul op erațiilor sau
efectuarea de stud ii pe termen lung pe morfologia creierului uman
îmbătrânind.
• Siguranța în automotive: detectarea de obstacole neașteptate, cum ar fi pietoni
pe stradă, în condiții în care radar -ul nu funcționează corespunzător.
• Mișcare în pereche: îmbi narea imaginilor gen erate de calculator (CGI) cu
înregistrări de acțiune live pri n urmărire de puncte caracteristice în video -ul
sursă pentru a estima mișcarea tridimensională a camerei și formele mediului
înconjurător. Asemenea tehnici sunt foarte des folosite la Hollywood î n
conceperea de filme.
• Captura mișcării (mocap): folosirea de markere retro -reflectoare îm captura
actorilor pentru animații pe calculator.
• Supraveghere: monitorizare în caz de intruși, analiza traficului pe o au tostradă,
monitorizarea piscinelor în caz de înec.
• Recunoaștere de amprentă și date biometric e: pentru autentificări automate sau
unele sisteme de siguranță. [14]

Cap 4.1. Module specializate pentru Computer Vision

Pentru a lucra și a dezvolta o aplica ție sub conceptul de Computer Vison este
recomandată folosirea u nor anumite module specializate care au fost dezvoltate special pentru
operații specifice domeniului. Aceste module conțin funcții de citire, afișare, salvare și
prelucrare a imaginilor care o perează algoritmi pe bază de pixeli și matric i de pixeli în modu ri
specifice pentru fiecare funcție în parte.
Printre modulele specializate în Computer Vision se numără următoarele:
• SimpleCV: Un modul open source pentru aplicații de Computer Vision ce ofe ră
acces la funcții puternice colectate din alte module, într -un cadru mai simplu de
învățat și de înțeles .
• Point Cloud Library (PCL): cadrul PCL este un proiect open source ce oferă o
gamă largă de algoritmi pentru filtrare, reconstrucție de suprafață, se gmentare etc.
• Robot Operating System ( ROS ): este un întreg sistem de operare pentru scrierea de
software pentru roboți include algoritmi specifici Computer Vision, în principiu
pentru maparea suprafețelor și recunoașterea de obiecte.
• scikit -image: este o l ibrărie specializată pentru Computer Vision exclusivă pentr u
limbajul de programare Python.
• OpenCV: este cel mai popular modul pentru Computer Vision la nivel global ce
include foarte multe funcții și algoritmi specifice pentru Computer Vision și este
dezv oltat în special pentru aplicații în timp real.

Cap 4.2. F uncții folosite în lucrarea prezentă

Pentru a putea ajunge la stadiul de prototip am efectuat multiple teste cu anumite
funcții pentru a stabili care se pliază cel mai bine pentru îndeplinirea sc opului acestei aplicații .
În continuare voi face o explica ție introductivă legată de funcțiile de bază folosite în
această lucrare:

• Canny edge detection: această funcție detectează marginile obiectelor aflate în
imagine. Algoritmul se bazează pe diferen ța de culoare (contrast) dintre pixeli
învecinați , iar r ezultatul acestei funcții este o imagine în care marginile
obiectelor sunt evidențiate prin culoarea alb, iar fundalul este transfor mat în
negru.

• Hough Circle Transform (HCT) : este o metodă de extra gere a cercurilor din
imaginile digitale și se bazează pe un algoritm care detectează cercurile în
imaginile 2D folosindu -se de formula matematică a cercului:

Rezultatul acestei funcții este definit ca o lista ce conține coordonatele
centrului cercul ui (a, b) și ale razei (r). Aceste coordonate sunt folosite de
obicei pentru a folosi funcții pentru desenarea cercurilor pe im aginile folosite.
• Region of interest (ROI): este o funcție ce preia o regiune dintr -o imagine în
funcție de parametrii oferiți. Pentr u o înțelegere mai ușoară, acea stă funcție
poate fi asemănată cu funcțiile de tip Crop din programe specializate în editare
de imagini (Paint, Adobe Photoshop, GIMP)

Figură 1 2. Exemplu pentru Hough Circle Transform [19] Figură 11. Exemplu pentru funcția Canny edge detection [19]

Acestea au fost funcțiile “cheie” care au fost utilizate în dezvoltarea aplicației . Împreun ă cu
acestea a u fost folosit e și funcții pentru ajustarea imaginii (blur), ajustarea culorilor (color ->
alb-negru), conversie, captură live, plasare de figuri geometrice pe imagine etc.

Cap 5. OpenCV

OpenCV( Open Source Computer Vision Library ) este u n modul software dedicat
pentru Computer Vision și Machine Learning și a fost construit pentru a oferi o infrastructură
comună pentru aplicațiile de Computer Vision și să accelereze utilizare perce pției mașinilor în
produsele comerciale. [15]
Open CV are o gamă de peste 2500 algoritmi clasici și de ultimă oră care pot fi utilizați
pentru detecție și recunoaștere de fețe, identificare de obiecte, clasificarea mișcărilor umane în
materiale video, urmărirea mișcarea obiectelor, extragere a de modele 3D ale obiectelor,
îmbina imagini împreună pentru a crea imagini de rezoluții înalte, găsirea imaginilor si milare
dintr -o bază de date, eliminarea efectului de ochii roșii din fotografiil e făcute cu bliț,
urmărirea mișcărilor ochilor etc., fiind un modul ce este folosit într -un mod extensiv în
companii, grupuri de cercetare și organe gu vernamentale. [15]
Modulul OpenCV are interfețe pentru C++, Java, Python și MATLAB și suportă
Windows, Linux, Android și Mac OS. Acesta se inclină mai mult spr e aplicații în ti mp real.
[15]

Figu ră 13. Exemplu pentru ROI

Cap 5.1 Funcțiile OpenCV

Pentru ca această luc rare să ofere o soluție reală, a fost nevoie de un algoritm care să
determine dacă un anume loc de parcare , aflat în imaginile oferite d e camera atașată
Raspberry Pi -ului este liber . Acest alg oritm a fost dezvoltat în limbajul de programare Python
folosind elemente din modulul OpenCV.
În continuare sunt prezentate funcțiile esențiale acestei apl icații împreună cu explicațiile
aferente parametri lor acestora :
• cv2.imread(‘imagine.jpg’, 0) – funcț ia folosită pentru încărcarea imaginilor în cod.
Primul parametru este numele imaginii încărcat e, iar al doilea determină informația de
culoare preluată, pentru alb -negru se folosește 0 și pentru color se folosește 1. Această
funcție trebuie stocată într -o variabilă, spre exemplu:
img=cv2.imread(‘imagine.jpg’,1)
• cv2.imshow(‘imagine’, img) – funcția folosită pentru vizualizarea unei imagini.
Primul parametru definește numele ferestrei în c are va fi afișată imaginea, iar al doilea
parametru specifică variabil a în care este stocată imaginea ce se dorește a fi afișată .
• cv2.imwrite(‘imagine.png’, img) – funcție folosită pentru salvarea imaginilor în
directorul curent. Primul argument este numel e cu care va fi salvată imaginea, iar al
doilea parametru este sursa i maginii, sau variabila în care este aceasta stocată.
• cv2.VideoCapture(0) – funcție folosită pentru captura continuă de imagine.
Argumentul acestei funcții reprezintă camera de la care se preiau imaginile, acesta
fiind 0, se perc ep imaginile de la o cameră integrată.
• Funcții de desen : cv2.line(), cv2.circle(), cv2.rectangle, cv2.elipse(), cv.putText().
Aceste funcții oferă posibilitatea de a plasa obiecte grafice peste imagini cum ar fi
linii, dreptunghiuri, cercuri, elipse și te xt. De obicei aceste funcții au următorii
parametrii: imagine pe care se lucrează, coordonatele punctelor cheie, culoarea liniei
formei de senate și grosimea acesteia. Aceste funcții sunt folosite pentru evidențierea
anumitor zone din imagine.

• cv2.blur(img, (5,5)) – funcție folosită p entru estomparea imaginilor și netezirea
marginilor ascuțite. Această funcție este folosită pentru preprocesarea imaginilor
deoarece face mai ușoară detecția de forme. Primul parametru este imagine pe care se
lucrează, iar al do ilea parametru reprezintă mă rimea matricei nucleului, lucru care se
poate traduce în mărimea matric ei de pixeli care ia culoarea mediei culorilor tuturor
pixelilor din ea. Această funcție este folosită d e multe ori în pereche cu
cv2.GaussianBlur() care are ca scop eliminarea zgomot ului gaussian din imagini.
• cv2.Canny(img, 100, 200) – Această funcție reprezintă una dintre funcțiile cheie
pentru funcționarea algoritmului care testează dacă un anume loc este liber în parcare.
Ca și în cazul celorlalte fun cții, primul parametru repre zintă imaginea pe care se fac
modificări, iar parametri 2 si 3 reprezintă limitele inferioare și superioare pentru
diferența de culoare între pixeli. Figură 12. Exemplu pentru funcția cv2.blur și cv2.GaussianBlur
Figură 13. Exemplu pentru funcția cv2.Canny

• cv2.HoughLinesP() – Această funcție are capabilitatea de a detecta liniile dintr -o
imagine. Rezultatul acesteia este definit printr -o lista de forma (x1,y1), (x2,y2) unde
x1 și y1 reprezintă coordonatele unde începe o linie, iar x2 și y2 reprezintă
coordon atele unde se termină această linie. Cu ajutorul acestor coordonate, linii le
detectate în imaginea ori ginală pot fi reconstruite pe o altă imagine goală. Pe lângă
parametrul clasic legat de imaginea pe care se efectuează prelucrarea, această funcție
dispun e de doi parametri pentru sensiblitate. Primul dintre aceștia este numit d eseori
minLineLength și are rolul de a impune lungimea minimă a unei linii pentru ca aceasta
să fie luată în considerare la detecție. Această impunere împiedică detectarea detaliilor
din imagine ca și linii. Al doilea parametru se numește deseori maxLineGa p și impune
o distanță maxim ă între liniile detectate. Acesta impiedică detecția mai multor linii în
locul unei linii mai groase.

• cv2.HoughCircles() – Această funcție îndeplinește r olul de a detecta cercurile
dintr -o imagine. Rezultatul este o listă ce co nține coordonatele centrului cercurilor
și raza acestora. Cu aceste coordonate și cu funcțiile de desen se pot evidenția
cercurile detectate în imagini. De asemenea este prima funcți e din această lucrare
ce folosește ca parametru o altă funcție a modulului OpenCV, și anume
cv2.HOUGH_ GRADIENT. Funcția cv2.HOUGH_GRADIENT furnizează
informațiile despre gradientul marginilor cercurilor funcției cv2.HoughCircles().
La fel ca și cv2.HoughLi nesP(), funcția cv2.HoughCircles() are câțiva parametri
de sensibilitate. Cei mai relevanți dintre ace știa sunt: Figură 14. Exemplu pentru funcția cv2.HoughLi nesP

o param2 este un parametru ce definește sensibilitate detectorului propriu zis
de cercuri, cu cât mai mic, cu atât mai multe cercuri vor fi dete ctate, însă
dacă acesta are o valoare prea mare nu va fi detectat niciun c erc.
o minRadius și maxRadiu s sunt doi parametri importanți în situațiile când
știm aproximativ care este raza cercurilor pe care vrem să le detectăm.
Parametrul minRadius împiedică detecția cercurilor cu raza mai mică decât
valoarea acestuia, iar maxRadiu s împie dică detecția cercuri lor cu raza mai
mare decât valoarea acestui parametru. Practic, acești doi parametri pot fi
văzuți ca doua capete de interval în care se încadrează valorile razelor
cercurilor ce dorim să fie detectate.

• cv2.selectROI(img) – Această funcție oferă flexibi litate selectării unei regiuni de
interes cu ajutorul mouseului . Singurul parametru pe care îl primește este imaginea
pe care se dorește prelucrarea. Rezultatul funcției este definit prin 4 valori și
anume: punctul de coordonate x, punctul de coordonate y, lățimea și înălțimea
regiunii date. Această regiune se poate reconstrui ca o nouă imagine folosind
datele returnate de funcție.
Figură 15. Exemplu funcția c2.HoughCircles

Funcții le amintite mai sus au fost printre cele mai importante în realizarea acestei
aplicații. De sigur modulul OpenCV conține mult mai multe funcții decât cele amintite și chiar
s-au folosit mai multe funcții din acest modul în dezvoltarea acestei aplicații, îns ă cele
amintite mai sus sunt cele care au contat cel mai mult.

Cap 6. P roiectarea aplica ției

În fazele inițiale ale acestei aplicații nu știam exact ce va fi, nu știam metodele
necesare pentru dezvoltarea algoritmului sau cum funcționează Raspberry Pi sau de ce era în
stare. După câteva ore de navigat pe internet au început să apară idei, a cestea fiind inspirate
din alt e proiecte asemănătoare realizate în jurul lumii , astfel a început s ă se formeze un
schelet, deș i nu știam încă ce algori tmi v-a rula, unde vor fi transmise imaginile, sau dacă va
funcționa abordarea aleasă.

Figură 19. Scheletul aplicației
Figură 18. Exemplu pentru funcția cv2.selectROI

După prima impresie despre cum ar trebui să arate aplicația de față am început să învăț
să lucrez cu limbajul de programare Python și modulul OpenCV. Acest lucru a fost puțin
dificil la început, nefiind familiar cu sintaxa limbajului Python, d ar mai ales cu conceptele
legate de Computer Vision .
În procesul de învățare și înțe legere al conceptelor de Computer Vision m -am
concentrat pe ceea ce era necesar pentru dezvoltarea acestei aplicații, ulterior am aut la
dispoziț ie și un Raspberry Pi Zer o W pentru care am început să urmez cursuri pentru
utilizarea acestui calculator.

Cap 7. Dezvoltarea aplicației

Dezvoltarea acestei aplicații a constat în mai multe etape care vor fi enumerate în
rândurile ce urmează. Prima etapă a dezvoltării a constat în conceperea algoritmului, aceasta
fiind urmată de configurarea Raspberry P i-ului pentru a transmite și a afișa imaginil e preluate
de cameră pe un IP local.

Cap 7.1 Dezvoltarea algoritmilor

În primă fază am început să dezvolt algoritmul pentru testare a disponibilității unui loc
de parcare. Fazele dezvoltării acestui algoritm s unt următoarele:
1. Încărcarea unei imagini reprezentative:
img= cv2.imread(‘parking.jpg’,1)
2. Inițierea funcției de selecție a regiunii de interes:
r= cv2.selectROI (img)
3. Formarea por țiunii din imagine selectată de funcția ROI:
sub_img= [int(r[1]):int(r[1]+r[3 ]), int(r[0]):int(r[0]+r[2])]
4. Evidențierea muchiilor din sub_img:
edg= cv2.Canny(sub_img,100,150)
5. Obținerea numărului de pi xeli din edg:
pix=cv2.countNonZero(edg)
6. Validarea loculu i ca liber sau ocupat:
if pix>1500:
#desenează un dreptunghi roșu dacă numărul de pixeli este mai mare de
1500

cv2.rectangle(im, (int(r[0]), int(r[1])), (int(r[0] + r[2]), int(r[1] + r[3])), (0,
0, 255), 3)
else:
#desene ază un dreptunghi verde dacă numărul de pixeli este mai mic de
1500
cv2.rectangle(im, (int(r[0]), int(r[1])), (int(r[0] + r[2]), int(r[1] + r[3])), (0,
255 , 0), 3)
7. În final se afișează imaginea imaginea cu dreptunghiurile roșii sau ve rzi și
numă rul de dreptunghiuri verzi, acesta reprezentând numărul de locuri libere
de parcare.
După finalizarea a cestui algoritm și o analiză amănunțită din punct de vedere al
utilizatorului final am constatat că procedeul de a selecta fiecare loc în parte este un
inconvenient ce poate fi eliminat prin metode de detec ție automată a locurilor de parcare.
Prima abordare a acestei probleme a fost prin încercarea de a detecta colțurile fiecărui
loc de parcare, stocarea coordonatelor și folosirea acestora pentru a trasa dreptunghiurile verzi
sau roșii. Această metodă a fos t reprodusă în următoarele linii de cod.
1. Încărcarea imaginii :
img= cv2.imread(‘parkinglot.jpg’,1)
2. Conversia imaginii în alb -negru:
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
3. Evidențieria muchiilor din imagine:
edg= cv2.Canny(sub_img,100,150)
Figură 20. Rezultatul algoritmului de testare a locurilor de parcare

4. Detecția lini ilor din imagine:
lines =
cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength=0,maxLineGap=3)
5. Desenarea liniilor pe o imagine neagră
contours=np.zeros((height, width,3),np.uint8)
for line in lines:
x1,y1,x2,y2 = line[0]
cv2.line(contours,(x1,y1), (x2,y2),255,2)
6. Detecția colțurilor
corners= cv2.cornerHarris(gray,2,3,0.04)
corners= cv2.dilate(corners, None)
7. Evidențierea colțurilor în culoarea roșu
img[corners>0.01*corners.max() ]= [0, 0, 255]
Deși această metodă părea la început o soluție reală as upra problemei, s -a dovedit a fi
greșită , deo arece d upa cum se poate observa în imaginea de mai sus , detecția colțurilor nu este
foarte precisă și returnează rezultate fals-pozitive . Colțurile detectate la capetele îmbinările și
capetele liniilor ar fi fost perfecte ca ac eastă aplicație să funcționeze, însă colțurile detectate
de-a lungul liniilor dau peste cap algoritmul prin returnarea de coordonate greșite, care nu s -ar
fi potrivit cu operațiile ce ar fi trebuit aplicate pentru a testa dacă locul este disponibil sau nu.
O altă abordare pentru detecția automată a locurilor de parcare, și totodată a
disponibilități acestora o reprezintă detecția unor cercuri plasate între liniile locurilor de
parcare. D esigur, este un sacrificiu ce trebuie făcut și anume desenarea de cerc uri pe fiecare
loc de parcare însă aduce un avantaj considerabil față de metoda anterioară. În următoarele
rânduri voi explica algoritmul ce detectează cercurile de pe locurile de parcar e și afișează
numărul de locuri libere.
1. Încărcarea im aginii și prelucrare a acesteia pentru rezultate optime
img= cv2.imread(‘circles.jpg’,1)
img= cv2.medianBlur(img, 1)
Figu ră 21. Rezultatul detecției de colțuri suprapus cu detecția de linii

cimg= cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
l=0
2. Detectarea de cercuri:
circles = cv2.Ho ughCircles(img, cv2.HOUGH_GRADIENT, 0.5, 100,
param1= 50, param2=40, minRadius=20, maxRadius=30)
3. Încadrarea coordonatelor cercurilor găsite pe o imagine neagră:
circles = np.ui nt16(np.around(circles))
4. Reprezentarea cercurilor pe o imaginea inițială și incre mentarea variabilei care
returnează numărul de locuri libere:
for i in circles[0,:]:
x, y, r= i[0], i[1], i[2]
cv2.circle(cimg, (x, y), r, (0,0,255) ,2)
l+=1
5. Afișa rea rezultatului și a numărului de locuri libere:
cv2.putText(cimg, "locuri liber e: {}".format(str(l)),(10,950), font,
2,(0,255,0),3,c v2.LINE_AA)
cv2.imshow('Original',img)
cv2.imshow('Circles',cimg)
Figură 16. Rezultatul algo ritmului pentru detecția automată a loc urilor de parcare

Desigur, toți acești algoritmi au fost dezvoltați pentru o imagine. Având în vedere că
această aplicație este bazată pe o transmisie în timp real, acești algoritmi se aplică pentru
fiecare cadru of erit de camera. Pentru a nu utiliza resurse într -un mod neeficient, am setat
numărul de cadre pe secundă transmise la 2, sau un cadru la fiecare 500ms, în locul celui
standard de 30 cadre pe secundă .

Cap 7.2. Configurarea Raspberry Pi -ului pe ntru transmi sia live

După instalarea sistemului de operare Raspbian, Raspberry Pi -ul este gata pentru a
începe configurarea acestuia. Înainte de toate, acesta trebuie seta t să accepte modulul camera.
Următoarele comenzi au rolul de a face Raspberry Pi -ul să transmită imaginile capturate de
cameră live pe un IP local:
1. sudo apt -get install motion – Această comandă va instala software -ul necesar
transmisiunii live.
2. sudo nano /etc/motion/motion.conf – Aceast ă comandă deschide fișierul de
configurare al softwar eului unde trebuie schimbați anumiți parametri:
a. daemon – trebuie setat pe ON
b. framerate – trebuie setată o valoare cât mai mare (ex: 100)
c. Stream_port – alegeți port -ul pe care se vor transmite imaginile ( 8081 e
prestabilit)
d. Stream_qualty – la fel ca la fram erate, o valoare cât mai mare (ex: 100)
e. Stream_localhost – trebuie setat pe OFF
f. webcontrol_localhost – trebuie setat pe OFF
g. quality – setat pe 100
h. width – setat pe 640
i. height – setat pe 480
j. post_capture – setat pe 5
3. sudo nano /etc/default.motion – În fișie rul deschis de această comandă trebuie
doar setat parametrul „start_motion_daemon” pe „yes”.
4. sudo service motion start – Comanda pentru pornirea transmisiei live
5. În browser, la adresa 192.168.1.4:8081 s e pot vedea imaginile provenite de la
Raspberry Pi. A dresa menționată diferă între modelele de Raspberry Pi și
conexiunea la internet.

Cap 8. Testarea aplicației

Pentru testarea aplicației am folosit o platformă asemănătoare unei parcări cu 8 locuri
de parcare. Această platformă a fost realizată dintr -o cutie de carton, iar la baza acesteia am
așezat una dintre pozele folosite pentru dezvoltarea algoritmilor.
Testarea s -a făcut din punct de vedere al funcționalității , în anumite condiții și pe
transmis ie în timp real. Desigur, performanțele unor algoritm i au scăzut în momentul în care
nu au mai fost aplicați pe o singură imagine, ci pe 2 imagini pe secundă.
Am început prin testarea algoritmului de detecție a cercurilor. După multiple teste
concluzi a la care am ajuns este că, deși ar fi o soluție prom ițătoare pentru detecția automată a
locurilor de parcare, această soluție nu este deloc stabilă , deoarece indiferent de val orile
parametrilor sunt detectate mai multe sau mai puține cercuri decât cele ex istente.
În poza din stânga s-a ales sensibilitatea detecției cercurilor relativ mică și de asta sunt
atât de multe cercuri, însă și în cazul unei sensibilități ridicate, sunt detectate cercuri care nu
există.

Figură 18. Rezultatul alg oritmului de detecție a cercurilor cu
sensibilitate mică
Figură 17. Rezultatul algoritmului de detecție a cercurilor cu
sensibilitate mare

Pe lângă rezultatele eronate, acest algo ritm are și probleme din punctul de vedere al
distanței dintre cerc și camera, în sensul că detectează doar cercurile aflate aproape de cameră.
O alt ă problemă ar fi reflexia luminii, spre exemplu dacă lumina bate puternic peste anumite
cercuri, acestea nu vor fi detectate.
Testarea algoritmului în care se oferă co ordonatele locului de parcare și este testată
valabilitatea acestuia presupune verificarea algoritmului în condiții de lumină scăzută și caz uri
în care altceva decât o mașină este pe locul punct at de coordonatele date.
După primele teste am constatat că acest algoritm are o rată mai bună de succes față de
algoritmul p entru detecția cercurilor.
Figură 19. Detecția cercurilor în lumină pu ternică
Figură 20. Rezu ltatul algoritmului de detecție

După ajustarea parametrilor necesari detecției, am obținut următoarul rezultat. În
figura preceden tă se poate observa că algoritmul nu este atât de sensibil înc ât să confunde un
pieton cu o mașină, prin urmare locurile de parcare traversate de pietoni, nu vor fi văzute ca și
ocupate.
În cazul unei lumini puternice, ca în figura precedentă, acest alg oritm generează
rezultate eronate, dar semnificativ mai puține decât algoritmul de detecție a cercurilor.
În cazul în care lumina nu este suficientă, algoritmul va g enera un rezultat eronat în
proporție de 100%. Acest lucru se întâmplă din aceleași motive pentru care nici ochiul uman
nu ar putea testa valabilitatea unui loc de parcare în timpul nopții și anume lipsa informației
vizuale. Desigur, ochiul uman ar putea r ealiza testarea valabilității unui loc de parcare în
figura de mai sus, însă principiul ce se aplică în aceasta nu are nicio legătură cu algoritmul sau
reglarea parametrilor , ci cu felul în care sunt procesate imaginile.
Figură 27. Rezultatul al goritmului de detecție în condiții de lumină puternică
Figură 28. Rezultatul algoritmului de detecție în co ndiții de lumină slabă

În continuare voi încerca să pun în evidență principalele avantaje și dezavan taje ale
acestor doi algoritmi.
Capabilitate Algoritm detecție loc prin
coordonate Algoritm detecție loc prin
detecție cerc
Detecție automată a locului
de parcare Nu Da
Detecție în condiții de lumină
slabă Nu Nu
Detecție în condiții de lumină
puternică Parțial Parțial
Detecează mai multe locuri
de parcare Nu Da
Detectează mai puține locuri
de parcare Nu Da
Oferă rezultate corecte în
condiții optime Da Nu
Oferă rezultate stabile Da Nu
Necesită modificări de
infrastructură Nu Da
Pietonii pot influența
rezultatul Nu Da
Necesită ajustarea
parametri ilor înainte de
utilizare Da Da
Tabel 3. Compararea celor doi algoritmi de detecție a locurilor de parcare
Cap 9. Concluzii

În urma realizării acestei lucrări mi -am dat seama că p rocesarea de imagini are un rol
din ce în ce mai important în domeniile în care se aplică , iar t ema aleasă este una de interes
general în care abordările alese pot fi multiple. Desigur, fiecare abordare are avantajele și
dezavantaj ele ei, însă fiecare își î ndeplinește scopul.
Consider că cea mai bună metodă de abordare ale aces tei probleme este algoritmul de
detecție a valabilității unui loc de pa rcare prezentat în Cap7. Dezvoltarea aplicației. Această
metodă, deși presupune selecția manuală a fiecărui loc de parcare, oferă un rezultat precis și
corect asupra valabilității locur ilor de parcare , față de soluția de a detecta cercuri pe suprafața
fiecărui loc de parcare. Motivul principal pentru care acea soluție nu mi se pare realizabilă

este deoarece depinde foarte mult de imagin e, în sensul că putem regla parametri pentru a
realiza soluția pentru o imagine statică, însă în cazul în care avem 30, 25, sau chiar 2 imagini
pe secundă, acești parametri ar trebui reglați de fiecare dată, ceea ce nu reprezintă o soluție
momentan.
Soluția prezentată în această lucrare , și anume algoritmul de a detecta valabilitatea
unui loc de parcare încadrat în niște anume coordonate, are avantajul de a oferi un rezultat clar
și concis asupra valabilității unuia sau mai multor locuri de parcare, însă are și dezavanta jul
de a oferi rezultate eronate în ca zul mișcării camerei . Desigur, la fel ca celelalte aplicații
bazate pe Computer Vision, nu poate oferi un rezultat pe timp de noapte sau dacă un alt obiect
obturează viziunea camerei. Această soluție mi se pare realizabilă deoarece oferă un rezultat
bun, i ar singurul dezavantaj major poate fi depășit cu reconfigurări periodice.
Pentr u utilizarea acestei aplicații, în primul rând trebuie să dispunem de o conexiune la
internet, mai apoi să pornim Raspberry Pi -ul pentru a avea imaginile necesare, iar în final să
trasăm manual fiecare regiune de interes apoi să lăsăm aplicația să -și facă treaba.
Deși acest tip de aplicație nu este cel mai performant când vine vorba despre
valabilitatea locurilor de parcare, pot spune că este printre cele mai ieftine și abordabil e
soluții. Cred aceste lucruri deoarece nu este nevoie de modificări majore în cadr ul
infrastructurii pentru a funcționa, iar prețul componentelor cu care poate fi realizat este unul
aproape inexistent pen tru o instituție sau un oraș ce dorește să dispună de o astfel de dotare

Bibliogr afie

[1] H. SUNDMAEKER, Cluster of European Research Project s on the Internet of Things,
Luxembourg:: Publications Office of the European Union, 2010.
[2] A. Z. a. N . B. a. A. C. a. L. V. a. M. Zorzi, „Internet of Thi ngs for Smart Cities,” IEEE Internet
of Things Journal, vol. 1, nr. 1, pp. 22 -32, 2014.
[3] „CityOS,” [Interactiv]. Available: https://cityos.io/Worlds -Best-City-Projects -for-Smart –
Parking. [Accesat 05 06 2018].
[4] „http://www.constructionweekonline. com,” [Interactiv]. Available:
http://www.constructionweekonline.com/article -43175 -first-phase -of-dubai -public -smart –
parking -compl ete/. [Accesat 13 06 2018].
[5] C. Lyons, „http://novadigitalmedia.com,” [Interactiv]. Available:
http://novadigitalmedia.co m/history -raspberry -pi/. [Accesat 11 06 2018].
[6] E. UPTON și G. HALFACREE, Meet the Raspberr y Pi, New Jersey: John Wiley & Son s, 2012.
[7] S. MONK, Raspberry Pi cookbook: Software and hardware problems and solutions, Sebastopol,
CA: O'Reilly Media, Inc., 2016.
[8] „https://www.raspberrypi.org,” [Interactiv]. Available: https://www.raspberry pi.org/magpi/pi –
zero-w/. [Accesat 10 06 2018].
[9] W. HARRINGTON, Learning Raspbian, Birmingham, UK: Packt Publishing Ltd, 2015.
[10] „GitHub,” [Interactiv ]. Available: https://github.com/ccrisan/motioneyeos/wiki. [Accesat 10 06
2018].
[11] S. Wood, „https://hub.packtpub.com,” 14 10 2015. [Interactiv]. Available:
https://hub.packtpub.com/brief -history -python/. [Accesat 10 06 2018].
[12] G. VAN ROSSUM și F. L. DRAKE, An introduction to Python, Bristol: Network Theory Ltd.,
2003.
[13] B. Marian, „ https://www.cv.upt.ro,” [Interactiv]. Available:
https://cv.upt.ro/pluginfile.php/145366/mod_resource/content/5/C1.%20Limbajul%20de%20pro
gramare%20Ptyhon.pdf. [ Accesat 12 6 2018].

[14] R. SZELISKI, Computer vision: algorithms and applications, Springer S cience & Business
Media, 2010.
[15] M. d. M. F. C. N. V. E. G. B. G. I. S. G. J. A. P. I. J. S. T. De Oscar Deniz Suarez, OpenCV
Essentials, Birmingham: Pack t Publishing Ltd., 2014.
[16] „https://lectronichub.com,” [Interactiv]. [Accesat 07 05 2018].
[17] „https://www.wmaker.net,” [Interactiv]. Available:
https://www.wmaker.net/einstein2a/Raspberry -pi-Zero_a87.html. [Accesat 07 06 2018].
[18] „https://s hahsparx.me,” [Interactiv]. Available: https://shahsparx.me/edge -detection -opencv –
python -video -image/. [Accesat 13 06 2018].
[19] „https://www.mathworks.com/,” [Interactiv]. [Accesat 13 06 2018].

Similar Posts