10 KiB
Introduktion till Datorseende
Datorseende är en disciplin vars syfte är att möjliggöra för datorer att få en hög nivå av förståelse av digitala bilder. Detta är en ganska bred definition, eftersom förståelse kan betyda många olika saker, inklusive att hitta ett objekt på en bild (objektdetektering), förstå vad som händer (händelsedetektering), beskriva en bild med text eller rekonstruera en scen i 3D. Det finns också särskilda uppgifter relaterade till mänskliga bilder: ålders- och känslomätningsuppskattning, ansiktsdetektering och identifiering, samt 3D-hållningsuppskattning, för att nämna några.
För-föreläsningsquiz
En av de enklaste uppgifterna inom datorseende är bildklassificering.
Datorseende betraktas ofta som en gren av AI. Numera löses de flesta uppgifter inom datorseende med hjälp av neurala nätverk. Vi kommer att lära oss mer om den speciella typen av neurala nätverk som används för datorseende, konvolutionella neurala nätverk, under denna sektion.
Innan du skickar bilden till ett neuralt nätverk är det dock i många fall förnuftigt att använda några algoritmiska tekniker för att förbättra bilden.
Det finns flera Python-bibliotek tillgängliga för bildbehandling:
- imageio kan användas för att läsa/skriva olika bildformat. Det stöder också ffmpeg, ett användbart verktyg för att konvertera videoramar till bilder.
- Pillow (även känt som PIL) är något mer kraftfullt och stöder även viss bildmanipulation såsom morphing, palettjusteringar och mer.
- OpenCV är ett kraftfullt bildbehandlingsbibliotek skrivet i C++, som har blivit den de facto standarden för bildbehandling. Det har ett praktiskt Python-gränssnitt.
- dlib är ett C++-bibliotek som implementerar många maskininlärningsalgoritmer, inklusive några av datorseendets algoritmer. Det har också ett Python-gränssnitt och kan användas för utmanande uppgifter såsom ansikts- och ansiktslandmarksdetektering.
OpenCV
OpenCV anses vara den de facto standarden för bildbehandling. Det innehåller många användbara algoritmer, implementerade i C++. Du kan även anropa OpenCV från Python.
En bra plats att lära sig OpenCV är denna Learn OpenCV-kurs. I vår läroplan är vårt mål inte att lära oss OpenCV, utan att visa dig några exempel på när det kan användas och hur.
Ladda Bilder
Bilder i Python kan bekvämt representeras av NumPy-arrayer. Till exempel skulle gråskalebilder med storleken 320x200 pixlar lagras i en 200x320-array, och färgbilder av samma dimension skulle ha formen 200x320x3 (för 3 färgkanaler). För att ladda en bild kan du använda följande kod:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
Traditionellt använder OpenCV BGR (Blå-Grön-Röd) kodning för färgbilder, medan resten av Python-verktygen använder den mer traditionella RGB (Röd-Grön-Blå). För att bilden ska se korrekt ut måste du konvertera den till RGB-färgrymden, antingen genom att byta dimensioner i NumPy-arrayen eller genom att anropa en OpenCV-funktion:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
De samma cvtColor function can be used to perform other color space transformations such as converting an image to grayscale or to the HSV (Hue-Saturation-Value) color space.
You can also use OpenCV to load video frame-by-frame - an example is given in the exercise OpenCV Notebook.
Image Processing
Before feeding an image to a neural network, you may want to apply several pre-processing steps. OpenCV can do many things, including:
- Resizing the image using
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Blurring the image using
im = cv2.medianBlur(im,3)orim = cv2.GaussianBlur(im, (3,3), 0) - Changing the brightness and contrast of the image can be done by NumPy array manipulations, as described in this Stackoverflow note.
- Using thresholding by calling
cv2.threshold/cv2.adaptiveThresholdfunktionerna, som ofta är att föredra framför att justera ljusstyrka eller kontrast. - Tillämpa olika transformeringar på bilden:
- Affina transformationer kan vara användbara om du behöver kombinera rotation, ändring av storlek och snedvridning på bilden och du känner till käll- och destinationslägen för tre punkter i bilden. Affina transformationer håller parallella linjer parallella.
- Perspektivtransformationer kan vara användbara när du känner till käll- och destinationspositionerna för 4 punkter i bilden. Till exempel, om du tar en bild av ett rektangulärt dokument via en smartphonekamera från en viss vinkel, och du vill göra en rektangulär bild av dokumentet självt.
- Förstå rörelse inuti bilden genom att använda optisk flöde.
Exempel på att använda Datorseende
I vår OpenCV Notebook ger vi några exempel på när datorseende kan användas för att utföra specifika uppgifter:
- Förbehandling av ett fotografi av en Braillebok. Vi fokuserar på hur vi kan använda tröskelvärden, funktionsdetektering, perspektivtransformation och NumPy-manipulationer för att separera individuella Braille-symboler för vidare klassificering av ett neuralt nätverk.
![]() |
![]() |
![]() |
|---|
Bild från OpenCV.ipynb
- Detektera rörelse i video med hjälp av ramdiff. Om kameran är fixerad, bör ramar från kameraflödet vara ganska lika varandra. Eftersom ramar representeras som arrayer, får vi genom att subtrahera dessa arrayer för två efterföljande ramar pixel-differensen, som bör vara låg för statiska ramar och bli högre när det finns betydande rörelse i bilden.
Bild från OpenCV.ipynb
-
Detektera rörelse med hjälp av Optisk Flöde. Optisk flöde gör att vi kan förstå hur individuella pixlar på videoramrörelser. Det finns två typer av optiskt flöde:
- Tätt optiskt flöde beräknar vektorfältet som visar för varje pixel var den rör sig.
- Spars optiskt flöde baseras på att ta några distinkta funktioner i bilden (t.ex. kanter) och bygga deras bana från ram till ram.
Bild från OpenCV.ipynb
✍️ Exempel Notebooks: OpenCV prova OpenCV i praktiken
Låt oss göra några experiment med OpenCV genom att utforska OpenCV Notebook
Slutsats
Ibland kan relativt komplexa uppgifter som rörelsedetektering eller fingertoppsdetektering lösas enbart med datorseende. Därför är det mycket hjälpsamt att känna till de grundläggande teknikerna inom datorseende och vad bibliotek som OpenCV kan göra.
🚀 Utmaning
Titta på denna video från AI-showen för att lära dig om Cortic Tigers-projektet och hur de byggde en blockbaserad lösning för att demokratisera datorseendeuppgifter via en robot. Gör lite forskning om andra projekt som detta som hjälper nya inlärare att komma in i området.
Efter-föreläsningsquiz
Granskning & Självstudie
Läs mer om optiskt flöde i denna fantastiska handledning.
Uppgift
I detta laboratorium kommer du att spela in en video med enkla gester, och ditt mål är att extrahera upp/ned/vänster/höger rörelser med hjälp av optiskt flöde.
Ansvarsfriskrivning:
Detta dokument har översatts med hjälp av maskinbaserade AI-översättningstjänster. Även om vi strävar efter noggrannhet, vänligen var medveten om att automatiserade översättningar kan innehålla fel eller brister. Det ursprungliga dokumentet på sitt modersmål bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för några missförstånd eller feltolkningar som uppstår från användningen av denna översättning.




