Innholdsfortegnelse:
- Rekvisita
- Trinn 1: FaceDetect -funksjon
- Trinn 2: Bakgrunn Fjern funksjon
- Trinn 3: VideoEdges -funksjon
- Trinn 4: VideoBlur -funksjon
- Trinn 5: Forbedringer
Video: OpenCV Basic Projects: 5 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
I dette prosjektet utforsker vi noen grunnleggende OpenCV -funksjonalitet gjennom 4 enkle prosjekter som involverer en live videostrøm. Disse er ansiktsgjenkjenning, fjerning av bakgrunn, spesiell visuell gjengivelse av kanter og påføring av en uskarphet effekt på den levende videostrømmen. Hovedformålet mitt med å prøve disse prosjektene var å bare få føttene mine våte med OpenCV -grensesnittet, ettersom jeg planlegger å dykke dypere innen datasyn
Rekvisita
- Datamaskin som kjører Python
- Åpent CV -bibliotek, Numpy bibliotek, tkinter bibliotek, sys bibliotek
- Kamera for tilkobling til datamaskin (hvis datamaskinen ikke allerede har et)
- Programmets python -fil (inkludert i denne instruksjonsboken)
- haarcascade xml -fil (inkludert i denne instruksjonsboken)
Trinn 1: FaceDetect -funksjon
Denne funksjonen viser kameraets video med grønne firkanter på alle ansikter det tar opp. I koden bruker vi funksjonen cv2. VideoCapture () til å lagre videoen vi fanger i et objekt som heter "capture". CAPTURE_INDEX er et tall som er angitt av datamaskinen din og som tilsvarer indeksen til kameraet i datamaskinens videoinngangsliste. Hvis du ikke har et eksternt kamera koblet til datamaskinen din, bør 0 eller 1 fungere.
Face_cascade -objektet initialiseres ved hjelp av cascadeClassifier -funksjonen og "haarcascade_frontalface_default.xml" -filen som finnes i OpenCV github. Vi bruker dette objektet til å lagre ansiktene som er oppdaget i listen "ansikter" som en oppføring fireveis-tuppel som holder ansiktene x-koordinat, y-koordinat, bredde og høyde. Vi tegner deretter et rektangel som omslutter ansiktet perfekt ved hjelp av funksjonen cv2.rectangle
Fra denne videoen fanger OpenCV mange bilder i vår loop mens vi bruker capture.read () og lagrer bildet i en ramme vi kalte "img". Hvert bilde blir deretter tolket og modifisert som vi ønsker. For faceDetect gjør vi bildet grått ved hjelp av cvtColor -funksjonen som konverterer bildet som er gitt i den første parameteren til en bestemt type bildefarge som er angitt i den andre parameteren. Listen over akseptable verdier for den andre parameteren finnes online. Vi viser deretter bildet i et vindu med navnet "Detecting the face" ved hjelp av imshow () -funksjonen som tar en streng for vindusnavnet og bilderammen som skal vises.
Til slutt venter vi på at brukeren angir q -tasten med funksjonen cv2.waitKey (). 0xFF -masken brukes som en konvensjon for 64 -biters datamaskiner. Etter at brukeren har avsluttet videostrømmen, frigjør faceDetect -funksjonen fangstobjektet og ødelegger alle andre vinduer som åpnes under OpenCV -grensesnittet. Alle de andre funksjonene følger en lignende designstruktur.
Trinn 2: Bakgrunn Fjern funksjon
Denne funksjonen prøver å fjerne bakgrunnsdelen av videoen vår og bare la bildet i forgrunnen være. Det fungerer kanskje ikke på noen kameraer, ettersom de bruker en lysjusteringsfunksjonalitet som aktiveres når forskjellige objekter/ brennpunkter kommer inn i rammen. Hvis bakgrunnsfjerningsfunksjonen din ikke fungerer, ikke bekymre deg- det kan bare være kameraet ditt!
For å bruke denne funksjonen, gå bort fra kamerarammen og trykk på "d" -tasten for å ta bakgrunnsbildet. Det er viktig at det ikke er noen objekter i bevegelse i bakgrunnen du ønsker å fange. Deretter kan vi gå tilbake til kamerarammen. Hvis funksjonen fungerte, bør brukeren bare se seg selv på funksjonens videostrøm. Eventuell støy/svarte klatter i forgrunnsbildet kan være et resultat av kameraets lysjustering. For å fange en annen bakgrunn, trykk på "r" -tasten for å initialisere på nytt, og trykk deretter på "d" igjen.
Noen viktige takeaways for denne funksjonen er bruk av "flagg" boolsk som heves i det øyeblikket brukeren trykker på d-knappen. Dette fanger bakgrunnen og lar oss fjerne den fra videoen som streames av funksjonen. Vi tar sikte på å lagre bakgrunnsbildet i ref_img slik at vi kan skille det fra forgrunnsbildet, som fanger ethvert objekt i bevegelse. Vi bruker funksjonen cv2.subtract () til å trekke forgrunnsbildet fra bakgrunnsbildet og omvendt, og deretter fjerne alle små forskjeller i de to bildene umiddelbart etter. Bakgrunnen er mørklagt.
Fgmasken lages ved hjelp av forskjellen mellom disse to bildene og brukes deretter på funksjonene videostrøm ved hjelp av OpenCV cv2.bitwise_and () -funksjonen.
Trinn 3: VideoEdges -funksjon
Denne funksjonen returnerer en live videostrøm, men de påvisbare kantene gjengis hvite mens alt annet er mørkt. Det som skiller denne funksjonen fra de andre funksjonene er konverteringen av vår originale video fra RBG-format til HSV, som står for fargetone, metning og variasjon- en annen metode for behandling av lys og farger fra en video. Med denne metoden kan vi lettere skille konturer i videoen ved å bruke et filter (red_low til red_high).
Canny Edge Detection brukes til å oppdage kantene i et bilde. Den godtar et gråtonebilde som input, og den bruker en flertrinns algoritme.
Trinn 4: VideoBlur -funksjon
Denne funksjonen brukes til å legge til en uskarpe effekt i videostrømmen vår. Funksjonen kaller GaussianBlur cv2 -funksjonen på rammen vår. Mer informasjon om gaussianBlur -funksjonen finner du her:
opencv-python-tutroals.readthedocs.io/en/l…
Trinn 5: Forbedringer
Den mest følsomme funksjonen i dette prosjektet er funksjonen for fjerning av bakgrunn, ettersom det krever bruk av et kamera som ikke har lysjusteringsfunksjonalitet. Det kan være et bedre sett med funksjoner i OpenCV -biblioteket som kan stå for denne lysjusteringen og jevnt fjerne bakgrunnen (ligner en grønn skjerm).
Vi kan også bruke andre ansiktsgjenkjenningsfunksjoner som kan produsere objekter med mer funksjonalitet enn bare å returnere (x, y) koordinater. Kanskje et ansiktsgjenkjenningsprogram med evnen til å huske ansikter ikke ville være for vanskelig å implementere.
Uklarhetsfunksjonen kan gjøres mer tilpasset via intuitiv kontroll av brukeren. For eksempel kan det hende at brukeren vil justere intensiteten til uskarphetseffekten eller velge et bestemt område i rammen for å bli uskarpt.
Anbefalt:
Håndholdt BASIC datamaskin: 6 trinn (med bilder)
Håndholdt BASIC datamaskin: Denne instruksjonsboken beskriver prosessen min med å bygge en liten håndholdt datamaskin som kjører BASIC. Datamaskinen er bygget rundt ATmega 1284P AVR -brikken, som også inspirerte det dumme navnet på datamaskinen (HAL 1284). Denne konstruksjonen er STORT inspirert av
NAIN 1.0 - Basic Humanoid Robot Using Arduino: 6 trinn
NAIN 1.0 - Basic Humanoid Robot Using Arduino: Nain 1.0 vil ha i utgangspunktet 5 avtakbare moduler- 1) Arm - som kan styres via servoer. 2) Hjul - som kan styres med likestrømsmotorer. 3) Leg - Nain vil kunne veksle mellom hjul eller ben for bevegelse. 4) Hodet og
Walter Microbot Bot Basic Movement: 26 trinn
Walter the Microbot Bot Basic Movement: Vi skal programmere Walter the Micro: Bot
Crazy Impressive Science/engineering Projects: 10 Steps
Crazy Impressive Science/engineering Projects: Vil du ha det beste vitenskap/ingeniørprosjektet noensinne? Les videre
Raspberry Pi Projects Automation: 7 trinn
Raspberry Pi Projects Automation: Denne instruksen inneholder en liste over noen av skriptene som brukes til å automatisere ting på bringebær -pi. De forskjellige skriptene har blitt slått sammen til en enkelt pakke som kan brukes til å administrere pi -en din. De kan potensielt også brukes på alle andre