|
|
||
|---|---|---|
| .. | ||
| lab | ||
| OpenCV.ipynb | ||
| README.md | ||
README.md
Johdanto tietokonenäköön
Tietokonenäkö on tieteenala, jonka tavoitteena on mahdollistaa tietokoneiden saavuttaa korkeatasoinen ymmärrys digitaalisista kuvista. Tämä on varsin laaja määritelmä, sillä ymmärrys voi tarkoittaa monia eri asioita, kuten esineen löytämistä kuvasta (esineentunnistus), tapahtuman ymmärtämistä (tapahtumantunnistus), kuvan kuvailemista tekstillä tai kohtauksen rekonstruointia 3D-muodossa. On myös erityisiä tehtäviä, jotka liittyvät ihmiskuvien käsittelyyn: iän ja tunteiden arviointi, kasvojen tunnistus ja identifiointi sekä 3D-asennon arviointi, muutamia mainitakseni.
Esiluentovisa
Yksi tietokonenäön yksinkertaisimmista tehtävistä on kuvien luokittelu.
Tietokonenäköä pidetään usein tekoälyn osa-alueena. Nykyään suurin osa tietokonenäön tehtävistä ratkaistaan neuroverkkojen avulla. Tässä osiossa opimme lisää erityisestä neuroverkkojen tyypistä, joita käytetään tietokonenäössä, eli konvoluutioneuroverkoista.
Ennen kuin kuva syötetään neuroverkkoon, on monissa tapauksissa järkevää käyttää joitakin algoritmisia tekniikoita kuvan parantamiseksi.
Pythonissa on saatavilla useita kirjastoja kuvankäsittelyyn:
- imageio soveltuu erilaisten kuvatiedostomuotojen lukemiseen ja kirjoittamiseen. Se tukee myös ffmpeg-ohjelmaa, joka on hyödyllinen työkalu videokehysten muuntamiseen kuviksi.
- Pillow (tunnetaan myös nimellä PIL) on hieman monipuolisempi ja tukee myös joitakin kuvamanipulaatioita, kuten muodonmuutoksia, paletin säätöjä ja muuta.
- OpenCV on tehokas kuvankäsittelykirjasto, joka on kirjoitettu C++-kielellä ja on käytännössä standardi kuvankäsittelyssä. Siinä on kätevä Python-rajapinta.
- dlib on C++-kirjasto, joka toteuttaa monia koneoppimisalgoritmeja, mukaan lukien joitakin tietokonenäön algoritmeja. Siinä on myös Python-rajapinta, ja sitä voidaan käyttää haastaviin tehtäviin, kuten kasvojen ja kasvonpiirteiden tunnistukseen.
OpenCV
OpenCV on käytännössä standardi kuvankäsittelyssä. Se sisältää paljon hyödyllisiä algoritmeja, jotka on toteutettu C++-kielellä. OpenCV:tä voi käyttää myös Pythonista käsin.
Hyvä paikka oppia OpenCV:tä on tämä Learn OpenCV -kurssi. Tämän kurssin tavoitteena ei kuitenkaan ole opettaa OpenCV:tä, vaan näyttää joitakin esimerkkejä sen käytöstä ja mahdollisuuksista.
Kuvien lataaminen
Pythonissa kuvat voidaan kätevästi esittää NumPy-taulukoina. Esimerkiksi harmaasävykuvat, joiden koko on 320x200 pikseliä, tallennetaan 200x320-taulukkoon, ja saman kokoiset värikuvat tallennetaan muotoon 200x320x3 (kolme värikanavaa). Kuvan lataamiseen voit käyttää seuraavaa koodia:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
Perinteisesti OpenCV käyttää värikuvissa BGR-koodausta (sininen-vihreä-punainen), kun taas muut Python-työkalut käyttävät yleisempää RGB-koodausta (punainen-vihreä-sininen). Jotta kuva näyttäisi oikealta, se täytyy muuntaa RGB-väriavaruuteen joko vaihtamalla NumPy-taulukon ulottuvuuksia tai kutsumalla OpenCV-funktiota:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
Samaa cvtColor-funktiota voidaan käyttää myös muihin värimuunnoksiin, kuten kuvan muuntamiseen harmaasävyksi tai HSV-väriavaruuteen (sävy-kylläisyys-arvo).
OpenCV:tä voi käyttää myös videon lataamiseen kehys kerrallaan – esimerkki löytyy harjoituksesta OpenCV Notebook.
Kuvankäsittely
Ennen kuin kuva syötetään neuroverkkoon, voi olla hyödyllistä suorittaa useita esikäsittelyvaiheita. OpenCV:llä voi tehdä monia asioita, kuten:
- Kuvan koon muuttaminen käyttämällä
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Kuvan sumennus käyttämällä
im = cv2.medianBlur(im,3)taiim = cv2.GaussianBlur(im, (3,3), 0) - Kuvan kirkkauden ja kontrastin muuttaminen onnistuu NumPy-taulukon manipulaatioilla, kuten tässä Stackoverflow-ohjeessa kuvataan.
- Kynnysarvojen käyttö kutsumalla
cv2.threshold/cv2.adaptiveThreshold-funktioita, mikä on usein parempi vaihtoehto kuin kirkkauden tai kontrastin säätäminen. - Erilaisten muunnosten soveltaminen kuvaan:
- Affiinimuunnokset ovat hyödyllisiä, jos haluat yhdistää kuvan kiertämisen, koon muuttamisen ja vinouttamisen ja tiedät kolmen pisteen lähde- ja kohdesijainnit kuvassa. Affiinimuunnokset säilyttävät yhdensuuntaiset viivat yhdensuuntaisina.
- Perspektiivimuunnokset ovat hyödyllisiä, kun tiedät neljän pisteen lähde- ja kohdesijainnit kuvassa. Esimerkiksi, jos otat älypuhelimella kuvan suorakulmaisesta dokumentista vinosta kulmasta ja haluat suorakulmaisen kuvan itse dokumentista.
- Liikkeen ymmärtäminen kuvassa käyttämällä optista virtausta.
Esimerkkejä tietokonenäön käytöstä
OpenCV Notebook -tiedostossa annamme esimerkkejä siitä, milloin tietokonenäköä voidaan käyttää tiettyjen tehtävien suorittamiseen:
- Pistekirjakuvan esikäsittely. Keskitymme siihen, miten voimme käyttää kynnysarvoja, piirteiden tunnistusta, perspektiivimuunnoksia ja NumPy-manipulaatioita erottamaan yksittäiset pistekirjoitussymbolit, jotta ne voidaan luokitella neuroverkolla.
![]() |
![]() |
![]() |
|---|
Kuva OpenCV.ipynb
- Liikkeen tunnistaminen videosta kehysten erotuksen avulla. Jos kamera on kiinteä, kameran syötteen kehysten pitäisi olla melko samanlaisia. Koska kehykset esitetään taulukoina, kahden peräkkäisen kehyksen taulukoiden vähentämisellä saadaan pikseliero, joka on pieni staattisille kehyksille ja kasvaa merkittävästi, kun kuvassa on huomattavaa liikettä.
Kuva OpenCV.ipynb
-
Liikkeen tunnistaminen optisen virtauksen avulla. Optinen virtaus auttaa ymmärtämään, miten yksittäiset pikselit liikkuvat videokehyksissä. Optista virtausta on kahta tyyppiä:
- Tiheä optinen virtaus laskee vektorikentän, joka näyttää jokaisen pikselin liikkeen suunnan.
- Harva optinen virtaus perustuu tiettyjen erottuvien piirteiden (esim. reunojen) valintaan kuvassa ja niiden liikeradan rakentamiseen kehyksestä toiseen.
Kuva OpenCV.ipynb
✍️ Esimerkkitiedostot: OpenCV kokeile OpenCV:tä käytännössä
Tehdään kokeita OpenCV:llä tutkimalla OpenCV Notebook -tiedostoa.
Yhteenveto
Joskus suhteellisen monimutkaiset tehtävät, kuten liikkeen tunnistus tai sormenpään tunnistus, voidaan ratkaista pelkästään tietokonenäön avulla. Siksi on erittäin hyödyllistä tuntea tietokonenäön perusmenetelmät ja mitä kirjastoja, kuten OpenCV, voi tehdä.
🚀 Haaste
Katso tämä video AI Show'sta oppiaksesi Cortic Tigers -projektista ja siitä, miten he rakensivat lohkopohjaisen ratkaisun tietokonenäön tehtävien demokratisoimiseksi robotin avulla. Tee tutkimusta muista vastaavista projekteista, jotka auttavat uusia oppijoita pääsemään mukaan alalle.
Jälkiluentovisa
Kertaus ja itseopiskelu
Lue lisää optisesta virtauksesta tästä erinomaisesta oppaasta.
Tehtävä
Tässä laboratoriossa otat videon, jossa on yksinkertaisia eleitä, ja tavoitteesi on tunnistaa ylös/alas/vasen/oikea-liikkeet optisen virtauksen avulla.




