10 KiB
Uvod v računalniški vid
Računalniški vid je področje, katerega cilj je omogočiti računalnikom, da pridobijo visok nivo razumevanja digitalnih slik. To je precej široka definicija, saj lahko razumevanje pomeni veliko različnih stvari, vključno z iskanjem objekta na sliki (prepoznavanje objektov), razumevanjem dogajanja (prepoznavanje dogodkov), opisovanjem slike z besedilom ali rekonstrukcijo prizora v 3D. Obstajajo tudi posebne naloge, povezane s človeškimi slikami: ocenjevanje starosti in čustev, prepoznavanje obrazov ter določanje 3D drže, če naštejemo le nekaj primerov.
Pred-predavanjski kviz
Ena najpreprostejših nalog računalniškega vida je klasifikacija slik.
Računalniški vid pogosto velja za vejo umetne inteligence. Danes se večina nalog računalniškega vida rešuje z uporabo nevronskih mrež. Več o posebni vrsti nevronskih mrež, ki se uporabljajo za računalniški vid, konvolucijske nevronske mreže, bomo spoznali v tem poglavju.
Vendar pa je v mnogih primerih smiselno, da pred obdelavo slike z nevronsko mrežo uporabimo nekatere algoritmične tehnike za izboljšanje slike.
Na voljo je več Python knjižnic za obdelavo slik:
- imageio omogoča branje/pisanje različnih formatov slik. Podpira tudi ffmpeg, uporabno orodje za pretvorbo video okvirjev v slike.
- Pillow (znan tudi kot PIL) je nekoliko zmogljivejši in podpira manipulacijo slik, kot so morfing, prilagoditve palete in drugo.
- OpenCV je zmogljiva knjižnica za obdelavo slik, napisana v C++, ki je postala de facto standard za obdelavo slik. Ima priročen Python vmesnik.
- dlib je knjižnica v C++, ki implementira številne algoritme strojnega učenja, vključno z nekaterimi algoritmi računalniškega vida. Ima tudi Python vmesnik in se lahko uporablja za zahtevne naloge, kot so prepoznavanje obrazov in zaznavanje obraznih značilnosti.
OpenCV
OpenCV velja za de facto standard za obdelavo slik. Vsebuje veliko uporabnih algoritmov, implementiranih v C++. OpenCV lahko uporabljate tudi v Pythonu.
Dober vir za učenje OpenCV je tečaj Learn OpenCV. V našem učnem načrtu ni cilj, da se naučimo OpenCV, ampak da vam pokažemo nekaj primerov, kdaj ga lahko uporabimo in kako.
Nalaganje slik
Slike v Pythonu lahko priročno predstavimo z NumPy polji. Na primer, sivinske slike velikosti 320x200 pik bi bile shranjene v polju velikosti 200x320, barvne slike enakih dimenzij pa bi imele obliko 200x320x3 (za 3 barvne kanale). Za nalaganje slike lahko uporabite naslednjo kodo:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
Tradicionalno OpenCV uporablja kodiranje BGR (modro-zelena-rdeča) za barvne slike, medtem ko ostala Python orodja uporabljajo bolj tradicionalno RGB (rdeča-zelena-modra). Da bo slika pravilno prikazana, jo morate pretvoriti v barvni prostor RGB, bodisi z zamenjavo dimenzij v NumPy polju ali z uporabo funkcije OpenCV:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
Ista funkcija cvtColor se lahko uporablja za izvajanje drugih pretvorb barvnih prostorov, kot je pretvorba slike v sivinsko ali v HSV (odtenek-nasičenost-vrednost) barvni prostor.
OpenCV lahko uporabite tudi za nalaganje video posnetkov okvir za okvir - primer je podan v vajah OpenCV Notebook.
Obdelava slik
Preden sliko posredujete nevronski mreži, boste morda želeli uporabiti več korakov predobdelave. OpenCV omogoča številne funkcije, vključno z:
- Spreminjanje velikosti slike z uporabo
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Zameglitev slike z uporabo
im = cv2.medianBlur(im,3)aliim = cv2.GaussianBlur(im, (3,3), 0) - Spreminjanje svetlosti in kontrasta slike je mogoče z manipulacijo NumPy polj, kot je opisano v tej opombi na Stackoverflow.
- Uporaba pragovne obdelave z uporabo funkcij
cv2.threshold/cv2.adaptiveThreshold, kar je pogosto boljše od prilagajanja svetlosti ali kontrasta. - Uporaba različnih transformacij na sliki:
- Afine transformacije so uporabne, če morate kombinirati rotacijo, spreminjanje velikosti in nagib slike ter poznate izvorno in ciljno lokacijo treh točk na sliki. Afine transformacije ohranjajo vzporedne črte vzporedne.
- Perspektivne transformacije so uporabne, ko poznate izvorne in ciljne položaje 4 točk na sliki. Na primer, če posnamete sliko pravokotnega dokumenta s pametnim telefonom pod kotom in želite narediti pravokotno sliko samega dokumenta.
- Razumevanje gibanja znotraj slike z uporabo optičnega toka.
Primeri uporabe računalniškega vida
V našem OpenCV Notebook podajamo nekaj primerov, kdaj lahko računalniški vid uporabimo za izvajanje specifičnih nalog:
- Predobdelava fotografije Braillove knjige. Osredotočamo se na to, kako lahko uporabimo pragovno obdelavo, zaznavanje značilnosti, perspektivno transformacijo in manipulacijo NumPy za ločevanje posameznih Braillovih simbolov za nadaljnjo klasifikacijo z nevronsko mrežo.
![]() |
![]() |
![]() |
|---|
Slika iz OpenCV.ipynb
- Zaznavanje gibanja v videu z uporabo razlike med okvirji. Če je kamera fiksna, bi morali biti okvirji iz video posnetka med seboj precej podobni. Ker so okvirji predstavljeni kot polja, lahko z odštevanjem teh polj za dva zaporedna okvirja dobimo razliko med piksli, ki bi morala biti nizka za statične okvirje in postati višja, ko je v sliki zaznano večje gibanje.
Slika iz OpenCV.ipynb
-
Zaznavanje gibanja z uporabo optičnega toka. Optični tok nam omogoča razumevanje, kako se posamezni piksli na video okvirjih premikajo. Obstajata dve vrsti optičnega toka:
- Gost optični tok izračuna vektorsko polje, ki kaže, kam se premika vsak piksel.
- Redek optični tok temelji na zaznavanju nekaterih značilnih značilnosti slike (npr. robov) in gradnji njihove trajektorije od okvirja do okvirja.
Slika iz OpenCV.ipynb
✍️ Primeri zvezkov: OpenCV preizkusite OpenCV v akciji
Izvedimo nekaj eksperimentov z OpenCV z raziskovanjem OpenCV Notebook.
Zaključek
Včasih je mogoče relativno kompleksne naloge, kot so zaznavanje gibanja ali zaznavanje konic prstov, rešiti zgolj z računalniškim vidom. Zato je zelo koristno poznati osnovne tehnike računalniškega vida in kaj knjižnice, kot je OpenCV, omogočajo.
🚀 Izziv
Oglejte si ta video iz oddaje AI show, da se naučite o projektu Cortic Tigers in kako so zgradili rešitev na osnovi blokov za demokratizacijo nalog računalniškega vida prek robota. Raziskujte druge podobne projekte, ki pomagajo novim učencem pri vstopu na področje.
Po-predavanjski kviz
Pregled in samostojno učenje
Preberite več o optičnem toku v tem odličnem vodiču.
Naloga
V tej nalogi boste posneli video s preprostimi gestami, vaš cilj pa bo izluščiti premike gor/dol/levo/desno z uporabo optičnega toka.
Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve AI za prevajanje Co-op Translator. Čeprav si prizadevamo za natančnost, vas prosimo, da upoštevate, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem maternem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo profesionalni človeški prevod. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki bi nastale zaradi uporabe tega prevoda.




