Sommario:
- Forniture
- Passaggio 1: funzione FaceDetect
- Passaggio 2: funzione di rimozione dello sfondo
- Passaggio 3: funzione VideoEdges
- Passaggio 4: funzione VideoBlur
- Passaggio 5: miglioramenti
Video: Progetti di base OpenCV: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
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
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
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
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
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:
I 3 fantastici progetti di elettronica che utilizzano il transistor D-882: 9 passaggi
I 3 fantastici progetti di elettronica che utilizzano il transistor D-882: JLCPCB è la più grande impresa di prototipi di PCB in Cina e un produttore high-tech specializzato in prototipi rapidi di PCB e produzione di PCB in piccoli lotti, con oltre 10 anni di esperienza nella produzione di PCB. Sono in grado di fornire soluzioni convenienti
Come creare un RADAR usando Arduino per il progetto scientifico - I migliori progetti Arduino: 5 passaggi
Come creare un RADAR usando Arduino per il progetto scientifico | I migliori progetti Arduino: ciao amici, in questo tutorial ti mostrerò come realizzare un fantastico sistema radar costruito usando arduino nano questo progetto è l'ideale per i progetti scientifici e puoi farlo facilmente con molto meno investimenti e possibilità se vincere il premio è fantastico per
Ricevi notifiche e-mail dai tuoi progetti IoT: 6 passaggi
Ricevi notifiche e-mail dai tuoi progetti IoT: programma le notifiche e-mail che collegano i tuoi progetti IoT ad Adafruit IO e IFTTT. Ho pubblicato alcuni progetti IoT. Spero che tu li abbia visti, in caso contrario ti invito sul mio profilo e controllali. Volevo ricevere alcune notifiche quando una variabile
Un fantastico trucco per touchpad per laptop per progetti Arduino!: 18 passaggi (con immagini)
Un fantastico trucco per touchpad per laptop per progetti Arduino!: Tempo fa, quando stavo armeggiando con un touchpad PS/2 con un microcontrollore Arduino, ho scoperto che due delle sue connessioni integrate possono essere utilizzate come ingressi digitali. In questo Instructable, impariamo come possiamo utilizzare l'aggiunta di un touchpad PS/2
10 progetti Arduino di base per principianti! Realizza almeno 15 progetti con un'unica scheda!: 6 passaggi
10 progetti Arduino di base per principianti! Realizza almeno 15 progetti con una singola scheda!: Arduino Project & Consiglio di esercitazione; Include 10 progetti Arduino di base. Tutti i codici sorgente, il file Gerber e altro. Niente SMD! Saldatura facile per tutti. Componenti facilmente rimovibili e sostituibili. Puoi realizzare almeno 15 progetti con un singolo bo