Sommario:

Rilevamento facciale+riconoscimento: 8 passaggi (con immagini)
Rilevamento facciale+riconoscimento: 8 passaggi (con immagini)

Video: Rilevamento facciale+riconoscimento: 8 passaggi (con immagini)

Video: Rilevamento facciale+riconoscimento: 8 passaggi (con immagini)
Video: A.I. RICONOSCE OGGETTI da immagini, video e in tempo reale [Python OpenCV e Yolo] 2024, Novembre
Anonim
Image
Image
Rilevamento facciale+riconoscimento
Rilevamento facciale+riconoscimento

Questo è un semplice esempio di esecuzione del rilevamento e riconoscimento del volto con OpenCV da una fotocamera. NOTA: HO REALIZZATO QUESTO PROGETTO PER IL CONCORSO SENSOR E HO UTILIZZATO LA FOTOCAMERA COME SENSORE PER TRACCIARE E RICONOSCERE I VOLTI. Quindi, il nostro obiettivo In questa sessione, 1. Installa Anaconda 2. Scarica Open CV Package 3. Imposta variabili ambientali 4. Test per confermare 5 Crea codice per il rilevamento dei volti 6. Crea codice per creare set di dati 7. Crea codice per addestrare il riconoscitore 8. Crea codice per riconoscere i volti &Risultato.

Passaggio 1: installa Anaconda

Installa Anaconda
Installa Anaconda

Anaconda è essenzialmente un IDE Python ben confezionato che viene fornito con tonnellate di pacchetti utili, come NumPy, Pandas, IPython Notebook, ecc. Sembra essere raccomandato ovunque nella comunità scientifica. Dai un'occhiata ad Anaconda per installarlo.

Passaggio 2: scarica il pacchetto Open CV

Scarica il pacchetto Open CV
Scarica il pacchetto Open CV

Innanzitutto, vai sul sito ufficiale di OpenCV per scaricare il pacchetto OpenCV completo. Scegli una versione che ti piace (2.x o 3.x). Sono su Python 2.x e OpenCV 2.x - principalmente perché è così che vengono impostati/basati i tutorial OpenCV-Python.

Nel mio caso, ho estratto il pacchetto (essenzialmente una cartella) direttamente sul mio drive F. (F:\opencv).

Passaggio 3: impostare le variabili ambientali

Imposta variabili ambientali
Imposta variabili ambientali

Copia e incolla il file cv2.pyd

La directory Anaconda Site-packages (es. F:\Program Files\Anaconda2\Lib\site-packages nel mio caso) contiene i pacchetti Python che puoi importare. Il nostro obiettivo è copiare e incollare il file cv2.pyd in questa directory (in modo da poter utilizzare l'importazione cv2 nei nostri codici Python).

Per fare ciò, copia il file cv2.pyd…

Da questa directory OpenCV (la parte iniziale potrebbe essere leggermente diversa sulla tua macchina):

# Python 2.7 e macchina a 64 bit: F:\opencv\build\python\2.7\x64# Python 2.7 e macchina a 32 bit: F:\opencv\build\python\2.7\x84

In questa directory Anaconda (la parte iniziale potrebbe essere leggermente diversa sulla tua macchina):

F:\Programmi\Anaconda2\Lib\site-packages

Dopo aver eseguito questo passaggio saremo ora in grado di utilizzare import cv2 nel codice Python. MA, abbiamo ancora bisogno di fare un po' più di lavoro per far funzionare FFMPEG (codec video) (per consentirci di fare cose come l'elaborazione di video).

Fare clic con il pulsante destro del mouse su "Risorse del computer" (o "Questo PC" su Windows 8.1) -> fare clic con il pulsante sinistro del mouse su Proprietà -> fare clic con il pulsante sinistro del mouse sulla scheda "Avanzate" -> fare clic con il pulsante sinistro del mouse sul pulsante "Variabili d'ambiente…". Aggiungi una nuova variabile utente per puntare a OpenCV (x86 per sistema a 32 bit o x64 per sistema a 64 bit.) Attualmente sono su una macchina a 64 bit.

OPENCV_DIRC a 32 bit:\opencv\build\x86\vc12

OPENCV_DIRC a 64 bit:\opencv\build\x64\vc12

Aggiungi %OPENCV_DIR%\bin alla variabile utente PATH.

Ad esempio, la mia variabile utente PATH ha questo aspetto…

Prima:

