Jump to content
Followers 0
GanGster

Cum să construiești un model de recunoaștere facială cu Python și OpenCV

Recommended Posts

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

  1. Ce este recunoașterea facială?
  2. De ce să folosești Python și OpenCV?
  3. Pregătirea mediului de dezvoltare
  4. Detectarea fețelor cu Haar Cascades
  5. Prelucrarea imaginilor pentru recunoaștere
  6. Construirea modelului de recunoaștere facială cu LBPH
  7. Testarea modelului
  8. Optimizări și bune practici
  9. 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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Followers 0
HAPPYHALLOWEEN PUBZONE
|

Theme Made by Zayon & Cyber Designs

×
×
  • Create New...