9.7 KiB
Introduksjon til Datamaskinsyn
Datamaskinsyn er et fagfelt som har som mål å gi datamaskiner en høyere forståelse av digitale bilder. Dette er en ganske bred definisjon, fordi forståelse kan bety mange forskjellige ting, inkludert å finne et objekt i et bilde (objektdeteksjon), forstå hva som skjer (hendelsesdeteksjon), beskrive et bilde med tekst, eller rekonstruere en scene i 3D. Det finnes også spesifikke oppgaver knyttet til bilder av mennesker: alders- og følelsesestimering, ansiktsdeteksjon og -identifikasjon, og 3D-posisjonsestimering, for å nevne noen.
Quiz før forelesning
En av de enkleste oppgavene innen datamaskinsyn er bildeklassifisering.
Datamaskinsyn regnes ofte som en gren av kunstig intelligens (AI). I dag løses de fleste oppgaver innen datamaskinsyn ved hjelp av nevrale nettverk. Vi skal lære mer om den spesielle typen nevrale nettverk som brukes for datamaskinsyn, konvolusjonsnevrale nettverk, i løpet av denne delen.
Men før du sender et bilde til et nevralt nettverk, kan det i mange tilfeller være fornuftig å bruke noen algoritmiske teknikker for å forbedre bildet.
Det finnes flere Python-biblioteker tilgjengelige for bildebehandling:
- imageio kan brukes til å lese/skrive ulike bildeformater. Det støtter også ffmpeg, et nyttig verktøy for å konvertere videorammer til bilder.
- Pillow (også kjent som PIL) er litt kraftigere og støtter også bildebehandling som morfing, justering av paletter og mer.
- OpenCV er et kraftig bildebehandlingsbibliotek skrevet i C++, som har blitt den de facto standarden for bildebehandling. Det har et praktisk Python-grensesnitt.
- dlib er et C++-bibliotek som implementerer mange maskinlæringsalgoritmer, inkludert noen av algoritmene for datamaskinsyn. Det har også et Python-grensesnitt og kan brukes til utfordrende oppgaver som ansikts- og ansiktslandmarksdeteksjon.
OpenCV
OpenCV regnes som den de facto standarden for bildebehandling. Det inneholder mange nyttige algoritmer, implementert i C++. Du kan også bruke OpenCV fra Python.
Et godt sted å lære OpenCV er dette Learn OpenCV-kurset. I vårt pensum er målet ikke å lære OpenCV, men å vise deg noen eksempler på når det kan brukes, og hvordan.
Laste inn bilder
Bilder i Python kan enkelt representeres som NumPy-arrays. For eksempel vil gråtonebilder med størrelsen 320x200 piksler lagres i et 200x320-array, og fargebilder med samme dimensjon vil ha formen 200x320x3 (for 3 fargekanaler). For å laste inn et bilde kan du bruke følgende kode:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
Tradisjonelt bruker OpenCV BGR (Blå-Grønn-Rød) koding for fargebilder, mens resten av Python-verktøyene bruker den mer tradisjonelle RGB (Rød-Grønn-Blå). For at bildet skal se riktig ut, må du konvertere det til RGB-fargerommet, enten ved å bytte dimensjoner i NumPy-arrayet eller ved å kalle en OpenCV-funksjon:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
Den samme cvtColor-funksjonen kan brukes til å utføre andre fargeromtransformasjoner, som å konvertere et bilde til gråtoner eller til HSV (Hue-Saturation-Value) fargerom.
Du kan også bruke OpenCV til å laste inn video ramme-for-ramme – et eksempel er gitt i øvelsen OpenCV Notebook.
Bildebehandling
Før du sender et bilde til et nevralt nettverk, kan det være lurt å bruke flere forhåndsbehandlingssteg. OpenCV kan gjøre mange ting, inkludert:
- Endre størrelse på bildet ved å bruke
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Gjøre bildet uskarpt ved å bruke
im = cv2.medianBlur(im,3)ellerim = cv2.GaussianBlur(im, (3,3), 0) - Endre lysstyrke og kontrast på bildet kan gjøres ved hjelp av NumPy-arraymanipulasjoner, som beskrevet i denne Stackoverflow-notisen.
- Bruke terskling ved å kalle
cv2.threshold/cv2.adaptiveThreshold-funksjoner, som ofte er å foretrekke fremfor å justere lysstyrke eller kontrast. - Anvende ulike transformasjoner på bildet:
- Affine transformasjoner kan være nyttige hvis du trenger å kombinere rotasjon, skalering og skråstilling av bildet, og du kjenner kilde- og destinasjonsplasseringen til tre punkter i bildet. Affine transformasjoner holder parallelle linjer parallelle.
- Perspektivtransformasjoner kan være nyttige når du kjenner kilde- og destinasjonsposisjonene til fire punkter i bildet. For eksempel, hvis du tar et bilde av et rektangulært dokument med et smarttelefonkamera fra en vinkel, og du ønsker å lage et rektangulært bilde av selve dokumentet.
- Forstå bevegelse i bildet ved å bruke optisk flyt.
Eksempler på bruk av datamaskinsyn
I vår OpenCV Notebook gir vi noen eksempler på når datamaskinsyn kan brukes til å utføre spesifikke oppgaver:
- Forhåndsbehandling av et fotografi av en Braille-bok. Vi fokuserer på hvordan vi kan bruke terskling, funksjonsdeteksjon, perspektivtransformasjon og NumPy-manipulasjoner for å skille individuelle Braille-symboler for videre klassifisering av et nevralt nettverk.
![]() |
![]() |
![]() |
|---|
Bilde fra OpenCV.ipynb
- Oppdage bevegelse i video ved hjelp av rammeforskjell. Hvis kameraet er fastmontert, bør rammene fra kamerafeeden være ganske like hverandre. Siden rammer representeres som arrays, vil vi ved å trekke fra disse arrayene for to påfølgende rammer få pikselforskjellen, som bør være lav for statiske rammer og bli høyere når det er betydelig bevegelse i bildet.
Bilde fra OpenCV.ipynb
-
Oppdage bevegelse ved hjelp av optisk flyt. Optisk flyt lar oss forstå hvordan individuelle piksler på videorammer beveger seg. Det finnes to typer optisk flyt:
- Tett optisk flyt beregner vektorfeltet som viser hvor hver piksel beveger seg.
- Sparsom optisk flyt er basert på å ta noen distinkte funksjoner i bildet (f.eks. kanter) og bygge deres bane fra ramme til ramme.
Bilde fra OpenCV.ipynb
✍️ Eksempelnotatbøker: OpenCV prøv OpenCV i praksis
La oss gjøre noen eksperimenter med OpenCV ved å utforske OpenCV Notebook.
Konklusjon
Noen ganger kan relativt komplekse oppgaver som bevegelsesdeteksjon eller fingertuppdeteksjon løses utelukkende ved hjelp av datamaskinsyn. Derfor er det svært nyttig å kjenne til de grunnleggende teknikkene innen datamaskinsyn og hva biblioteker som OpenCV kan gjøre.
🚀 Utfordring
Se denne videoen fra AI-showet for å lære om Cortic Tigers-prosjektet og hvordan de bygde en blokkbasert løsning for å demokratisere oppgaver innen datamaskinsyn via en robot. Gjør litt research på andre prosjekter som dette som hjelper nye lærere inn i feltet.
Quiz etter forelesning
Gjennomgang og selvstudium
Les mer om optisk flyt i denne flotte veiledningen.
Oppgave
I denne laben skal du ta en video med enkle bevegelser, og målet ditt er å trekke ut opp/ned/venstre/høyre bevegelser ved hjelp av optisk flyt.
Ansvarsfraskrivelse:
Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten Co-op Translator. Selv om vi streber etter nøyaktighet, vær oppmerksom på at automatiserte oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på sitt opprinnelige språk bør anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for eventuelle misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen.




