AI-For-Beginners/translations/sr/lessons/4-ComputerVision/06-IntroCV/README.md

15 KiB
Raw Blame History

Увод у рачунарски вид

Рачунарски вид је дисциплина чији је циљ да омогући рачунарима да стекну висок ниво разумевања дигиталних слика. Ово је прилично широка дефиниција, јер разумевање може значити много различитих ствари, укључујући проналажење објекта на слици (детекција објеката), разумевање шта се дешава (детекција догађаја), описивање слике текстом или реконструкцију сцене у 3Д. Постоје и посебни задаци везани за људске слике: процена старости и емоција, детекција и идентификација лица, као и процена 3Д положаја, да наведемо само неке.

Квиз пре предавања

Један од најједноставнијих задатака рачунарског вида је класификација слика.

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

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

Постоји неколико Python библиотека доступних за обраду слика:

  • imageio може се користити за читање/писање различитих формата слика. Такође подржава ffmpeg, користан алат за претварање видео кадрова у слике.
  • Pillow (познат и као PIL) је нешто моћнији и подржава неке манипулације сликама као што су морфинг, подешавање палете и друго.
  • OpenCV је моћна библиотека за обраду слика написана у C++, која је постала де факто стандард за обраду слика. Има погодан Python интерфејс.
  • dlib је C++ библиотека која имплементира многе алгоритме машинског учења, укључујући неке алгоритме рачунарског вида. Такође има Python интерфејс и може се користити за изазовне задатке као што су детекција лица и обележја лица.

OpenCV

OpenCV се сматра де факто стандардом за обраду слика. Садржи много корисних алгоритама, имплементираних у C++. OpenCV можете користити и из Python-а.

Добро место за учење OpenCV-а је овај курс Learn OpenCV. У нашем курикулуму, циљ нам није да научимо OpenCV, већ да вам покажемо неке примере када се може користити и како.

Учитавање слика

Слике у Python-у могу се згодно представити помоћу NumPy низова. На пример, сиве слике величине 320x200 пиксела биће смештене у низу 200x320, а колор слике истих димензија имаће облик 200x320x3 (за 3 канала боја). Да бисте учитали слику, можете користити следећи код:

import cv2
import matplotlib.pyplot as plt

im = cv2.imread('image.jpeg')
plt.imshow(im)

Традиционално, OpenCV користи BGR (плаво-зелено-црвено) кодирање за колор слике, док остали Python алати користе традиционалнији RGB (црвено-зелено-плаво). Да би слика изгледала исправно, потребно је да је конвертујете у RGB простор боја, било заменом димензија у NumPy низу или позивом OpenCV функције:

im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)

Иста функција cvtColor може се користити за извођење других трансформација простора боја, као што је претварање слике у сиву скалу или у HSV (нијанса-засићеност-вредност) простор боја.

OpenCV такође можете користити за учитавање видео записа кадар по кадар - пример је дат у вежби OpenCV Notebook.

Обрада слика

Пре него што слику проследите неуронској мрежи, можда ћете желети да примените неколико корака претходне обраде. OpenCV може урадити много тога, укључујући:

  • Промену величине слике коришћењем im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)
  • Замагљивање слике коришћењем im = cv2.medianBlur(im,3) или im = cv2.GaussianBlur(im, (3,3), 0)
  • Промену осветљености и контраста слике можете извршити манипулацијом NumPy низовима, као што је описано у овој напомени на Stackoverflow-у.
  • Коришћење праговања позивом функција cv2.threshold/cv2.adaptiveThreshold, што је често пожељније од подешавања осветљености или контраста.
  • Примена различитих трансформација на слику:
    • Афинске трансформације могу бити корисне ако треба да комбинујете ротацију, промену величине и искошење слике и знате изворну и одредишну локацију три тачке на слици. Афинске трансформације задржавају паралелност линија.
    • Перспективне трансформације могу бити корисне када знате изворне и одредишне позиције 4 тачке на слици. На пример, ако сликате правоугаони документ паметним телефоном из неког угла и желите да добијете правоугаону слику самог документа.
  • Разумевање кретања унутар слике коришћењем оптичког тока.

Примери коришћења рачунарског вида

У нашем OpenCV Notebook, дајемо неке примере када се рачунарски вид може користити за извођење специфичних задатака:

  • Претходна обрада фотографије Брајеве књиге. Фокусирамо се на то како можемо користити праговање, детекцију карактеристика, перспективну трансформацију и манипулације NumPy низовима да бисмо раздвојили појединачне Брајеве симболе за даљу класификацију помоћу неуронске мреже.
Слика Брајеве књиге Претходно обрађена слика Брајеве књиге Брајеви симболи

Слика из OpenCV.ipynb

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

Слика видео кадрова и разлика кадрова

Слика из OpenCV.ipynb

  • Детекција кретања коришћењем оптичког тока. Оптички ток нам омогућава да разумемо како се појединачни пиксели на видео кадровима крећу. Постоје две врсте оптичког тока:

    • Густи оптички ток израчунава векторско поље које показује за сваки пиксел где се креће
    • Ретки оптички ток заснован је на узимању неких карактеристичних обележја на слици (нпр. ивица) и праћењу њихове путање од кадра до кадра.

Слика оптичког тока

Слика из OpenCV.ipynb

✍️ Пример бележница: OpenCV испробајте OpenCV у акцији

Хајде да урадимо неке експерименте са OpenCV-ом истражујући OpenCV Notebook

Закључак

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

🚀 Изазов

Погледајте овај видео из AI Show-а да бисте сазнали више о пројекту Cortic Tigers и како су изградили решење засновано на блоковима за демократизацију задатака рачунарског вида помоћу робота. Истражите друге сличне пројекте који помажу новим ученицима да се укључе у област.

Квиз након предавања

Преглед и самостално учење

Прочитајте више о оптичком току у овом одличном туторијалу.

Задатак

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

Покрет длана

Одрицање од одговорности:
Овај документ је преведен помоћу услуге за превођење уз помоћ вештачке интелигенције Co-op Translator. Иако се трудимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.