Cuprins:

Detectarea feței + recunoaștere: 8 pași (cu imagini)
Detectarea feței + recunoaștere: 8 pași (cu imagini)

Video: Detectarea feței + recunoaștere: 8 pași (cu imagini)

Video: Detectarea feței + recunoaștere: 8 pași (cu imagini)
Video: Python - curs practic de recunoastere faciala. Sistem de prezenta bazat in recunoastere faciala 2024, Noiembrie
Anonim
Image
Image
Detectarea feței + recunoaștere
Detectarea feței + recunoaștere

Acesta este un exemplu simplu de detecție și recunoaștere a feței cu OpenCV de la o cameră. NOTĂ: AM FĂCUT ACEST PROIECT PENTRU CONCURSUL DE SENZORI ȘI AM UTILIZAT CAMERA CA SENZOR PENTRU URMĂRIREA ȘI FACELE DE RECUNOAȘTERE. Deci, obiectivul nostru În această sesiune, 1. Instalați Anaconda 2. Descărcați pachetul Open CV 3. Setați variabile de mediu 4. Testați pentru a confirma 5 Creați cod pentru detectarea feței 6. Creați cod pentru a crea setul de date 7. Creați cod pentru a antrena recunoscătorul 8. Creați cod pentru a recunoaște fețele și rezultatul.

Pasul 1: Instalați Anaconda

Instalați Anaconda
Instalați Anaconda

Anaconda este în esență un IDE Python frumos ambalat care este livrat cu tone de pachete utile, cum ar fi NumPy, Pandas, Notebook IPython, etc. Se pare că este recomandat peste tot în comunitatea științifică. Consultați Anaconda pentru a-l instala.

Pasul 2: Descărcați pachetul Open CV

Descărcați pachetul Open CV
Descărcați pachetul Open CV

În primul rând, accesați site-ul oficial OpenCV pentru a descărca pachetul OpenCV complet. Alegeți o versiune care vă place (2.x sau 3.x). Sunt pe Python 2.x și OpenCV 2.x - în principal pentru că așa sunt configurate / bazate tutorialele OpenCV-Python.

În cazul meu, am extras pachetul (în esență un dosar) direct pe unitatea F. (F: / opencv).

Pasul 3: Setați variabile de mediu

Setați variabile de mediu
Setați variabile de mediu

Copiați și lipiți fișierul cv2.pyd

Directorul Anaconda Site-packages (de exemplu, F: / Program Files / Anaconda2 / Lib / site-packages în cazul meu) conține pachetele Python pe care le puteți importa. Scopul nostru este de a copia și lipi fișierul cv2.pyd în acest director (astfel încât să putem utiliza cv2 de import în codurile noastre Python.).

Pentru aceasta, copiați fișierul cv2.pyd …

Din acest director OpenCV (partea de început ar putea fi ușor diferită pe mașina dvs.):

# Mașină Python 2.7 și 64 de biți: F: / opencv / build / python / 2.7 / x64 # Mașină Python 2.7 și 32 de biți: F: / opencv / build / python / 2.7 / x84

La acest director Anaconda (partea de început ar putea fi ușor diferită pe mașina dvs.):

F: / Program Files / Anaconda2 / Lib / site-packages

După efectuarea acestui pas, vom putea folosi acum import cv2 în codul Python. DAR, trebuie totuși să facem ceva mai mult pentru ca FFMPEG (codec video) să funcționeze (pentru a ne permite să facem lucruri precum procesarea videoclipurilor.)

Faceți clic dreapta pe „Computerul meu” (sau „Acest computer” pe Windows 8.1) -> faceți clic stânga Proprietăți -> faceți clic stânga fila „Avansat” -> faceți clic stânga pe butonul „Variabile de mediu …”. Adăugați o nouă variabilă de utilizator pentru a indica către OpenCV (fie x86 pentru sistemul pe 32 de biți, fie x64 pentru sistemul pe 64 de biți.) Sunt în prezent pe o mașină pe 64 de biți.

32-bitOPENCV_DIRC: / opencv / build / x86 / vc12

64-bitOPENCV_DIRC: / opencv / build / x64 / vc12

Adăugați% OPENCV_DIR% / bin la CALEA Variabilă de utilizator.

