OpenCV
Autor: Stefan Nožinić
Šta je računarska vizija?
Računarska vizija (eng. computer vision) je oblast računarskih nauka koja se bavi obradom i analizom slike i višedimenzionalnih prostora (najčešće trodimenzionalni i četvorodimenzionalni). Ova oblast je veoma važna i ima veliku primenu u industriji i nauci.
Ova oblast je zastupljena u:
- kontroli robota u industriji
- navigaciji
- detekciji objekata i događaja
- indeksiranju baza slika
- prepoznavanju lica
- analizi slike u medicini
- popravci slike
- optičkom prepoznavanju teksta (OCR)
Proces se najčešće sastoji od:
- dobijanja slike sa kamere ili nekog drugog optičkog senzora
- obrade slike (otklanjanje šumova, konverzija u potreban sistem boja i drugo)
- segmentacije (razdvajanje bitnih stvari od nebitnih)
- ostalih obrada (prepoznavanje objekata, specifičnosti, transformacije i drugo)
Kao što se može primetiti, ovo je dosta složen proces i razvijanje sistema baziranih na računarskoj viziji postaje sve izazovnije kao što i problemi u ovoj oblasti postaju sve učestaliji i složeniji.
Zbog gore navedenih razloga, potrebno nam je rešenje koje će nam omogućiti viši nivo apstrakcije i omogućiti da razmišljamo o novim rešenjima koristeći već postojeća. U razvijanju ovakvih sistema tražimo rešenje koje će nam povećati produktivnost i kreativnost i naše mogućnosti za rešavanje problema preusmeriti na zanimljivije stvari od stalne brige o tome da li smo dobro implementirali već neko postojeće rešenje.
Šta je OpenCV?
OpenCV (Open Source Computer Vision) je razvojna biblioteka pre svega za CC++ koja omogućava olakšanu implementaciju sistema baziranih na računarskoj viziji. Ova biblioteka je razvijena pod BSD licencom što omogućava visok nivo otvorenosti i slobode korišćenja, menjanja i distribuiranja. Ova biblioteka ima ogromnu primenu u industriji i najčešće je prvi i jedini izbor većine onih koji se bave ovom i srodnim oblastima. Dostupna je na mnogim platformama kao što su Linux, Windows, OSX, iOS i Android.
Iako je pre svega namenjena kao CC++ biblioteka, postoji interfejs za Python i Java-u.
Zbog svoje efikasnosti i brzine, primenjuje se u sistemima koji zahtevaju brz odziv, odnosno u sistemima koji rade u realnom vremenu. Ovo je omogućeno zbog mogućnosti korišćenja optimizacija za različit hardver. Takođe ima podršku za višeprocesnu obradu što omogućava iskorišćenje punih resursa sistema koji mogu da vrše obradu paralelno.
Zbog ogromnog broja mogućnosti i funkcija, OpenCV je podeljen u više modula, a svaki modul ima svoju namenu. Kombinacijom ovih modula je moguće napraviti zaista korisne aplikacije. U nastavku teksta vam dajemo objašnjenje za neke najbitnije module.
Osnovni core modul
Kao što mu i samo ime kaže, ovo je osnovni modul u biblioteci. Ovaj modul sadrži neke osnovne strukture i funkcije za biblioteku.
Ovde se nalaze strukture za reprezentaciju slike kao matrice piksela, boja, tačaka, vektora i drugog. Od funkcija tu su osnovni algoritmi za operacije nad nizovima, grafovima i vektorima.
Modul za upravljanje grafičkim interfejsom
Ovaj modul u biblioteci ima naziv highgui. Pored toga što ima mogućnosti upravljanja grafičkim interfejsom, on ima i mogućnosti učitavanja slika iz memorije, tvrdih diskova, kamere i ostalih uređaja u strukture koje su navedene u core modulu.
Tu su mogućnosti i prikazivanja slika kao i neki dodatni grafički elementi koji pružaju lako uklanjanje grešaka (eng. debugging).
Modul za obradu slika
Ovaj modul se u biblioteci naziva imgproc. Služi za obradu slike. U ovom modulu se mogu pronaći razni algoritmi kao što su blur efekat, Hafova transformacija, menjanje veličine slike, rotacija, adaptivni trešhold threshold, floodfill, izračunavanje histograma i mnogi drugi.
Ostali moduli
Pored gore navedenih modula, postoje još mnogi korisni moduli kao što su video moduli, moduli za kalibraciju, moduli za detekciju specifičnih objekata i moduli za učenje. Ovde je potrebno napomenuti da postoje i non-free moduli koji nisu besplatni.
Dokumentacija
Ako ste mislili da je ovo previše komplikovano, razmislite ponovo! Možemo slobodno da kažemo da je dokumentacija za ovu biblioteku jedna od boljih dokumentacija, ne samo u sferi slobodnih razvojnih biblioteka već i globalno. OpenCV nudi kompletan opis svih modula i funkcija kao i imena algoritama koji se koriste u datoj funkciji. Nije redak slučaj da naiđete na primere koda gde se koristi data funkcija, a i često se mogu videti slike koje predstavljaju demonstraciju rezultata neke funkcije. Pored ovoga, dostupni su i OpenCV tutorijali kao i priručnik koji se može preuzeti u PDF formatu ili čitati onlajn.
OpenCV za Android platformu
OpenCV ima svoj servis za Android platformu koji omogućava deljenje OpenCV binarnih dinamičkih biblioteka između aplikacija pa time aplikacije štede memoriju. Takođe su dostupne razne optimizacije za različite platforme. OpenCVAndroid upravnik je dostupan u Google-ovoj prodavnici aplikacija i besplatan je. Po instalaciji ove aplikacije dobićete mogućnost da instalirate OpenCV za vašu platformu. Posle ove instalacije moći ćete da koristite vaše aplikacije bazirane na ovoj biblioteci.
Ko je Lena?
Ako ste pregledali OpenCV dokumentaciju ili ako ste pročitali bilo kakav tutorijal iz ove biblioteke, sigurno ste primetili da se često pojavljuje slika devojke koja je prikazana na slici 2. Nije redak slučaj da se neko zapita ko je ona zapravo i zašto se toliko puta pominje. Ova sekcija u ovom tekstu je namenjena da se malo zabavimo, ali i da ispričamo zanimljivu priču.
Devojka sa slike je Lena Söderberg. Bila je model za Playboy i ova slika vuče poreklo iz davnih sedamdesetih godina kada je bilo dosta teško doći do skenirane fotografije. Razvojni tim koji se bavio algoritmima za kompresiju slike i njenu obradu, uspeo je da dođe do ove slike u digitalnoj formi i na njoj testirao svoje algoritme. Lena je zbog ovoga nazvana prvom devojkom interneta i bila je gost na pedesetoj IS&T konferenciji 1997. godine koja se bavi računarskom vizijom i na njoj se predstavila.