F:\Utenti\Johnny\Anaconda;C:\Utenti\Johnny\Anaconda\Scripts

Dopo:

F:\Utenti\Johnny\Anaconda;C:\Utenti\Johnny\Anaconda\Scripts;%OPENCV_DIR%\bin

Ecco, abbiamo finito! FFMPEG è pronto per essere utilizzato!

Passaggio 4: prova per confermare

Prova per confermare
Prova per confermare
Prova per confermare
Prova per confermare

Dobbiamo verificare se ora possiamo farlo in Anaconda (tramite Spyder IDE):

  • Importa pacchetto OpenCV
  • Usa l'utility FFMPEG (per leggere/scrivere/elaborare video)

Test 1: possiamo importare OpenCV?

Per confermare che Anaconda è ora in grado di importare il pacchetto OpenCV-Python (vale a dire, cv2), emettere questi nella console IPython:

importa cv2

stampa cv2._versione_

Se il pacchetto cv2 viene importato correttamente senza errori e viene stampata la versione cv2, allora siamo tutti a posto!

Test 2: possiamo usare il codec FFMPEG?

Metti un campione

input_video.mp4

file video in una directory. Vogliamo verificare se possiamo:

  • leggi questo file video.mp4 e
  • scrivere un nuovo file video (può essere.avi o.mp4 ecc.)

Per fare questo abbiamo bisogno di avere un codice Python di prova, chiamalo test.py. Posizionalo nella stessa directory del campione

input_video.mp4

file.

Questo è ciò

test.py

potrebbe sembrare (Nota: molte grazie ai suggerimenti di Pete e Warren nel campo dei commenti - ho sostituito il mio codice di test originale con il suo - per favore provalo tu stesso e facci sapere se funziona meglio):

importa cv2

cap = cv2. VideoCapture("input_video.mp4") print cap.isOpened() # True = ha letto il video con successo. Falso: non riesce a leggere il video. fourcc = cv2. VideoWriter_fourcc(*'XVID') out = cv2. VideoWriter("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened() # True = scrive correttamente il video. Falso: impossibile scrivere il video. cap.release() out.release()

Questo test è MOLTO IMPORTANTE. Se desideri elaborare file video, devi assicurarti che Anaconda / Spyder IDE possa utilizzare FFMPEG (codec video). Mi ci sono voluti giorni per farlo funzionare. Ma spero che ti ci vorrà molto meno tempo!:) Nota: un altro consiglio molto importante quando si utilizza l'IDE Anaconda Spyder. Assicurati di controllare la directory di lavoro corrente (CWD)!!!

Passaggio 5: crea il codice per il rilevamento dei volti

Crea codice per il rilevamento dei volti
Crea codice per il rilevamento dei volti
Crea codice per il rilevamento dei volti
Crea codice per il rilevamento dei volti

Obiettivo

In questa sessione,

  • Vedremo le basi del rilevamento dei volti utilizzando i classificatori a cascata basati sulle funzionalità di Haar
  • Estenderemo lo stesso per il rilevamento degli occhi, ecc

Rilevamento Haar-cascade in OpenCV

Qui ci occuperemo del rilevamento. OpenCV contiene già molti classificatori pre-addestrati per viso, occhi, sorriso, ecc. Questi file XML sono archiviati nella cartella opencv/data/haarcascades/. Creiamo un rilevatore di volti e occhi con OpenCV. Per prima cosa dobbiamo caricare i classificatori XML richiesti. Quindi carica la nostra immagine di input (o video) in modalità scala di grigi OPPURE possiamo usare la fotocamera (per il rilevamento del volto in tempo reale)

importa numpy come np