De exemplu, variabila mea de utilizator PATH arată astfel …

Inainte de:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts

După:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts;% OPENCV_DIR% / bin

Asta am terminat! FFMPEG este gata de utilizare!

Pasul 4: Testați pentru a confirma

Testați pentru a confirma
Testați pentru a confirma
Testați pentru a confirma
Testați pentru a confirma

Trebuie să testăm dacă le putem face acum în Anaconda (prin Spyder IDE):

  • Importați pachetul OpenCV
  • Utilizați utilitarul FFMPEG (pentru a citi / scrie / procesa videoclipuri)

Testul 1: Putem importa OpenCV?

Pentru a confirma că Anaconda este acum capabil să importe pachetul OpenCV-Python (și anume, cv2), publicați-le în consola IPython:

import cv2

tipăriți cv2._ versiunea_

Dacă pachetul cv2 este importat ok fără erori, iar versiunea cv2 este tipărită, atunci suntem cu toții buni!

Testul 2: Putem folosi codecul FFMPEG?

Plasați o mostră

input_video.mp4

fișier video într-un director. Vrem să testăm dacă putem:

  • citiți acest fișier video.mp4 și
  • scrieți un fișier video nou (poate fi.avi sau.mp4 etc.)

Pentru a face acest lucru, trebuie să avem un cod de testare Python, numiți-l test.py. Plasați-l în același director ca eșantionul

input_video.mp4

fişier.

Acesta este ce

test.py

poate arăta ca (Notă: mulțumiri sugestiilor lui Pete și Warren în câmpul de comentarii - am înlocuit codul meu original de testare cu al său - vă rugăm să-l testați și să ne informați dacă funcționează mai bine):

import cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # Adevărat = citit video cu succes. Fals - nu citește videoclipul. fourcc = cv2. VideoWriter_fourcc (* 'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = scriere video cu succes. Fals - nu reușești să scrii videoclipul. cap.release () out.release ()

Acest test este FOARTE IMPORTANT. Dacă doriți să procesați fișiere video, va trebui să vă asigurați că Anaconda / Spyder IDE poate utiliza FFMPEG (codec video). Mi-au trebuit zile să ajung să funcționeze. Dar sper că ți-ar lua mult mai puțin timp!:) Notă: încă un sfat foarte important atunci când utilizați Anaconda Spyder IDE. Asigurați-vă că verificați Directorul de lucru curent (CWD) !!!

Pasul 5: Creați codul pentru detectarea feței

Creați cod pentru detectarea feței
Creați cod pentru detectarea feței
Creați cod pentru detectarea feței
Creați cod pentru detectarea feței

Poartă

În această sesiune,

  • Vom vedea elementele de bază ale detectării feței folosind clasificatoarele Cascade bazate pe caracteristici Haar
  • Vom extinde același lucru pentru detectarea ochilor etc.

Detectarea cascadei Haar în OpenCV

Aici ne vom ocupa de detectare. OpenCV conține deja multe clasificatoare pre-antrenate pentru față, ochi, zâmbet etc. Aceste fișiere XML sunt stocate în folderul opencv / data / haarcascades /. Să creăm detector de față și ochi cu OpenCV. Mai întâi trebuie să încărcăm clasificatorii XML necesari. Apoi încărcați imaginea de intrare (sau video) în modul de tonuri de gri SAU putem folosi camera (pentru detectarea feței în timp real)

import numpy ca np

import cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sources / data / haarcascades / haarcascade.xml ') cap = cv2. VideoCapture (0) în timp ce 1: ret, img = cap.read () gri = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (gri, 1.5, 5) pentru (x, y, w, h) în fețe: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) roi_gray = gri [y: y + h, x: x + w] roi_color = img [y: y + h, x: x + w] eyes = eye_cascade.detectMultiScale (roi_gray) pentru (ex, ey, ew, eh) în ochi: cv2.rectangle (roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) print "found" + str (len (faces)) + "face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()

Pasul 6: Creați cod pentru a crea set de date

Creați cod pentru a crea set de date
Creați cod pentru a crea set de date
Creați cod pentru a crea set de date
Creați cod pentru a crea set de date

