Implementarea unui Sistem de Recunoaștere Facială cu Deep Learning

Configurare noua (How To)

Situatie

Recunoașterea facială este un proces biometric de identificare sau verificare a unei persoane pe baza trăsăturilor faciale. Este utilizată pe scară largă în sisteme de securitate, acces controlat, personalizarea serviciilor și supraveghere video.

Solutie

2. Arhitectura generală a sistemului

Sistemul de recunoaștere facială se bazează pe 3 componente principale:

  1. Detecția feței – localizarea feței într-o imagine (cu MTCNN, Haar Cascades, etc.)

  2. Extracția trăsăturilor – conversia imaginii într-un vector de trăsături (embedding)

  3. Identificarea/Verificarea – compararea vectorilor și decizia de potrivire

3. Pas cu pas – Implementare completă

Pasul 1: Configurarea mediului

pip install tensorflow opencv-python mtcnn numpy scikit-learn keras

 Pasul 2: Detecția feței cu MTCNN

from mtcnn import MTCNN
import cv2

img = cv2.imread("poza.jpg")
detector = MTCNN()
faces = detector.detect_faces(img)

for face in faces:
x, y, w, h = face['box']
face_img = img[y:y+h, x:x+w]
cv2.rectangle(img, (x, y), (x+w, y+h), (0,255,0), 2)
cv2.imshow("Detectie", img)
cv2.waitKey(0)

Pasul 3: Extracția trăsăturilor cu FaceNet

Se utilizează un model pre-antrenat (ex: FaceNet), care transformă imaginea feței într-un vector (embedding) de 128 dimensiuni.

from keras.models import load_model
import numpy as np

model = load_model("facenet_keras.h5") # disponibil pe GitHub
def preproc_face(face_img):
face_img = cv2.resize(face_img, (160, 160))
face_img = face_img.astype('float32')
mean, std = face_img.mean(), face_img.std()
return (face_img - mean) / std

def get_embedding(model, face_pixels):
face = preproc_face(face_pixels)
face = np.expand_dims(face, axis=0)
return model.predict(face)[0]

Pasul 4: Înregistrarea și identificarea utilizatorilor

Creăm o bază de date simplă cu nume și vectori:

known_faces = {
"Ana": embedding_ana,
"Andrei": embedding_andrei,
}

Pentru identificare:

from numpy.linalg import norm

def identify(face_embedding, known_faces):
min_dist = float('inf')
identity = "Necunoscut"
for name, db_emb in known_faces.items():
dist = norm(face_embedding - db_emb)
if dist < 0.6: # prag experimentat
min_dist = dist
identity = name
return identity

Pasul 5: Integrarea într-un sistem web (Flask API)

Simplu API de recunoaștere facială:

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/identify", methods=["POST"])
def recognize():
file = request.files['image']
img = cv2.imdecode(np.frombuffer(file.read(), np.uint8), 1)
face = detector.detect_faces(img)[0]['box']
x, y, w, h = face
face_img = img[y:y+h, x:x+w]
emb = get_embedding(model, face_img)
name = identify(emb, known_faces)
return jsonify({"identity": name})

4. Considerații etice și legale

  • Este obligatoriu să ai consimțământul persoanelor pentru recunoaștere facială.

  • În UE, recunoașterea facială este reglementată de GDPR, iar în alte state de legislații similare.

  • Bias-ul algoritmic (favorizarea unui anumit tip de față) trebuie minimizat prin antrenarea pe seturi diverse de date.

5. Posibile aplicații

Domeniu Aplicație concretă
Securitate Control acces în clădiri
Retail Recunoaștere clienți VIP, reclame smart
Smart City Supraveghere video inteligentă
Educație Verificare prezență automată

Tip solutie

Permanent

Voteaza

(1 din 3 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?