Documente Academic
Documente Profesional
Documente Cultură
Iasi
2016
Iasi
2016
Cuprins:
Capitolul 1: Introducere .. 4
Capitolul 2: Computer Vision . 5
2.1 Definirea Computer Vision? . 5
2.2 Domenii nrudite.... 6
2.3 Aplicaii n C.V. .... 8
2.4 Metodele de sistem C.V. ... 11
Capitolul 3: OpenCV .. 12
3.1 Definirea OpenCV? . 12
3.2 Istoria OpenCV ... 12
3.3 Limbaje de programare . 13
Capitolul 4: IDE-urile .. 17
4.1 Definirea IDE? .. 17
4.2 Istoria IDE . 18
4.3 Clasificarea IDE ..... 20
Capitolul 5: Implementarea human-detection ... 21
5.1 Instalarea librriei OpenCV pe sistemul de operare Linux 21
5.2 Instalarea librriei OpenCV pe sistemul de operare Windows .. 23
5.3 Setarea IDE-ului pentru sistemul de operare Linux ... 23
Capitolul 6: Bibliografie .... 25
Introducere
Computer vision este un domeniu n care se includ metode pentru a obine, analiza, procesa i
nelege imaginile n general date de dimensiuni mari din lumea real pentru a le transforma
numeric sau informativ de tip simbolic. Tema acestui domeniu fiind defapt transformarea sau
duplicarea vederii omului ntr-un sistem neles de componente electronice (calculatoare,
telefoane mobile), prin urmare se pot interpreta obiectele din lumea real de catre aceste
componente.
Am ales acest domeniu ca i tem de lucru deoarece tot timpul va fi loc de mbuntire, nici
una din aplicaiile deja existente nu au precizie sut la sut la procesarea pozelor sau
videoclipurilor, dei tind spre procente din ce n ce mai mari. Este un domeniu captivant i cu
multe aplicaii practice din toate domeniile de lucru, pot exemplifica unele din aceste domenii:
Securitate n anumite magazine, supermarket-uri sau chiar i la locuine montarea unei simple
camere de filmat legate de un pc sau un server poate duce la depistarea posibililor infractori sau
accidente cum ar fi incedii sau inundaii, serverul mai departe avertiznd proprietarul printr-un
mail sau sms de aciunea n desfurare.
Transport auto Monitorizarea mainilor care ntrec limitele de vitez sau circul
neregulamentar, un software poate fi fcut pentru a capta numerele de nmatriculare ale acestora.
3
Industrie Automatizarea unei linii de producie ntr-o fabric cu roboi simpli care au un
software de computer vision ce permite depistarea unor defeciuni n piesele ce se produc, sau un
program care din nou, cu nite camere de filmat montate la intrarea n firm poate depista fiecare
muncitor ce intr sau iese, eliminnd cu totul pontajul ca atare.
Robotic Construirea unor drone cu software-uri simple de computer vision care au ca scop
nelegerea mediului nconjurtor, pentru ca drona s poat naviga mai eficient( ex: n aer sau pe
uscat).
Multimedia Pe site-urile de socializare unul dintre cele mai recunoscute aspecte ar fi face
recognition-ul din poze sau videoclipuri, care este la fel un software bazat pe algoritmii din
computer vision.
Din puinele aplicaii practice enumerate, se pot vedea nbuntiri n viaa de zi cu zi sau
eficiena n timp i costuri n industrie datorita folosirii unora dintre aceste software-uri.
Capitolul 2:
Computer Vision
2.1
Computer vision este un domeniu n care se includ metode pentru a obine, analiza, procesa i
nelege imaginile n general date de dimensiuni mari din lumea real pentru a le transforma
numeric sau informativ de tip simbolic. Tema acestui domeniu fiind defapt transformarea sau
duplicarea vederii omului ntr-un sistem neles de componente electronice (calculatoare,
telefoane mobile), prin urmare se pot interpreta obiectele din lumea real de ctre aceste
componente.
Interpretarea imaginilor poate fi caracterizat de decodarea blocurilor de informaie simbolic
din datele din imagini cu ajutorul unor module de geometrie, trigonometrie, fizic, statistic i
teoria nvrii.
Computer vision ar putea fi descris i ca o platform pentru automatizarea i integrarea unui
numr mare de procese i reprezentri pentru percepia vizual.
Ca i disciplin teoretic computer vision prescurtat i C.V. are ca i scop cercetarea teoriilor n
spatele sistemelor artificiale c extrag informaiile i datele din imagini. Datele de imagine pot
lua multe forme de exemplu: secvene video de tip videoclip sau film, vederi din camera de
filmat multiple, poze sau wallpaper-uri, date multidimensionale din aparaturile de tip medical sau
din domeniul industrial, scanner. Sub-domeniile ale C.V. include detectarea de evenimente,
reconstrucia scenelor, track-ing video, detectarea obiectelor din scen, nvarea, indexarea,
estimarea micrilor i aciunilor fizice, estimarea vitezelor i acceleraiilor obiectelor din scen,
rotaia i transformarea imaginilor.
n imaginea de mai jos se poate observa un software care extrage cteva tipuri de obiecte dintrun cadru.
2.2
Domenii nrudite
vision care ncearc s construiasc sisteme de module care s replice sau s reproduc
comportamentul unui sistem biologic. Putem numerota unele din aceste module care au avut
rdcini n neuro-biologie: neurat net, deep learning bazat pe imagini i analiza si clasificarea.
Un alt domeniu nrudit ar fi procesarea semnalelor. Multe metode pentru procesarea
semnalelor, deobicei semnalele temporale sau semnalele de o variabil, pot fi extinse pn la
semnalele de dou variabile. Acesta este din nou un sub-domeniu n computer vision.
Pe lng domeniile menionate mai sus, multe dintre studiile i modulele din computer vision
pot fi descrise ca fiind pur matematice. De exemplu multe metode se bazeaz pe statistic,
optimizare sau geometrie. O mare parte din acest domeniu este devotat nspre implementarea
aspectelor n computer vision; cum metodele existente pot fi realizate n diferite combinaii de tip
software sau hardware; sau cum aceste metode pot s beneficieze de viteza de procesare mai
ridicat fr s piard performan.
Aceste domenii sunt n strns legtur cu computer vision dei cele mai apropiate
caracteristici fiind, procesarea imaginilor i analiza lor. Sunt distane diferite din fiecare domeniu
fa de computer vision i tehnicile care acoper cererile din fiecare domeniu. Computer vision
n anumite feluri este inversul graficii de calculator sau computer graphics. n timp ce grafica de
calculator produce imagini din modele 3D, computer vision produce modele 3D din imagini.
Deasemenea este i un domeniu de mijloc ntre cele dou, un domeniu mai nou aparut numit
augmented reality.
n imaginea de mai jos este prezentat o schi grafic a fiecrui domeniu i nrudirea sa cu
computer vision, fiecare domeniu principal este ncercuit iar lng el este un subdomeniu:
Unul din cele mai proeminente domenii enumerate este domeniul medical, unde computer
vision are rolul de a procesa i analiza imaginile cu date medicale pentru a extrage un diagnostic
pentru diferii pacieni. Din acest domeniu datele procesate sunt date de ctre: imagini
9
2.4
Organizarea acestor metode este dependena de tipul de aplicaie prezentat. Unele aplicaii sunt
de tip stand-alone care rezolv problemele de msurtoare sau detecie. Totui putem enumera
cteva metode tipice prezente n majoritatea aplicaiilor de computer vision:
Pregtirea imaginii: O poz digital este produs de unul sau mai muli senzori vizuali,
depinznd de modelul de sensor, rezultatul este o imagine de tip 2D, o imagine de tip 3D sau o
secven de imagini. Pixelii imaginilor depind de intensitatea luminii i spectrul de culori (alb
negru, color, infra-rosu).
Detecia sau segmentarea
Preprocesarea
Extragerea de caracteristici
Procesare high-level
Luarea deciziilor sau determinarea pasului urmtor
Capitolul 3
Open C.V.
3.1 Definirea Open C.V.
OpenCV este o librrie de funcii n programare care au ca i scop computer visionul ca
domeniu procesat n timp real. Librria a fost creat de ctre corporaia Intel la centrul de
cercetare Nizhny Novgorod din Rusia, mai trziu fiind suportat de Willow Garage i n prezent
deinut de Itseez. Librria este distribuit gratis sub liciena BSD i este valabil pe mai multe
platforme: Windows, Mac, Linux, Solaris etc. Librria OpenCV a fost scrisa n limbajul C++,
dei extensii ale sale se pot gsi scrise i n alte limbaje, coninutul principal al librriei precum i
coninutul suportat este scris integral n C++.
Proiectul OpenCV a fost lansat iniial de ctre Intel Research n 1999 cu iniiative de a profita
de avantajele CPU-ului pentru aplicaii intensive, o parte din proiect fiind axat pe tracing realtime i display 3D. Principalii contribuitori ai proiectului printre care s-au inclus un numr de
experi n optimizri mpreun cu echipa de performan i teste de la Intel.
n primele zile dup lansare, scopurile proiectului au fost descrise ca:
Viziune avansat nu doar open-source ci i cod optimizat.
Aplicabilitate comercial bazat pe viziunea avansat, fcndu-le portabile i de maxim
performan.
Oferta de a avea o librarie stabil, complet i pe mai multe platforme pe care
programatorii s o poat folosi n scop open-source.
C++ Istoric:
n 1979 Bjarne Stroupstrup, un inginer programator danez, a nceput s lucreze la un
predecesor al C++-ului, C with classes == C cu clase. Motivaia sa pentru a crea un nou
limbaj a provenit din experiena sa n programare pentru teza sa de doctorat. Stoupstroup a
neles c limbajul de programare Simula, avea caliti benefice developmentului de software
industrial i de scara mai mare, dar limbajul a fost prea ncet pentru aplicaii practice. Pe de alt
parte limbajul BCPL a fost foarte rapid n compilare dar a fost prea low-lever pentru aplicaiile
de zi cu zi. Prin urmare ca i referin el a ales limbajul C pentru c este un limbaj general,
rapid, portabil i folosit foarte mult, dei C++ a avut influene i din Simula i din C a mai
fost influenat i de: ALGOL, Ada, CLU i ML.
C++ Limbajul:
11
C++ motenete majoritatea sintaxelor de C, urmtorul cod de exemplu a fost scris de Bjarne
Stroupstrup ca fiind programul de Hello world care folosete librria standard de C++:
C++ obiectele:
C++ a introdus (OOP) orientarea pe obiecte n C. El ofer clase, care asigur 4 caracteristici
prezente n OOP (i chiar i limbajelor non OOP): Abstracia, Encapsularea, Motenirea i
Polymorphismul. O caracteristic distinct n clasele de C++ comparat cu alte limbaje este
suportul de destructori deterministici.
Unul dintre cele mai importante lucruri n software development la nceperea unui proiect nou
este structura sa de baz. S presupunem c se cere un proiect nou de tip client, care pe viitor va
putea avea nite module suplimentare. Pentru implementarea acestor module la momentul
respectiv, structura proiectului trebuie s fie bine definit ca programatorul sau programatorii s
poat nelege cum merge i cum este gndit aplicaia principal pentru a ncepe lucrarea la
extensii.
O structur de baz a unui proiect C++ (sau a unui proiect general pentru limbajele compilate :
Java, C#, Objective-C) are urmtoarele tipuri de foldere sau directoare:
Build: Acest folder conine majoritatea obiectelor, i este n general supus metodei
clean la sfritul compilrii.
12
Python:
Python este un limbaj de programare high-level, interpretat, cu scop general i dinamic.
Design-ul lui de baz fiind uurina de a citi i a scrie codul n sine de ctre programatori,
pentru a exprima coninutul sau codul n cat mai puine lini i cat mai coerent. Limbajul n sine
este mai lent dect limbajele compilate, i codul se compileaz cu ajutorul unui interpretor care
transform codul de Python n cod main, de aceea tipul de limbaj este interpretat. Alte exemple
de limbaje interpretate des ntlnite sunt (PHP: cu care a fost scris Facebook i platforma
Wikipedia, Ruby: cu care a fost scris Twitter).
Interpretoarele de Python sunt distribuite pe mai multe platforme, cele mai cunoscute fiind:
Linux, Mac i Windows, permind ca Python s mearg pe mai multe sisteme. Exist i mai
multe tipuri de tool-uri care permit s creeze kit-uri de instalare pentru platformele respective
(Py2exe: permite s exporte proiectul de Python ca i installer pentru windows).
Python istoric:
Python a nceput s fie construit n anii 1980, i a fost implementat ca i limbaj integral n
decembrie 1989 de ctre programatorul Guido von Rossum la Centrul de Informatica Wiskunde
din Olanda. n 16 octombrie 2000 a aprut Python 2.0 ca i un realease major, incluznd
procedee cum ar fi cycle-detecting, garbage collector i support Unicode. In 3 decembrie 2008 a
aprut Python 3.0 ca fiind un limbaj incompatibil cu 2.0. n prezent cele dou limbaje sunt
aproape similare n sintax dar official nu exist support pentru cross-compatibilitate.
Python caracteristici:
Unul dintre cele mai importante aspecte ale limbajului sunt uurina de a citi codul n sine,
chiar i pentru oameni care nu au cunotine tehnice sau n domeniul programrii pot nelege
parial codul n sine. Alte caracteristici menionate i n documentaie:
-
13
Citirea conteaz
Python limbajul:
Fiind unul dintre cel mai simplu de citit i de scris ca i cod dintre limbaje, un program de
hello world ar fi scris ntr-o singur linie de print i exemplul ar arta aa:
Aplicaii:
Zonele de aplicabilitate cele mai mari ale librriei OpenC.V. sunt:
Robotica static sau mobil
nvmnt
Interaciunea om-calculator
Procesarea 2D i 3D
Segmentarea
Montion Tracking
14
Capitolul 4
IDE (Integrated Development Environment)
Un IDE sau Integrated Development Environment este o aplicaie software care ofer facilitate
programatorilor pentru development-ul software-ului. Un IDE de baz este conceput dintr-un
editor de code surs, un compilator sau interpretor (depinde de limbajul folosit), unelte de
automatizare a buildurilor i un debugger. Majoritatea IDE-urilor moderne au i autocomplete de
code i compilare de cod inteligent (compilarea inteligent este compilarea codului parial n
timp real pentru a depista erorile, fiind n timp real ele ofer programtorului date despre codul
surs n timp util).
Unele IDE-uri conin i compilator i interpretor n acelai timp (au suport multi-language de
ex: NetBeans sau Eclipse, ofer support pentru majoritatea limbajelor de programare modern, i
cele compilate i cele interpretate).
Alte IDE-uri nu conin deloc (de exemplu Lazarus care ofer suport strict pentru limbajul
Pascal sau SharpDevelop care ofer support strict pentru C#). Limitele ntre un IDE i altor tipuri
de unelte folosite pentru software development nu sunt bine definite. Cu alte cuvinte exist
editoare ce au integrat majoritatea tool-urilor folosite n industrie, sau ofer suport de tip plug-in
pentru majoritatea dintre ele (asta nseamn c IDE-ul este o aplicaie de baz cu strictul necesar,
iar aceasta se poate costumiza i pot fi adugate tool-uri adiionale).
n imaginea urmtoare este prezentat un IDE foarte folosit i foarte cunoscut numit Emacs.
15
IDE-urile au devenit posibile cnd development-ul din terminal sau consol a nceput. Primele
sisteme de operare nu au avut suport pentru un IDE complet, atunci programele erau pregtite cu
aa numitele flowcharts (se introduceau programele cu hrtie sau cu cartele programabile) nainte
de a le trimite la compilator, care urma s transforme aa numit cod n cod main. Dartmouth
BASIC a fost primul limbaj care a fost construit cu ajutorul unui IDE. IDE-ul respectiv a fost pe
tip de comand (n terminal cu comenzi de baz, de exemplu: copy sau paste care avea un alias)
care nu artau i nu funcionau ca i IDE-urile din present (care sunt IDE-uri grafice i
complexe), dei comenzile de baz erau similare cu unul modern.
Maestro I a fost un produs creat de Softlab Munich i a fost primul IDE conceput pentru
development de software. El a fost instalat pentru 22.000 de programatori n toat lumea.
Pn n 1989, 6000 de instalri au existat n Republica Federal Germania.
Maestro a fost un lider mondial n anii 1970 i 1980. Astzi Maestro I a ramas n Muzeul de
Informatic i Tehnologie n Arlington.
16
Primul IDE care a fost gndit pe noiunea de plug-in a fost Softbench, iar n martie 2015
printre cele mai populare IDE-uri au fost Eclipse, Netbeans, Visual Studio, Vim i Emacs.
n poza din stnga este prezentat Microsoft Visual Studio (n general folosit pentru
developmental aplicaiilor de .Net) iar n dreapta este prezentat Eclipse (n general folosit pentru
development de Java, Php, C++ i Ruby).
fiind un IDE care suport un anumit limbaj, PyCharm ofer suport Python iar RubyMine ofer
support Ruby).
Cele mai cunoscute IDE-uri moderne folosite n software development sunt:
1. CodeBlocks: Este un IDE folosit pentu development de C, C++ i Fortran i a fost conceput s
suporte mai muli utilizatori simultan.Ofer o interfa consistent, support pentru diferite teme i
culori, ofer suport plug-in-uri. Este un program de tip open source i este distribuit pe mai multe
sisteme de operare.
2. Eclipse: Multe framework-uri de development au fost construite pe Eclipse. Eclipse este un
editor open source distribuit gratis pentru mai multe sisteme de operare (Linux, Mac, Windows,
Solaris) i ofer support pentru majoritatea limbajelor orientate pe obiecte sau pe a limbajelor
modern (Java, PHP, C++, C#, Ruby). A fost iniial un proiect de Java cu o varietate mare de plugin-uri care i-au extins capabilitile considerabil. Are integrat suport git i cvs, are integrat un
sistem de setri pentru teme i culori.
3. VisualStudio: Ofer o larg varietate de editoare i module pentru development software
(module pentru deploy(pentru web, desktop, telefoane mobile, console de jocuri), module pentru
test, module pentru git i cvs). Limbajele suportate de VisualStudio n general sunt limbajele
de .Net(C#. VisualBasic, C++, ASPX, XML, Javascript) dar are i plug-in-uri care pot
implementa suport i pentru PHP, Ruby, Python etc. Este un proiect de tip closed source i este
distribuit i gratis dar i cu licien profesional pe platforma Windows exclusiv.
4. Xcode: Ofer o serie de tool-uri pentru development i deployment de aplicaii pentru mediul
Apple. Este integrat cu framework-urile Cocoa i Cocoa Touch pentru aplicaiile de Mac, IPhone
i IPad. Este un proiect de tip opensource i este distribuit gratis iniial pe platform de Mac, dar
se poate instala i pe Windows sau Linux dar nu cu toate tool-urile valabile
Capitolul 5:
Implementarea Human-Detection
Human-detection este unul dintre cele mai interesante i practice tipuri de aplicaii ce se pot
face cu ajutorul Computer Vision-ului. Cu ajutorului unei camere de filmat i a unui program se
pot depista n timp real (sau dintr-un videoclip sau chiar o poz static) oameni.
Pentru creerea unei aplicaii de OpenCV este necesar un calculator de tip PC sau Laptop pentru
a putea instala toate programele i librriile necesare i de un sistem de operare Windows sau
Linux funcional.
Petru development-ul aplicaiei care va fi demonstrat am ales un sistem de operare de tip
Linux deoarece o mare parte din librriile necesare se afl deja preinstalate pe majoritatea
distribuiilor de Linux. Voi prezenta un scurt tutorial de instalare i setare a librriei OpenCV pe
ambele sisteme de operare.
19
20
Capitolul 6
Bibliografie
Surse imagini:
https://en.wikipedia.org/wiki/Vehicular_automation#/media/File:The_ESA_Seeker_autonom
ous_rover_during_tests_at_Paranal.jpg
http://research.microsoft.com/en-US/projects/medimaging/brain_tumor.png
http://machinelearningsoftware.org/wp-content/uploads/2014/01/ID_2.jpg
https://en.wikipedia.org/wiki/Industrial_robot#/media/File:FANUC_6axis_welding_robots.jpg
https://upload.wikimedia.org/wikipedia/en/0/08/CVoverview2.svg
https://upload.wikimedia.org/wikipedia/commons/5/5a/Emacs-screenshot.png
21