Facem recunoașterea feței, așa că veți avea nevoie de câteva imagini ale feței! Puteți fie să creați propriul set de date, fie să începeți cu una dintre bazele de date de față disponibile, https://face-rec.org/databases/ vă oferă o imagine de ansamblu actualizată. Sunt trei baze de date interesante (părți ale descrierii sunt citate de pe

  • AT&T Facedatabase
  • Yale Facedatabase A
  • Bază de date Yale extinsă B

AICI folosesc propriul meu set de date …. cu ajutorul codului dat mai jos:

import numpy ca 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; în timp ce 1: ret, img = cap.read () gri = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) fețe = face_cascade.detectMultiScale (gri, 1.3, 5) pentru (x, y, w, h) în fețe: sampleN = eșantion N + 1; cv2.imwrite ("F: / Program Files / projects / face_rec / facesData / User." + str (id) + "." + str (sampleN) + ".jpg", gri [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) if sampleN> 20: break cap.release () cv2.destroyAllWindows ()

Pasul 7: Creați cod pentru a instrui recunoscătorul

Creați cod pentru a instrui recunoscătorul
Creați cod pentru a instrui recunoscătorul

Creați funcția pentru a pregăti setul de antrenament

Acum, vom defini o funcție

getImagesWithID (cale)

care ia calea absolută către baza de date de imagini ca argument de intrare și returnează tuplul de 2 liste, una conținând fețele detectate și cealaltă conținând eticheta corespunzătoare pentru acea față. De exemplu, dacă indexul ith din lista fețelor reprezintă a cincea persoană din baza de date, atunci locația ith corespunzătoare din lista de etichete are o valoare egală cu 5.

Acum convertiți fețele setului de date (care este creat la pasul 6) în fișier.yml cu ajutorul codului dat mai jos:

import os

import numpy ca np import cv2 din PIL import Imagine # Pentru recunoașterea feței vom recunoaște LBPH Face Recognizer = cv2.createLBPHFaceRecognizer (); cale = "F: / Fișiere de program / proiecte / face_rec / facesData" def getImagesWithID (cale): imagePaths = [os.path.join (cale, f) pentru f în os.listdir (cale)] # print image_path #getImagesWithID (cale) fețe = ID-uri = pentru imagePath în imagePaths: # Citiți imaginea și convertiți-le în imagini în tonuri de gri facesImg = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg, 'uint8') # Obțineți eticheta ID-ului imaginii = int (os.path.split (imagePath) [- 1].split (".") [1]) # Detectați fața din imaginea ID-urilor faces.append (faceNP). (ID) cv2.imshow („Adăugarea fețelor pentru traning”, faceNP) cv2.waitKey (10) returnează np.array (ID-uri), fețe Id-uri, fețe = getImagesWithID (cale) recognizer.train (fețe, Id-uri) recognizer.save ("F: / Fișiere de program / proiecte / face_rec / faceREC / trainingdata.yml") cv2.destroyAllWindows ()

utilizând acest cod, toate seturile de date de față au fost convertite într-un singur fișier.yml ….. locația căii este („F: / Fișiere de program / proiecte / face_rec / faceREC / trainingdata.yml”)

Pasul 8: Creați cod pentru a recunoaște fețele și rezultatul

Guyzz acesta este ultimul pas în care putem crea codul pentru a recunoaște fețele cu ajutorul camerei dvs. web ÎN ACEST PAS ESTE DOUĂ OPERAȚII CARE SE VOR REALIZA … 1. capturarea videoclipului din camera 2. comparați-l cu fișierul dvs..yml

import numpy ca 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: / Fișiere de program / proiecte / face_rec / faceREC / trainingdata.yml”) id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) în timp ce 1: ret, img = cap.read () gri = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (gri, 1.5, 5) pentru (x, y, w, h) în fețe: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) id, conf = rec.predict (gri [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 ()

și, în cele din urmă, rezultatul a venit în fața ochilor tăi …… poți descărca și fișierul zip de sub link: Faceți clic aici pentru a descărca codurile Deci, în acest instructable am efectuat sarcina de detectare a feței + recunoaștere folosind OpenCV …..dacă sunteți ca asta instructabil ….. plzzz abonează-mă și votează-mă … mulțumesc prietenilor:)

Recomandat: