Sommario:

Progetti di base OpenCV: 5 passaggi
Progetti di base OpenCV: 5 passaggi

Video: Progetti di base OpenCV: 5 passaggi

Video: Progetti di base OpenCV: 5 passaggi
Video: OpenCV tutorial for beginners | FULL COURSE in 3 hours with Python 2024, Novembre
Anonim
Progetti di base OpenCV
Progetti di base OpenCV

In questo progetto, esploriamo alcune funzionalità di base di OpenCV attraverso 4 semplici progetti che coinvolgono un flusso video in diretta. Si tratta di riconoscimento facciale, rimozione dello sfondo, rendering visivo speciale dei bordi e applicazione di un effetto sfocato al flusso video in diretta. Il mio scopo principale per provare questi progetti era semplicemente quello di bagnarmi i piedi con l'interfaccia OpenCV, poiché ho intenzione di approfondire il campo della visione artificiale

Forniture

  • Computer con Python
  • Libreria Open CV, libreria Numpy, libreria tkinter, libreria sys
  • Fotocamera per la connessione al computer (se il computer non ne include già una)
  • File python del programma (incluso in questo istruibile)
  • file xml haarcascade (incluso in questo istruibile)

Passaggio 1: funzione FaceDetect

Funzione FaceDetect
Funzione FaceDetect
Funzione FaceDetect
Funzione FaceDetect

Questa funzione mostra il video della videocamera con quadrati verdi sui volti rilevati. Nel codice, usiamo la funzione cv2. VideoCapture() per memorizzare il video che stiamo catturando in un oggetto chiamato "capture". CAPTURE_INDEX è un numero impostato dal computer che corrisponde all'indice della videocamera nell'elenco degli ingressi video del computer. Se non hai una videocamera esterna collegata al computer, 0 o 1 dovrebbero funzionare.

L'oggetto face_cascade viene inizializzato utilizzando la funzione cascadeClassifier e il file "haarcascade_frontalface_default.xml" che si trova nel github OpenCV. Utilizziamo questo oggetto per memorizzare le facce rilevate nell'elenco "facce" come una tupla a quattro vie di ingresso che contiene le coordinate x, y, larghezza e altezza delle facce. Quindi disegniamo un rettangolo che racchiude perfettamente la faccia usando la funzione cv2.rectangle

Da questo video, OpenCV cattura molte immagini nel nostro ciclo while usando capture.read() e memorizzando l'immagine in un frame che abbiamo chiamato "img". Ogni immagine viene poi interpretata e modificata a nostro piacimento. Per faceDetect, rendiamo l'immagine grigia utilizzando la funzione cvtColor che converte qualsiasi immagine fornita nel primo parametro in un particolare tipo di colore dell'immagine specificato nel secondo parametro. L'elenco dei valori accettabili per il secondo parametro è disponibile online. Quindi visualizziamo l'immagine in una finestra denominata "Detecting the face" utilizzando la funzione imshow() che richiede una stringa per il nome della finestra e la cornice dell'immagine da visualizzare.

Infine aspettiamo che l'utente inserisca il tasto q usando la funzione cv2.waitKey(). La maschera 0xFF viene utilizzata come convenzione per i computer a 64 bit. Dopo che l'utente ha terminato il flusso video, la funzione faceDetect libera l'oggetto di acquisizione, quindi distrugge qualsiasi altra finestra aperta nell'interfaccia OpenCV. Tutte le altre funzioni seguono una struttura di progettazione simile.

Passaggio 2: funzione di rimozione dello sfondo

Funzione Rimuovi sfondo
Funzione Rimuovi sfondo
Funzione Rimuovi sfondo
Funzione Rimuovi sfondo

Questa funzione tenta di rimuovere la porzione di sfondo del nostro video e di lasciare solo l'immagine in primo piano. Potrebbe non funzionare su alcune fotocamere, poiché utilizzano una funzionalità di regolazione dell'illuminazione che si attiva quando diversi oggetti/focali entrano nell'inquadratura. Se la tua funzione di rimozione dello sfondo non funziona, non preoccuparti: potrebbe essere solo la tua fotocamera!

