Sisällysluettelo:
Video: OpenCV -perusprojektit: 5 vaihetta
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Tässä projektissa tutkimme joitain OpenCV: n perustoimintoja neljän yksinkertaisen projektin kautta, joihin kuuluu suora videovirta. Näitä ovat kasvojentunnistus, taustan poisto, reunojen erityinen visuaalinen renderointi ja epätarkkuuden lisääminen live -videovirtaan. Päätavoitteeni kokeilla näitä projekteja oli yksinkertaisesti kastaa jalkani OpenCV -käyttöliittymän avulla, kun aion syventyä tietokonenäkökenttään
Tarvikkeet
- Tietokone, jossa on Python
- Avaa CV -kirjasto, Numpy -kirjasto, tkinter -kirjasto, sys -kirjasto
- Kamera tietokoneeseen yhdistämistä varten (jos tietokoneessa ei ole jo sellaista)
- Ohjelman python -tiedosto (sisältyy tähän ohjeeseen)
- haarcascade xml -tiedosto (sisältyy tähän ohjeeseen)
Vaihe 1: FaceDetect -toiminto
Tämä toiminto näyttää kameran videon vihreillä neliöillä kaikissa sen havaitsemissa kasvoissa. Koodissa käytämme cv2. VideoCapture () -toimintoa tallentamamme videon sieppaamiseen nimettyyn kohteeseen. CAPTURE_INDEX on tietokoneesi asettama numero, joka vastaa kameran hakemistoa tietokoneen videotuloluettelossa. Jos tietokoneeseen ei ole liitetty ulkoista kameraa, 0 tai 1 pitäisi toimia.
Face_cascade -objekti alustetaan käyttämällä cascadeClassifier -toimintoa ja "haarcascade_frontalface_default.xml" -tiedostoa, joka löytyy OpenCV -githubista. Käytämme tätä objektia tallentaaksesi "kasvot" -luettelossa havaitut kasvot syöttötasona nelisuuntaisena tupleina, joka pitää kasvot x koordinaatti, y-koordinaatti, leveys ja korkeus. Piirrämme sitten suorakulmion, joka ympäröi kasvot täydellisesti cv2.rectangle -funktiolla
Tästä videosta OpenCV kaappaa monia kuvia samalla silmukassamme käyttämällä capture.read () - tiedostoa ja tallentaa kuvan kehykseen, jonka nimimme "img". Jokainen kuva tulkitaan ja muokataan sitten haluamallamme tavalla. FaceDetect -sovelluksessa teemme kuvan harmaaksi käyttämällä cvtColor -toimintoa, joka muuntaa mitä tahansa ensimmäisessä parametrissa annettua kuvaa tietyntyyppiseksi toisessa parametrissa määritetyksi kuvan värityypiksi. Luettelo toisen parametrin hyväksyttävistä arvoista löytyy verkosta. Näytämme sitten kuvan ikkunassa nimeltä "Tunnistaa kasvot" käyttämällä imshow () -toimintoa, joka ottaa merkkijonon ikkunan nimen ja kuvakehyksen näyttämistä varten.
Lopuksi odotamme, että käyttäjä syöttää q -näppäimen cv2.waitKey () -toiminnolla. 0xFF -maskia käytetään yleisesti 64 -bittisissä tietokoneissa. Kun käyttäjä on lopettanut videovirran, faceDetect -toiminto vapauttaa sieppausobjektin ja tuhoaa kaikki muut OpenCV -käyttöliittymän alla avatut ikkunat. Kaikki muut toiminnot noudattavat samanlaista rakennerakennetta.
Vaihe 2: BackgroundRemove -toiminto
Tämä toiminto yrittää poistaa videomme taustaosan ja jättää vain etualan kuvan. Se ei ehkä toimi joissakin kameroissa, koska ne käyttävät valaistuksen säätötoimintoa, joka aktivoituu, kun kehykseen tulee erilaisia esineitä/ fokuksia. Jos backgroundRemove-toiminto ei toimi, älä huolestu- se voi olla vain kamerasi!
Jos haluat käyttää tätä toimintoa, astu pois kameran kehyksestä ja ota taustakuva painamalla d -näppäintä. On tärkeää, että taustalla ei ole liikkuvia esineitä, jotka haluat kaapata. Sitten voimme astua takaisin kameran kehykseen. Jos toiminto toimi, käyttäjän pitäisi nähdä vain itsensä toiminnon videovirrassa. Kaikki etualan kuvan kohina/mustat läikät voivat johtua kameran valaistuksen säätämisestä. Jos haluat ottaa toisen taustan, paina "r" -näppäintä alustaaksesi uudelleen ja paina sitten "d" uudelleen.
Jotkut tämän toiminnon tärkeimpiä poimintoja ovat "lipun" booleanin käyttö, joka nostetaan heti, kun käyttäjä painaa d-painiketta. Tämä kaappaa taustan ja antaa meille mahdollisuuden poistaa se toiminnon suoratoistamasta videosta. Pyrimme tallentamaan taustakuvan ref_img -tiedostoon, jotta voimme erottaa sen etualan kuvasta, joka tallentaa kaikki liikkuvat kohteet. Käytämme cv2.subtract () -funktiota etualan kuvan vähentämiseksi taustakuvasta ja päinvastoin, ja poistamme sitten pienet erot kahdessa kuvassa heti sen jälkeen. Tausta on tummennettu.
Fgmask tehdään käyttämällä näiden kahden kuvan eroa ja sitä käytetään sitten toimintojen videovirtaan käyttämällä OpenCV cv2.bitwise_and () -funktiota.
Vaihe 3: VideoEdges -toiminto
Tämä toiminto palauttaa live -videovirran, mutta havaittavat reunat muutetaan valkoisiksi, kun kaikki muu on pimennetty. Mikä erottaa tämän toiminnon muista toiminnoista, on alkuperäisen videomme muuntaminen RBG-muodosta HSV-muotoon, joka tarkoittaa värisävyä, kylläisyyttä ja vaihtelua- erilaista valon ja värin käsittelymenetelmää videosta. Tällä menetelmällä voimme helpommin erottaa videon ääriviivat käyttämällä suodatinta (red_low to red_high).
Canny Edge Detectionia käytetään kuvan reunojen havaitsemiseen. Se hyväksyy syötteenä harmaasävyisen kuvan ja käyttää monivaiheista algoritmia.
Vaihe 4: VideoBlur -toiminto
Tätä toimintoa käytetään lisäämään hämärtävä vaikutus videovirtaamme. Funktio yksinkertainen kutsuu GaussianBlur cv2 -funktiota kehyksessämme. Lisätietoja gaussianBlur -toiminnosta löytyy täältä:
opencv-python-tutroals.readthedocs.io/en/l…
Vaihe 5: Parannuksia
Hankkeen herkin toiminto on taustan poistotoiminto, koska se edellyttää kameran käyttöä, jossa ei ole valaistuksen säätötoimintoa. OpenCV -kirjastossa voi olla parempia toimintoja, jotka voivat ottaa huomioon tämän valaistuksen säädön ja poistaa taustan sujuvasti (samanlainen kuin vihreä näyttö).
Voisimme myös käyttää muita kasvojentunnistustoimintoja, jotka voivat tuottaa kohteita, joilla on enemmän toimintoja kuin (x, y) -koordinaattien palauttaminen. Ehkä kasvojentunnistusohjelma, jolla on kyky muistaa kasvot, ei olisi liian vaikea toteuttaa.
Hämärtystoimintoa voidaan muokata enemmän käyttäjän intuitiivisen ohjauksen avulla. Käyttäjä voi esimerkiksi haluta säätää sumennustehon voimakkuutta tai valita sumennettavaksi tietyn alueen kehyksestä.