Sari la conținut
Urmăritori 0
GanGster

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

Postări recomandate

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

Distribuie postarea


Link către postare
Distribuie pe alte site-uri

Creează un cont sau autentifică-te ca să comentezi

Trebuie să fii membru ca să poți lăsa un comentariu

Creează un cont

Înregistrează-te în comunitatea noastră. E simplu!

Înregistrează un cont nou

Autentificare

Ai deja cont? Autentifică-te aici.

Autentifică-te acum
Urmăritori 0
HAPPYHALLOWEEN PUBZONE
  • Bine ai venit

    Nou pe FRAGS?

    Servere de jocuri, resurse și o comunitate de jucători. Contul e gratuit.

    • Servere de jocurigăsești rapid unde să joci CS 1.6, CS2 și nu numai
    • Ai server? Îl promovăm gratuitnumele-tău.frags.ro și loc în lista de servere
    • Resurse pentru jocuri630+ configuri, skin-uri, pluginuri și ghiduri
    • Jocuri gratuite și reduceriurmărești secțiunea și afli primul
    5.544 de membri s-au alăturat deja
    572 online acum
  • Distribuie

    Trimite subiectul prietenilor

    Trimite pe WhatsApp
  • Afiliere gratuită

    Afiliază-ți serverulîn comunitateaFRAGS

    cs.frags.ro
    Alegi tu domeniul: frags.ro sau pubzone.ro

    Gratuit. Pune marca domeniului (FRAGS.RO sau PUBZONE.RO) în numele serverului înainte de cerere și adresa se activează automat, pe loc.

    1. 1Redenumești serverul
    2. 2Trimiți cererea
    3. Activare automată
    CS 1.6CS2FiveMMinecraftRust+5
    3servere afiliate75jucători acum
  • 🏆 Top servere

    Clasamentul lunii · ultima zi!
    1. 1TEST1.FRAGS.RO13/40 jucători1
    2. 2TEST3.FRAGS.RO31/32 jucători1
    Votează serverul tău
    Serverul lunii trecute: TEST2.FRAGS.RO
  • Server de Discord

    FRAGS

    12 online acum153 de membri
    • clorox bIeach
    • Ixtreme
    • Zenno
    • Catalinjoacă Counter-Strike 2
    • Mihai_eaplecat
    • NoobulPlictisitplecat
    +6 alții online
×
×
  • Creează...