|
|
||
|---|---|---|
| .. | ||
| lab | ||
| OpenCV.ipynb | ||
| README.md | ||
README.md
Introduktion till datorseende
Computer Vision Àr ett omrÄde som syftar till att ge datorer 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 (objektdetektion), förstÄ vad som hÀnder (hÀndelsedetektion), beskriva en bild i text eller rekonstruera en scen i 3D. Det finns ocksÄ specifika uppgifter relaterade till bilder av mÀnniskor: Älders- och kÀnsloestimering, ansiktsdetektion 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. Idag 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 en bild till ett neuralt nÀtverk kan det i mÄnga fall vara vettigt att anvÀnda vissa 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 mer kraftfullt och stöder Àven viss bildmanipulation som morfning, palettjusteringar 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 datorseendealgoritmerna. Det har ocksÄ ett Python-grÀnssnitt och kan anvÀndas för utmanande uppgifter som ansikts- och ansiktslandmÀrkesdetektion.
OpenCV
OpenCV anses vara standard 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 Learn OpenCV-kurs. I vÄr kursplan Àr mÄlet inte att lÀra sig 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 mÄste du konvertera den till RGB-fÀrgrymden, antingen genom att byta dimensioner i NumPy-arrayen eller genom att kalla en OpenCV-funktion:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
Samma cvtColor-funktion kan anvÀndas för att utföra andra fÀrgrymdstransformationer, sÄsom att konvertera en bild till grÄskala eller till HSV (Hue-Saturation-Value) 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 kalla
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 skevhet pÄ bilden och du vet 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 vet kÀll- och destinationspositionen 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 Braille-bok. Vi fokuserar pÄ hur vi kan anvÀnda tröskling, funktionsdetektion, 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 bildruteskillnad. Om kameran Àr fast, bör bildrutor frÄn kameraflödet vara ganska lika varandra. Eftersom bildrutor representeras som arrayer, kan vi genom att subtrahera dessa arrayer för tvÄ efterföljande bildrutor fÄ 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 gör det möjligt för oss att 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.
- Gles 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örelsedetektion eller fingertoppsdetektion lösas enbart med datorseende. DÀrför Àr det mycket anvÀndbart 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 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.