Per utilizzare questa funzione, allontanarsi dall'inquadratura della fotocamera e premere il tasto "d" per acquisire l'immagine di sfondo. È importante che non ci siano oggetti in movimento sullo sfondo che si desidera catturare. Quindi, possiamo tornare all'inquadratura della fotocamera. Se la funzione ha funzionato, l'utente dovrebbe vedere solo se stesso nel flusso video della funzione. Eventuali disturbi/macchie nere nell'immagine in primo piano possono essere il risultato della regolazione dell'illuminazione della fotocamera. Per acquisire un altro sfondo, premere il tasto "r" per reinizializzare, quindi premere nuovamente "d".

Alcuni punti chiave per questa funzione sono l'uso del booleano "flag" che viene sollevato nell'istante in cui l'utente preme il pulsante d. Questo cattura lo sfondo e ci permette di rimuoverlo dal video che viene trasmesso in streaming dalla funzione. Miriamo a memorizzare l'immagine di sfondo in ref_img in modo da poterla distinguere dall'immagine in primo piano, che cattura qualsiasi oggetto in movimento. Usiamo la funzione cv2.subtract() per sottrarre l'immagine in primo piano dall'immagine di sfondo e viceversa, quindi eliminiamo ogni minuscola differenza nelle due immagini subito dopo. Lo sfondo è oscurato.

L'fgmask viene realizzato utilizzando la differenza tra queste due immagini e quindi applicato al flusso video delle funzioni utilizzando la funzione OpenCV cv2.bitwise_and().

Passaggio 3: funzione VideoEdges

Funzione VideoEdges
Funzione VideoEdges
Funzione VideoEdges
Funzione VideoEdges

Questa funzione restituisce un nostro flusso video in diretta, ma i bordi rilevabili vengono resi bianchi mentre tutto il resto viene oscurato. Ciò che distingue questa funzione dalle altre funzioni è la conversione del nostro video originale dal formato RBG a HSV, che sta per tonalità, saturazione e variazione, un metodo diverso di elaborazione della luce e del colore da un video. Con questo metodo, possiamo distinguere più facilmente i contorni nel video applicando un filtro (da rosso_basso a rosso_alto).

Canny Edge Detection viene utilizzato per rilevare i bordi di un'immagine. Accetta un'immagine in scala di grigi come input e utilizza un algoritmo multistadio.

Passaggio 4: funzione VideoBlur

Funzione Sfocatura video
Funzione Sfocatura video
Funzione Sfocatura video
Funzione Sfocatura video

Questa funzione viene utilizzata per aggiungere un effetto di sfocatura al nostro flusso video. La funzione simple chiama la funzione GaussianBlur cv2 sul nostro frame. Ulteriori informazioni sulla funzione gaussianBlur sono disponibili qui:

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

Passaggio 5: miglioramenti

La funzione più delicata in questo progetto è la funzione di rimozione dello sfondo, poiché richiede l'uso di una telecamera che non dispone della funzionalità di regolazione dell'illuminazione. Potrebbe esserci un migliore set di funzioni all'interno della libreria OpenCV che può tenere conto di questa regolazione dell'illuminazione e rimuovere senza problemi lo sfondo (simile a uno schermo verde).

Potremmo anche utilizzare altre funzioni di rilevamento del volto che possono produrre oggetti con più funzionalità oltre alla semplice restituzione delle coordinate (x, y). Forse un programma di riconoscimento facciale con la capacità di ricordare i volti non sarebbe troppo difficile da implementare.

La funzione di sfocatura può essere resa più personalizzabile tramite il controllo intuitivo da parte dell'utente. Ad esempio, l'utente potrebbe voler regolare l'intensità dell'effetto di sfocatura o selezionare un'area specifica all'interno della cornice da sfocare.

Consigliato: