AI-For-Beginners/translations/fi/lessons/4-ComputerVision/06-IntroCV
leestott 175a7be439 🌐 Update translations via Co-op Translator 2025-09-23 11:32:02 +00:00
..
lab 🌐 Update translations via Co-op Translator 2025-08-28 22:12:36 +00:00
OpenCV.ipynb 🌐 Update translations via Co-op Translator 2025-09-07 15:24:18 +00:00
README.md 🌐 Update translations via Co-op Translator 2025-09-23 11:32:02 +00:00

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) tai im = 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.
Pistekirjakuvan esimerkki Esikäsitelty pistekirjakuva Pistekirjoitussymbolit

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 videokehysten ja kehysten erojen analyysistä

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 optisesta virtauksesta

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.

Kämmenen liike