четвртак, 25 априла, 2024
Слободни професионалац

OpenCV

Аутор: Стефан Ножинић

Шта је рачунарска визија?

Рачунарска визија (енг. computer vision) је област рачунарских наука која се бави обрадом и анализом слике и вишедимензионалних простора (најчешће тродимензионални и четвородимензионални). Ова област је веома важна и има велику примену у индустрији и науци.

Ова област је заступљена у:

  • контроли робота у индустрији
  • навигацији
  • детекцији објеката и догађаја
  • индексирању база слика
  • препознавању лица
  • анализи слике у медицини
  • поправци слике
  • оптичком препознавању текста (OCR)

Процес се најчешће састоји од:

  • добијања слике са камере или неког другог оптичког сензора
  • обраде слике (отклањање шумова, конверзија у потребан систем боја и друго)
  • сегментације (раздвајање битних ствари од небитних)
  • осталих обрада (препознавање објеката, специфичности, трансформације и друго)

Као што се може приметити, ово је доста сложен процес и развијање система базираних на рачунарској визији постаје све изазовније као што и проблеми у овој области постају све учесталији и сложенији.

Због горе наведених разлога, потребно нам је решење које ће нам омогућити виши ниво апстракције и омогућити да размишљамо о новим решењима користећи већ постојећа. У развијању оваквих система тражимо решење које ће нам повећати продуктивност и креативност и наше могућности за решавање проблема преусмерити на занимљивије ствари од сталне бриге о томе да ли смо добро имплементирали већ неко постојеће решење.

Шта је OpenCV?

OpenCV (Open Source Computer Vision) је развојна библиотека пре свега за CC++ која омогућава олакшану имплементацију система базираних на рачунарској визији. Ова библиотека је развијена под BSD лиценцом што омогућава висок ниво отворености и слободе коришћења, мењања и дистрибуирања. Ова библиотека има огромну примену у индустрији и најчешће је први и једини избор већине оних који се баве овом и сродним областима. Доступна је на многим платформама као што су Linux, Windows, OSX, iOS и Android.

Иако је пре свега намењена као CC++ библиотека, постоји интерфејс за Python и Java-у.

Због своје ефикасности и брзине, примењује се у системима који захтевају брз одзив, односно у системима који раде у реалном времену. Ово је омогућено због могућности коришћења оптимизација за различит хардвер. Такође има подршку за вишепроцесну обраду што омогућава искоришћење пуних ресурса система који могу да врше обраду паралелно.

Због огромног броја могућности и функција, OpenCV је подељен у више модула, а сваки модул има своју намену. Комбинацијом ових модула је могуће направити заиста корисне апликације. У наставку текста вам дајемо објашњење за неке најбитније модуле.

Основни core модул

Као што му и само име каже, ово је основни модул у библиотеци. Овај модул садржи неке основне структуре и функције за библиотеку.

Овде се налазе структуре за репрезентацију слике као матрице пиксела, боја, тачака, вектора и другог. Од функција ту су основни алгоритми за операције над низовима, графовима и векторима.

Модул за управљање графичким интерфејсом

Овај модул у библиотеци има назив highgui. Поред тога што има могућности управљања графичким интерфејсом, он има и могућности учитавања слика из меморије, тврдих дискова, камере и осталих уређаја у структуре које су наведене у core модулу.

Ту су могућности и приказивања слика као и неки додатни графички елементи који пружају лако уклањање грешака (енг. debugging).

Модул за обраду слика

Овај модул се у библиотеци назива imgproc. Служи за обраду слике. У овом модулу се могу пронаћи разни алгоритми као што су blur ефекат, Хафова трансформација, мењање величине слике, ротација, адаптивни трешхолд threshold, floodfill, израчунавање хистограма и многи други.

Остали модули

Поред горе наведених модула, постоје још многи корисни модули као што су видео модули, модули за калибрацију, модули за детекцију специфичних објеката и модули за учење. Овде је потребно напоменути да постоје и non-free модули који нису бесплатни.

Документација

Ако сте мислили да је ово превише компликовано, размислите поново! Можемо слободно да кажемо да је документација за ову библиотеку једна од бољих документација, не само у сфери слободних развојних библиотека већ и глобално. OpenCV нуди комплетан опис свих модула и функција као и имена алгоритама који се користе у датој функцији. Није редак случај да наиђете на примере кода где се користи дата функција, а и често се могу видети слике које представљају демонстрацију резултата неке функције. Поред овога, доступни су и OpenCV туторијали као и приручник који се може преузети у PDF формату или читати онлајн.

OpenCV за Android платформу

OpenCV има свој сервис за Android платформу који омогућава дељење OpenCV бинарних динамичких библиотека између апликација па тиме апликације штеде меморију. Такође су доступне разне оптимизације за различите платформе. OpenCV Android управник је доступан у Google-овој продавници апликација и бесплатан је. По инсталацији ове апликације добићете могућност да инсталирате OpenCV за вашу платформу. После ове инсталације моћи ћете да користите ваше апликације базиране на овој библиотеци.

Ко је Лена?

Ако сте прегледали OpenCV документацију или ако сте прочитали било какав туторијал из ове библиотеке, сигурно сте приметили да се често појављује слика девојке која је приказана на слици 2. Није редак случај да се неко запита ко је она заправо и зашто се толико пута помиње. Ова секција у овом тексту је намењена да се мало забавимо, али и да испричамо занимљиву причу.

Девојка са слике је Lena Söderberg. Била је модел за Playboy и ова слика вуче порекло из давних седамдесетих година када је било доста тешко доћи до скениране фотографије. Развојни тим који се бавио алгоритмима за компресију слике и њену обраду, успео је да дође до ове слике у дигиталној форми и на њој тестирао своје алгоритме. Lena је због овога названа првом девојком интернета и била је гост на педесетој IS&T конференцији 1997. године која се бави рачунарском визијом и на њој се представила.