Cuprins:

Proiecte de bază OpenCV: 5 pași
Proiecte de bază OpenCV: 5 pași
Anonim
Proiecte de bază OpenCV
Proiecte de bază OpenCV

În acest proiect, explorăm câteva funcționalități de bază OpenCV prin intermediul a 4 proiecte simple care implică un flux video live. Acestea sunt recunoașterea facială, eliminarea fundalului, redarea vizuală specială a marginilor și aplicarea unui efect de estompare fluxului video live. Scopul meu principal pentru încercarea acestor proiecte a fost pur și simplu să-mi umez picioarele cu interfața OpenCV, deoarece intenționez să aprofundez în câmpul viziunii computerizate

Provizii

  • Calculator care rulează Python
  • Deschideți biblioteca CV, biblioteca Numpy, biblioteca tkinter, biblioteca sys
  • Cameră pentru conectare la computer (dacă computerul nu include deja una)
  • Fișierul Python al programului (inclus în acest instructable)
  • fișier XML haarcascade (inclus în acest instructable)

Pasul 1: Funcția FaceDetect

Funcția FaceDetect
Funcția FaceDetect
Funcția FaceDetect
Funcția FaceDetect

Această funcție arată videoclipul camerei dvs. cu pătrate verzi pe toate fețele pe care le prinde. În cod, folosim funcția cv2. VideoCapture () pentru a stoca videoclipul pe care îl capturăm într-un obiect numit „capture”. CAPTURE_INDEX este un număr setat de computerul dvs. care corespunde indexului camerei dvs. din lista de intrare video a computerului. Dacă nu aveți o cameră exterioară conectată la computer, 0 sau 1 ar trebui să funcționeze.

Obiectul face_cascade este inițializat utilizând funcția cascadeClassifier și fișierul „haarcascade_frontalface_default.xml” găsit în github-ul OpenCV. Folosim acest obiect pentru a stoca fețele detectate în lista „fețelor” ca o intrare cu patru direcții-tuplu care deține fețele coordonată x, coordonată y, lățime și înălțime. Apoi desenăm un dreptunghi care închide perfect fața folosind funcția cv2.rectangle

Din acest videoclip, OpenCV captează multe imagini în bucla noastră de timp folosind capture.read () și stocând imaginea într-un cadru numit „img”. Fiecare imagine este apoi interpretată și modificată după cum dorim. Pentru FaceDetect, facem imaginea gri folosind funcția cvtColor care convertește orice imagine dată în primul parametru la un anumit tip de culoare a imaginii specificată în al doilea parametru. Lista valorilor acceptabile pentru al doilea parametru poate fi găsită online. Apoi afișăm imaginea într-o fereastră numită „Detectarea feței” folosind funcția imshow () care ia un șir pentru numele ferestrei și cadrul de imagine care trebuie afișat.

În cele din urmă, așteptăm ca utilizatorul să introducă tasta q folosind funcția cv2.waitKey (). Masca 0xFF este utilizată ca o convenție pentru computerele pe 64 de biți. După ce utilizatorul a încheiat fluxul video, funcția faceDetect eliberează obiectul de captură, apoi distruge orice alte ferestre deschise sub interfața OpenCV. Toate celelalte funcții urmează o structură de proiectare similară.

Pasul 2: Funcția BackgroundRemove

Funcția BackgroundRemove
Funcția BackgroundRemove
Funcția BackgroundRemove
Funcția BackgroundRemove

Această funcție încearcă să elimine porțiunea de fundal a videoclipului nostru și să lase doar imaginea din prim-plan. Este posibil să nu funcționeze pe unele camere, deoarece acestea utilizează o funcționalitate de reglare a iluminării care este activată atunci când diferite obiecte / focare intră în cadru. Dacă funcția backgroundRemove nu funcționează, nu vă îngrijorați - ar putea fi doar camera dvs.!

Pentru a utiliza această funcție, îndepărtați-vă de cadrul camerei și apăsați tasta „d” pentru a captura imaginea de fundal. Este important să nu existe obiecte în mișcare în fundalul pe care doriți să îl capturați. Apoi, putem păși înapoi în cadrul camerei. Dacă funcția a funcționat, utilizatorul ar trebui să se vadă pe fluxul video al funcției. Orice pete de zgomot / negre din imaginea din prim-plan pot fi rezultatul reglării iluminării camerei. Pentru a captura un alt fundal, apăsați tasta „r” pentru a reinițializa, apoi apăsați din nou „d”.

Unele elemente cheie pentru această funcție este utilizarea booleanului „flag” care este ridicat în momentul în care utilizatorul apasă butonul d. Aceasta captează fundalul și ne permite să îl eliminăm din videoclipul transmis în flux de funcție. Ne propunem să stocăm imaginea de fundal în ref_img, astfel încât să o putem distinge de imaginea din prim plan, care captează orice obiect în mișcare. Folosim funcția cv2.subtract () pentru a scădea imaginea din sol din imaginea de fundal și invers, apoi anulăm orice diferență minusculă în cele două imagini imediat după. Fundalul este întunecat.

Fgmask este realizat folosind diferența dintre aceste două imagini și apoi aplicat la fluxul video de funcții utilizând funcția OpenCV cv2.bitwise_and ().

Pasul 3: Funcția VideoEdges

Funcția VideoEdges
Funcția VideoEdges
Funcția VideoEdges
Funcția VideoEdges

Această funcție returnează un flux video live, dar marginile detectabile sunt redate în alb, în timp ce restul este înnegrit. Ceea ce distinge această funcție de celelalte funcții este conversia videoclipului nostru original din format RBG în format HSV, care înseamnă nuanță, saturație și variație - o metodă diferită de procesare a luminii și a culorilor dintr-un videoclip. Cu această metodă, putem distinge mai ușor contururile din videoclip prin aplicarea unui filtru (red_low to red_high).

Canny Edge Detection este folosit pentru a detecta marginile unei imagini. Acceptă o imagine la scară de gri ca intrare și folosește un algoritm cu mai multe etape.

Pasul 4: Funcția VideoBlur

Funcția VideoBlur
Funcția VideoBlur
Funcția VideoBlur
Funcția VideoBlur

Această funcție este utilizată pentru a adăuga un efect de estompare fluxului nostru video. Funcția simplă apelează funcția cv2 GaussianBlur de pe cadrul nostru. Informații suplimentare despre funcția gaussianBlur pot fi găsite aici:

opencv-python-tutroals.readthedocs.io/en/l…

Pasul 5: Îmbunătățiri

Cea mai sensibilă funcție din acest proiect este funcția de eliminare a fundalului, deoarece necesită utilizarea unei camere care nu are funcționalitate de reglare a iluminării. S-ar putea să existe un set mai bun de funcții în biblioteca OpenCV care să poată explica această reglare a iluminării și să elimine lin fundalul (similar cu un ecran verde).

De asemenea, am putea utiliza alte funcții de detectare a feței care pot produce obiecte cu mai multe funcționalități, în afară de doar coordonatele returnate (x, y). Poate că un program de recunoaștere facială cu capacitatea de a-și aminti fețele nu ar fi prea dificil de implementat.

Funcția de estompare poate fi personalizată mai mult prin control intuitiv de către utilizator. De exemplu, utilizatorul poate dori să regleze intensitatea efectului de estompare sau să selecteze o anumită zonă din cadrul pentru a estompa.

Recomandat: