9.9 KiB
Introduktion till Datorseende
Datorseende är en disciplin vars mål är att låta datorer få en hög nivå av förståelse för digitala bilder. Detta är en ganska bred definition, eftersom förståelse kan innebära många olika saker, inklusive att hitta ett objekt på en bild (objektdetektering), förstå vad som händer (händelsedetektering), beskriva en bild i text eller rekonstruera en scen i 3D. Det finns också speciella uppgifter relaterade till mänskliga bilder: ålders- och känsloestimering, ansiktsdetektering och identifiering samt 3D-positionsestimering, för att nämna några.
Quiz före föreläsningen
En av de enklaste uppgifterna inom datorseende är bildklassificering.
Datorseende anses ofta vara 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.
Men innan du skickar bilden till ett neuralt nätverk kan det i många fall vara vettigt 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 lite kraftfullare och stöder även viss bildmanipulation som morfning, justering av paletter och mer.
- OpenCV är ett kraftfullt bildbehandlingsbibliotek skrivet i C++, som har blivit standard för bildbehandling. Det har ett bekvämt Python-gränssnitt.
- dlib är ett C++-bibliotek som implementerar många maskininlärningsalgoritmer, inklusive några av algoritmerna för datorseende. Det har också ett Python-gränssnitt och kan användas för utmanande uppgifter som ansikts- och ansiktslandmärkesdetektering.
OpenCV
OpenCV anses vara standarden för bildbehandling. Det innehåller många användbara algoritmer, implementerade i C++. Du kan också använda OpenCV från Python.
En bra plats att lära sig OpenCV är denna kurs om OpenCV. I vår kursplan är vårt mål inte att lära oss OpenCV, utan att visa 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 med 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 rätt ut behöver 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)
Samma cvtColor-funktion kan användas för att utföra andra färgrymdstransformationer, som att konvertera en bild till gråskala eller till HSV (Nyans-Mättnad-Värde) färgrymden.
Du kan också använda OpenCV för att ladda videor bildruta för bildruta - ett exempel ges i övningen OpenCV Notebook.
Bildbehandling
Innan du matar en bild till ett neuralt nätverk kan du vilja tillämpa flera förbehandlingssteg. OpenCV kan göra många saker, inklusive:
- Ändra storlek på bilden med
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Suddighet på bilden med
im = cv2.medianBlur(im,3)ellerim = cv2.GaussianBlur(im, (3,3), 0) - Ändra ljusstyrka och kontrast på bilden kan göras med NumPy-arraymanipulationer, som beskrivs i denna Stackoverflow-notis.
- Använda tröskling genom att anropa
cv2.threshold/cv2.adaptiveThreshold-funktioner, vilket ofta är att föredra framför att justera ljusstyrka eller kontrast. - Tillämpa olika transformationer på bilden:
- Affina transformationer kan vara användbara om du behöver kombinera rotation, storleksändring och skevning av bilden och du känner till käll- och destinationspositionen 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 fyra punkter i bilden. Till exempel, om du tar en bild av ett rektangulärt dokument med en smartphonekamera från en viss vinkel och vill göra en rektangulär bild av själva dokumentet.
- Förstå rörelse i bilden genom att använda optisk flöde.
Exempel på användning av 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 punktskriftsbok. Vi fokuserar på hur vi kan använda tröskling, funktionsdetektering, perspektivtransformation och NumPy-manipulationer för att separera individuella punktskriftssymboler för vidare klassificering av ett neuralt nätverk.
![]() |
![]() |
![]() |
|---|
Bild från OpenCV.ipynb
- Detektera rörelse i video med hjälp av bildruteskillnad. Om kameran är fast bör bildrutorna från kameraflödet vara ganska lika varandra. Eftersom bildrutor representeras som arrayer, genom att bara subtrahera dessa arrayer för två på varandra följande bildrutor får vi pixeldifferensen, som bör vara låg för statiska bildrutor 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 optiskt flöde. Optiskt flöde låter oss förstå hur individuella pixlar på videobildrutor rör sig. 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.
- Glest optiskt flöde baseras på att ta några distinkta funktioner i bilden (t.ex. kanter) och bygga deras bana från bildruta till bildruta.
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 användbart att känna till de grundläggande teknikerna för datorseende och vad bibliotek som OpenCV kan göra.
🚀 Utmaning
Titta på denna video från AI Show 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 lärande att komma in i området.
Quiz efter föreläsningen
Granskning & Självstudier
Läs mer om optiskt flöde i denna utmärkta handledning.
Uppgift
I detta labb kommer du att ta en video med enkla gester, och ditt mål är att extrahera upp/ner/vänster/höger-rörelser med hjälp av optiskt flöde.
Ansvarsfriskrivning:
Detta dokument har översatts med hjälp av AI-översättningstjänsten Co-op Translator. Även om vi strävar efter noggrannhet, bör det noteras att automatiska översättningar kan innehålla fel eller felaktigheter. Det ursprungliga dokumentet på dess ursprungliga språk bör betraktas som den auktoritativa källan. För kritisk information rekommenderas professionell mänsklig översättning. Vi ansvarar inte för eventuella missförstånd eller feltolkningar som uppstår vid användning av denna översättning.




