8.9 KiB
Introduktion til Computer Vision
Computer Vision er en disciplin, der har til formål at give computere en højere forståelse af digitale billeder. Dette er en bred definition, da forståelse kan betyde mange forskellige ting, herunder at finde et objekt på et billede (objektdetektion), forstå hvad der sker (begivenhedsdetektion), beskrive et billede med tekst eller rekonstruere en scene i 3D. Der er også særlige opgaver relateret til menneskelige billeder: alder- og følelsesestimering, ansigtsdetektion og -identifikation samt 3D-positur-estimering, for blot at nævne nogle få.
Quiz før lektionen
En af de enkleste opgaver inden for computer vision er billedklassifikation.
Computer vision betragtes ofte som en gren af AI. I dag løses de fleste opgaver inden for computer vision ved hjælp af neurale netværk. Vi vil lære mere om den særlige type neurale netværk, der bruges til computer vision, convolutional neural networks, i denne sektion.
Men før du sender et billede til et neuralt netværk, giver det i mange tilfælde mening at bruge nogle algoritmiske teknikker til at forbedre billedet.
Der findes flere Python-biblioteker til billedbehandling:
- imageio kan bruges til at læse/skrive forskellige billedformater. Det understøtter også ffmpeg, et nyttigt værktøj til at konvertere videorammer til billeder.
- Pillow (også kendt som PIL) er lidt mere kraftfuldt og understøtter også nogle billedmanipulationer såsom morfning, paletjusteringer og mere.
- OpenCV er et kraftfuldt billedbehandlingsbibliotek skrevet i C++, som er blevet den de facto standard inden for billedbehandling. Det har en praktisk Python-grænseflade.
- dlib er et C++-bibliotek, der implementerer mange maskinlæringsalgoritmer, herunder nogle af Computer Vision-algoritmerne. Det har også en Python-grænseflade og kan bruges til udfordrende opgaver som ansigts- og ansigtslandmærkedetektion.
OpenCV
OpenCV betragtes som den de facto standard inden for billedbehandling. Det indeholder mange nyttige algoritmer, implementeret i C++. Du kan også bruge OpenCV fra Python.
Et godt sted at lære OpenCV er denne Learn OpenCV-kursus. I vores pensum er målet ikke at lære OpenCV, men at vise dig nogle eksempler på, hvornår det kan bruges, og hvordan.
Indlæsning af billeder
Billeder i Python kan bekvemt repræsenteres af NumPy-arrays. For eksempel vil gråtonede billeder med en størrelse på 320x200 pixels blive gemt i et 200x320-array, og farvebilleder med samme dimension vil have formen 200x320x3 (for 3 farvekanaler). For at indlæse et billede kan du bruge følgende kode:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
Traditionelt bruger OpenCV BGR (Blå-Grøn-Rød) kodning til farvebilleder, mens resten af Python-værktøjerne bruger den mere traditionelle RGB (Rød-Grøn-Blå). For at billedet skal se korrekt ud, skal du konvertere det til RGB-farverummet, enten ved at bytte dimensioner i NumPy-arrayet eller ved at kalde en OpenCV-funktion:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
Den samme cvtColor-funktion kan bruges til at udføre andre farverumstransformationer, såsom at konvertere et billede til gråtoner eller til HSV (Hue-Saturation-Value) farverummet.
Du kan også bruge OpenCV til at indlæse video frame-for-frame - et eksempel er givet i øvelsen OpenCV Notebook.
Billedbehandling
Før du sender et billede til et neuralt netværk, kan det være en god idé at anvende flere forbehandlingsskridt. OpenCV kan gøre mange ting, herunder:
- Ændre størrelse på billedet ved hjælp af
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Sløre billedet ved hjælp af
im = cv2.medianBlur(im,3)ellerim = cv2.GaussianBlur(im, (3,3), 0) - Ændring af lysstyrke og kontrast på billedet kan gøres ved hjælp af NumPy-arraymanipulationer, som beskrevet i denne Stackoverflow-note.
- Brug af thresholding ved at kalde
cv2.threshold/cv2.adaptiveThreshold-funktioner, hvilket ofte er at foretrække frem for at justere lysstyrke eller kontrast. - Anvendelse af forskellige transformationer på billedet:
- Affine transformationer kan være nyttige, hvis du skal kombinere rotation, ændring af størrelse og skævhed på billedet, og du kender kilde- og destinationsplaceringen af tre punkter i billedet. Affine transformationer holder parallelle linjer parallelle.
- Perspektivtransformationer kan være nyttige, når du kender kilde- og destinationspositionerne for 4 punkter i billedet. For eksempel, hvis du tager et billede af et rektangulært dokument med et smartphonekamera fra en vinkel, og du vil lave et rektangulært billede af selve dokumentet.
- Forståelse af bevægelse i billedet ved hjælp af optisk flow.
Eksempler på brug af Computer Vision
I vores OpenCV Notebook giver vi nogle eksempler på, hvornår computer vision kan bruges til at udføre specifikke opgaver:
- Forbehandling af et fotografi af en Braille-bog. Vi fokuserer på, hvordan vi kan bruge thresholding, feature detection, perspektivtransformation og NumPy-manipulationer til at adskille individuelle Braille-symboler til videre klassifikation af et neuralt netværk.
![]() |
![]() |
![]() |
|---|
Billede fra OpenCV.ipynb
- Detektion af bevægelse i video ved hjælp af frame difference. Hvis kameraet er fast, bør frames fra kameraets feed være ret ens. Da frames er repræsenteret som arrays, vil vi ved blot at trække disse arrays fra hinanden for to efterfølgende frames få pixel-forskellen, som bør være lav for statiske frames og blive højere, når der er betydelig bevægelse i billedet.
Billede fra OpenCV.ipynb
-
Detektion af bevægelse ved hjælp af optisk flow. Optisk flow giver os mulighed for at forstå, hvordan individuelle pixels på video frames bevæger sig. Der er to typer optisk flow:
- Dense Optical Flow beregner vektorfeltet, der viser, hvor hver pixel bevæger sig hen.
- Sparse Optical Flow er baseret på at tage nogle karakteristiske træk i billedet (f.eks. kanter) og bygge deres bane fra frame til frame.
Billede fra OpenCV.ipynb
✍️ Eksempel Notebooks: OpenCV prøv OpenCV i aktion
Lad os lave nogle eksperimenter med OpenCV ved at udforske OpenCV Notebook.
Konklusion
Nogle gange kan relativt komplekse opgaver som bevægelsesdetektion eller fingerspidsdetektion løses udelukkende ved hjælp af computer vision. Derfor er det meget nyttigt at kende de grundlæggende teknikker inden for computer vision og hvad biblioteker som OpenCV kan gøre.
🚀 Udfordring
Se denne video fra AI-showet for at lære om Cortic Tigers-projektet og hvordan de byggede en blokbaseret løsning til at demokratisere computer vision-opgaver via en robot. Undersøg andre projekter som dette, der hjælper nye lærere med at komme ind i feltet.
Quiz efter lektionen
Gennemgang & Selvstudie
Læs mere om optisk flow i denne fremragende tutorial.
Opgave
I denne opgave skal du tage en video med simple gestusser, og dit mål er at udtrække op/ned/venstre/højre bevægelser ved hjælp af optisk flow.




