|
|
||
|---|---|---|
| .. | ||
| lab | ||
| OpenCV.ipynb | ||
| README.md | ||
README.md
Johdanto tietokonenäköön
Tietokonenäkö on ala, jonka tavoitteena on mahdollistaa tietokoneiden korkeatasoinen ymmärrys digitaalisista kuvista. Tämä on melko laaja määritelmä, sillä ymmärrys voi tarkoittaa monia eri asioita, kuten objektin löytämistä kuvasta (objektin tunnistus), tapahtuman ymmärtämistä (tapahtuman tunnistus), kuvan kuvailemista tekstinä tai kohtauksen rekonstruointia 3D-muodossa. On myös erityisiä tehtäviä, jotka liittyvät ihmisten kuviin: iän ja tunteiden arviointi, kasvojen tunnistus ja identifiointi sekä 3D-asennon arviointi, muutamia mainitakseni.
Ennakkokysely
Yksi tietokonenäön yksinkertaisimmista tehtävistä on kuvien luokittelu.
Tietokonenäköä pidetään usein tekoälyn alana. Nykyään suurin osa tietokonenäön tehtävistä ratkaistaan neuroverkkojen avulla. Opimme lisää erityisestä neuroverkkotyypistä, jota käytetään tietokonenäössä, konvoluutioneuroverkot, tämän osion aikana.
Kuitenkin, ennen kuin kuva syötetään neuroverkkoon, monissa tapauksissa on järkevää käyttää joitakin algoritmisia tekniikoita kuvan parantamiseksi.
Pythonissa on saatavilla useita kirjastoja kuvankäsittelyyn:
- imageio voidaan käyttää erilaisten kuvatiedostomuotojen lukemiseen/kirjoittamiseen. Se tukee myös ffmpeg-ohjelmaa, joka on hyödyllinen työkalu videokehysten muuntamiseen kuviksi.
- Pillow (tunnetaan myös nimellä PIL) on hieman tehokkaampi ja tukee myös joitakin kuvanmuokkaustoimintoja, kuten muokkausta, palettisäätöjä ja muuta.
- OpenCV on tehokas kuvankäsittelykirjasto, joka on kirjoitettu C++-kielellä ja on käytännössä standardi kuvankäsittelyssä. Sillä on kätevä Python-rajapinta.
- dlib on C++-kirjasto, joka toteuttaa monia koneoppimisalgoritmeja, mukaan lukien joitakin tietokonenäön algoritmeja. Sillä 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.
Hyvä paikka oppia OpenCV:tä on tämä Learn OpenCV -kurssi. Meidän opetussuunnitelmassamme tavoitteena ei ole oppia OpenCV:tä, vaan näyttää joitakin esimerkkejä siitä, milloin sitä voidaan käyttää ja miten.
Kuvien lataaminen
Pythonissa kuvat voidaan kätevästi esittää NumPy-taulukoina. Esimerkiksi harmaasävykuvat, joiden koko on 320x200 pikseliä, tallennetaan 200x320-taulukkoon, ja värikuvat samasta ulottuvuudesta olisivat muodoltaan 200x320x3 (3 värikanavaa varten). 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ää BGR (sininen-vihreä-punainen) -koodausta värikuville, kun taas muut Python-työkalut käyttävät perinteisempää RGB (punainen-vihreä-sininen) -koodausta. Jotta kuva näyttäisi oikealta, sinun täytyy muuntaa se RGB-väriavaruuteen joko vaihtamalla NumPy-taulukon ulottuvuuksia tai kutsumalla OpenCV-funktiota:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
Sama cvtColor-funktio voidaan käyttää muihin väriavaruusmuunnoksiin, kuten kuvan muuntamiseen harmaasävyksi tai HSV (sävy-saturaatio-arvo) -väriavaruuteen.
Voit myös käyttää OpenCV:tä videon lataamiseen kehys kerrallaan - esimerkki löytyy harjoituksesta OpenCV Notebook.
Kuvankäsittely
Ennen kuin syötät kuvan neuroverkkoon, saatat haluta soveltaa 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 sumentaminen käyttämällä
im = cv2.medianBlur(im,3)taiim = cv2.GaussianBlur(im, (3,3), 0) - Kuvan kirkkauden ja kontrastin muuttaminen voidaan tehdä NumPy-taulukon manipulaatioilla, kuten kuvataan tässä Stackoverflow-muistiinpanossa.
- 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 voivat olla hyödyllisiä, jos sinun täytyy yhdistää kuvan kierto, koon muuttaminen ja vinoutus ja tiedät kolmen pisteen lähde- ja kohdesijainnit kuvassa. Affiinimuunnokset säilyttävät yhdensuuntaiset viivat yhdensuuntaisina.
- Perspektiivimuunnokset voivat olla hyödyllisiä, kun tiedät neljän pisteen lähde- ja kohdesijainnit kuvassa. Esimerkiksi, jos otat kuvan suorakulmaisesta asiakirjasta älypuhelimen kameralla jostain kulmasta ja haluat tehdä suorakulmaisen kuvan itse asiakirjasta.
- Liikkeen ymmärtäminen kuvassa käyttämällä optista virtausta.
Esimerkkejä tietokonenäön käytöstä
OpenCV Notebook -tiedostossa annamme joitakin esimerkkejä siitä, milloin tietokonenäköä voidaan käyttää tiettyjen tehtävien suorittamiseen:
- Valokuvan esikäsittely pistekirjoituskirjasta. Keskitymme siihen, miten voimme käyttää kynnysarvoja, ominaisuuksien tunnistusta, perspektiivimuunnosta ja NumPy-manipulaatioita erottamaan yksittäiset pistekirjoitussymbolit, jotta ne voidaan luokitella neuroverkolla.
![]() |
![]() |
![]() |
|---|
Kuva OpenCV.ipynb
- Liikkeen tunnistaminen videossa kehysten erotuksen avulla. Jos kamera on kiinteä, kameran syötteen kehysten pitäisi olla melko samanlaisia keskenään. Koska kehykset esitetään taulukoina, vain vähentämällä näitä taulukoita kahdelle peräkkäiselle kehykselle saamme pikselierotuksen, jonka pitäisi olla pieni staattisille kehyksille ja kasvaa merkittävästi, kun kuvassa on huomattavaa liikettä.
Kuva OpenCV.ipynb
-
Liikkeen tunnistaminen optisen virtauksen avulla. Optinen virtaus mahdollistaa sen ymmärtämisen, miten yksittäiset pikselit videokehyksissä liikkuvat. Optisesta virtauksesta on kaksi tyyppiä:
- Tiheä optinen virtaus laskee vektorikentän, joka näyttää jokaiselle pikselille, mihin se liikkuu.
- Harva optinen virtaus perustuu joidenkin erottuvien ominaisuuksien (esim. reunojen) ottamiseen kuvasta ja niiden liikeradan rakentamiseen kehyksestä toiseen.
Kuva OpenCV.ipynb
✍️ Esimerkkitiedostot: OpenCV kokeile OpenCV:tä käytännössä
Tehdään joitakin 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ä kirjastot, kuten OpenCV, voivat 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älkikysely
Kertaus ja itseopiskelu
Lue lisää optisesta virtauksesta tästä erinomaisesta opetusohjelmasta.
Tehtävä
Tässä laboratoriossa otat videon, jossa on yksinkertaisia eleitä, ja tavoitteesi on tunnistaa ylös/alas/vasen/oikea-liikkeet optisen virtauksen avulla.
Vastuuvapauslauseke:
Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä johtuvista väärinkäsityksistä tai virhetulkinnoista.




