|
|
||
|---|---|---|
| .. | ||
| lab | ||
| OpenCV.ipynb | ||
| README.md | ||
README.md
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.




