GanGster 514 Posted yesterday at 12:44 Recunoașterea facială este una dintre cele mai fascinante și utile aplicații ale inteligenței artificiale, cu impact puternic în securitate, accesul biometric, interacțiunea om-calculator și marketing. Acest tutorial pas cu pas te va ghida să creezi un model simplu și eficient de recunoaștere facială folosind Python și OpenCV, două dintre cele mai populare instrumente pentru procesarea imaginilor și viziune computerizată. Cuprins Ce este recunoașterea facială? De ce să folosești Python și OpenCV? Pregătirea mediului de dezvoltare Detectarea fețelor cu Haar Cascades Prelucrarea imaginilor pentru recunoaștere Construirea modelului de recunoaștere facială cu LBPH Testarea modelului Optimizări și bune practici Concluzii și următorii pași 1. Ce este recunoașterea facială? Recunoașterea facială presupune identificarea sau verificarea identității unei persoane pe baza caracteristicilor unice ale feței sale. Aceasta include două faze majore: detectarea feței în imagine și recunoașterea propriu-zisă a identității. Aplicațiile variază de la deblocarea telefoanelor, controlul accesului la clădiri, supravegherea video, până la personalizarea experienței utilizatorului. 2. De ce să folosești Python și OpenCV? Python este un limbaj de programare flexibil, cu o comunitate vastă și multe librării pentru AI și procesarea imaginilor. OpenCV este o bibliotecă open-source pentru viziune computerizată, care oferă unelte robuste pentru detectarea și recunoașterea feței, precum și pentru manipularea imaginilor și videoclipurilor. 3. Pregătirea mediului de dezvoltare Începe prin a instala Python (ideal versiunea 3.8 sau mai nouă) și librăria OpenCV: pip install opencv-python numpy De asemenea, pentru stocarea datelor și interfață, poți folosi Jupyter Notebook sau un IDE preferat (ex: VS Code). 4. Detectarea fețelor cu Haar Cascades Primul pas este să detectăm fața în imagini sau video. OpenCV oferă clasificatoare Haar Cascade pre-antrenate pentru detectarea fețelor. import cv2 # Încarcă clasificatorul Haar Cascade pentru față face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') # Citește o imagine img = cv2.imread('exemplu.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Detectează fețele în imagine faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5) # Desenează dreptunghiuri în jurul fețelor detectate for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.imshow('Detecție față', img) cv2.waitKey(0) cv2.destroyAllWindows() Acest cod încarcă o imagine, convertește în tonuri de gri, detectează fețele și le marchează cu dreptunghiuri albastre. 5. Prelucrarea imaginilor pentru recunoaștere Modelul de recunoaștere are nevoie de imagini de față standardizate. Pentru fiecare față detectată: Se decupează regiunea feței Se redimensionează la o dimensiune fixă (ex: 200x200 pixeli) Se normalizează pentru consistență 6. Construirea modelului de recunoaștere facială cu LBPH Local Binary Patterns Histograms (LBPH) este un algoritm simplu și robust pentru recunoaștere facială. Pentru antrenare ai nevoie de: Un set de imagini cu fețele persoanelor etichetate Cod pentru antrenarea și salvarea modelului import cv2 import os import numpy as np def get_images_and_labels(path): face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') face_samples = [] ids = [] for root, dirs, files in os.walk(path): for file in files: if file.endswith('jpg') or file.endswith('png'): img_path = os.path.join(root, file) img = cv2.imread(img_path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray) for (x,y,w,h) in faces: face_samples.append(gray[y:y+h, x:x+w]) # Presupunem că numele folderului este ID-ul persoanei id = int(os.path.basename(root)) ids.append(id) return face_samples, ids path = 'dataset' # Structura: dataset/1/img1.jpg, dataset/2/img2.jpg etc. faces, ids = get_images_and_labels(path) recognizer = cv2.face.LBPHFaceRecognizer_create() recognizer.train(faces, np.array(ids)) recognizer.save('trainer.yml') În acest exemplu, imaginile sunt organizate în subfoldere numerotate care reprezintă ID-ul persoanei. Codul antrenează modelul și îl salvează. 7. Testarea modelului După antrenare, poți încărca modelul și verifica dacă recunoaște fețele din imagini sau video în timp real: recognizer = cv2.face.LBPHFaceRecognizer_create() recognizer.read('trainer.yml') face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray) for (x,y,w,h) in faces: id, confidence = recognizer.predict(gray[y:y+h, x:x+w]) if confidence < 50: cv2.putText(frame, f"ID: {id}", (x,y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,255,0), 2) else: cv2.putText(frame, "Necunoscut", (x,y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,0,255), 2) cv2.rectangle(frame, (x,y), (x+w,y+h), (255,0,0), 2) cv2.imshow('Recunoastere faciala', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() 8. Optimizări și bune practici Folosește imagini diverse pentru antrenare: lumină diferită, expresii faciale, poziții variate Normalizează și curăță datele Folosește modele mai avansate pentru proiecte complexe (ex: deep learning cu TensorFlow sau PyTorch) Asigură-te că ai permisiuni și respectă legislația GDPR pentru date biometrice 9. Concluzii și următorii pași Ai învățat să detectezi și să recunoști fețe cu Python și OpenCV, construind un model LBPH simplu dar eficient. Acum poți: Extinde sistemul pentru mai multe persoane Integra cu aplicații de securitate sau acces Învăța modele mai avansate bazate pe rețele neuronale Share this post Link to post Share on other sites More sharing options...