import cv2 face_cascade = cv2. CascadeClassifier('F:/Programmi/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier('F:/Programmi/eyecv/sources/data/haarcascades/haarcascades/haarcascade.xml') cap = cv2. VideoCapture(0)while 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.5, 5) for (x, y, w, h) nelle facce: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = gray[y:y +h, x:x+w] roi_color = img[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray) for (ex, ey, ew, eh) in eyes: cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2) print "trovato " +str(len(faces)) +" face(s)" cv2.imshow ('img', img) k = cv2.waitKey(30) & 0xff se k == 27: break cap.release() cv2.destroyAllWindows()

Passaggio 6: crea codice per creare set di dati

Crea codice per creare set di dati
Crea codice per creare set di dati
Crea codice per creare set di dati
Crea codice per creare set di dati

Stiamo eseguendo il riconoscimento facciale, quindi avrai bisogno di alcune immagini del viso! Puoi creare il tuo set di dati o iniziare con uno dei database di volti disponibili, https://face-rec.org/databases/ ti offre una panoramica aggiornata. Tre database interessanti sono (parti della descrizione sono citate da

  • AT&T Facedatabase
  • Yale Facedatabase A
  • Database facciale esteso di Yale B

QUI sto usando il mio set di dati … con l'aiuto del codice che viene fornito di seguito:

importa numpy come np

import cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) id = raw_input('enter user id') sampleN=0; mentre 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: sampleN =campioneN+1; cv2.imwrite("F:/Programmi/progetti/face_rec/facesData/User."+str(id)+ "." +str(sampleN)+ ".jpg", grigio[y:y+h, x: x+w]) cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey(100) cv2.imshow('img', img) cv2.waitKey(1) se sampleN > 20: break cap.release() cv2.destroyAllWindows()

Passaggio 7: crea codice per addestrare il riconoscitore

Crea codice per addestrare il riconoscitore
Crea codice per addestrare il riconoscitore

Crea la funzione per preparare il training set

Ora, definiremo una funzione

getImagesWithID(percorso)

che prende il percorso assoluto al database delle immagini come argomento di input e restituisce una tupla di 2 elenchi, uno contenente i volti rilevati e l'altro contenente l'etichetta corrispondente per quel volto. Ad esempio, se l'indice i-esimo nell'elenco dei volti rappresenta il quinto individuo nel database, la posizione i-esima corrispondente nell'elenco delle etichette ha valore uguale a 5.

Ora converti le facce del set di dati (create nel passaggio 6) in un file.yml con l'aiuto del codice riportato di seguito:

importare il sistema operativo

import numpy as np import cv2 from PIL import Image # Per il riconoscimento facciale useremo il riconoscimento facciale LBPH Face Recognizer = cv2.createLBPHFaceRecognizer(); path="F:/Program Files/projects/face_rec/facesData" def getImagesWithID(path): imagePaths = [os.path.join(path, f) for f in os.listdir(path)] # print image_path #getImagesWithID(path) faces = ID = for imagePath in imagePaths: # Legge l'immagine e converti in scala di grigi facesImg = Image.open(imagePath).convert('L') faceNP = np.array(facesImg, 'uint8') # Ottieni l'etichetta dell'immagine ID= int(os.path.split(imagePath)[-1].split(".")[1]) # Rileva la faccia nell'immagine faces.append(faceNP) IDs.append (ID) cv2.imshow("Aggiunta di volti per il traning", faceNP) cv2.waitKey(10) return np.array(ID), volti Id, volti = getImagesWithID(percorso) requirer.train(faces, Ids) requirer.save ("F:/Programmi/progetti/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows()

utilizzando questo codice tutti i set di dati del viso convertiti in un singolo file.yml….il percorso è ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

Passaggio 8: crea il codice per riconoscere i volti e il risultato

Guyzz questo è l'ultimo passaggio in cui possiamo creare il codice per riconoscere i volti con l'aiuto della tua webcamIN QUESTO PASSAGGIO CI SONO DUE OPERAZIONI CHE VERRANNO ESEGUITE…. 1. catturare il video dalla cam 2. confrontarlo con il tuo file.yml

import numpy as npimport cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) rec = cv2.createLBPHFaceRecognizer(); rec.load("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id=0 font=cv2.cv. InitFont(cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) mentre 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.5, 5) for (x, y, w, h) in facce: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf=rec.predict(grigio[y:y+h, x:x+w]) if(id==2): id="alok" if id==1: id="alok" if id==3: id="anjali" if id==4: id="Gaurav" if id= =5: id='rahul' if id==6: id="akshay" cv2.cv. PutText(cv2.cv.fromarray(img), str(id), (x, y+h), font, 255) cv2.imshow('img', img) if cv2.waitKey(1) == ord('q'): break cap.release()

cv2.destroyAllWindows()

e alla fine il risultato sarà davanti ai tuoi occhi……puoi anche scaricare il file zip da sotto il link:Clicca qui per scaricare i codiciQuindi, in questa istruzione abbiamo eseguito il compito di rilevamento del volto+riconoscimento usando OpenCV…..se tu come questo istruibile….. per favore iscrivimi e votami…..grazie amici:)

Consigliato: