Skip to content

Latest commit

 

History

History
121 lines (74 loc) · 9.14 KB

File metadata and controls

121 lines (74 loc) · 9.14 KB

Introduksjon til datamaskinsyn

Datamaskinsyn er et fagområde 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 på et bilde (objektdeteksjon), forstå hva som skjer (hendelsesdeteksjon), beskrive et bilde med tekst, eller rekonstruere en scene i 3D. Det finnes også spesielle oppgaver knyttet til bilder av mennesker: alders- og følelsesestimering, ansiktsdeteksjon og identifikasjon, samt 3D-posisjonsestimering, for å nevne noen.

En av de enkleste oppgavene innen datamaskinsyn er bildeklassifisering.

Datamaskinsyn regnes ofte som en gren av 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, gjennom denne seksjonen.

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 mer kraftig og støtter også bildebehandling som morfing, palettjusteringer 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åtoner-bilder 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 å bruke 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) fargerommet.

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 å utføre flere forhåndsbehandlingssteg. OpenCV kan gjøre mange ting, inkludert:

  • Endre størrelse på bildet ved hjelp av im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)
  • Uskarphet på bildet ved hjelp av im = cv2.medianBlur(im,3) eller im = cv2.GaussianBlur(im, (3,3), 0)
  • Endring av lysstyrke og kontrast på bildet kan gjøres ved hjelp av NumPy-arraymanipulasjoner, som beskrevet i denne Stackoverflow-noten.
  • Bruk av terskling ved å kalle cv2.threshold/cv2.adaptiveThreshold-funksjoner, som ofte er å foretrekke fremfor å justere lysstyrke eller kontrast.
  • Anvendelse av ulike transformasjoner på bildet:
    • Affine transformasjoner kan være nyttige hvis du trenger å kombinere rotasjon, endring av størrelse og skråstilling på 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 vil lage et rektangulært bilde av selve dokumentet.
  • Forstå bevegelse i bildet ved hjelp av 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 å separere individuelle Braille-symboler for videre klassifisering av et nevralt nettverk.
Braille-bilde Forhåndsbehandlet Braille-bilde Braille-symboler

Bilde fra OpenCV.ipynb

  • Deteksjon av bevegelse i video ved hjelp av rammeforskjell. Hvis kameraet er fast, bør rammer fra kamerafeeden være ganske like hverandre. Siden rammer er representert 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 av videorammer og rammeforskjeller

Bilde fra OpenCV.ipynb

  • Deteksjon av 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 av optisk flyt

Bilde fra OpenCV.ipynb

✍️ Eksempelnotatbøker: OpenCV prøv OpenCV i aksjon

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.

Gjennomgang og selvstudium

Les mer om optisk flyt i denne flotte veiledningen.

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.

Palm Movement Frame