Inicio > Cursos > Computer Vision con Python > Deteccion y reconocimiento facial
Computer Vision con PythonDeteccion de ObjetosLección 6 de 12

Deteccion y reconocimiento facial

La deteccion facial tiene 4 niveles:

1. DETECCION: Hay una cara? Donde esta? (bounding box) Herramientas: Haar Cascades, HOG + SVM, MTCNN, MediaPipe

2. LANDMARKS: Donde estan los ojos, nariz, boca? (68-468 puntos) Herramientas: dlib (68 puntos), MediaPipe (468 puntos) Usos: Filtros AR (Snapchat/Instagram), seguimiento de mirada

3. RECONOCIMIENTO: De QUIEN es la cara? Herramientas: face_recognition (dlib), ArcFace, FaceNet Usos: Face ID, busqueda de personas, verificacion de identidad

4. ANALISIS: Que expresion tiene? Edad? Genero? Herramientas: DeepFace, FER (Facial Expression Recognition) Usos: Analisis de sentimiento, UX research, marketing

import cv2

# Metodo 1: Haar Cascade (clasico, rapido)
face_cascade = cv2.CascadeClassifier(
    cv2.data.haarcascades + "haarcascade_frontalface_default.xml"
)
eye_cascade = cv2.CascadeClassifier(
    cv2.data.haarcascades + "haarcascade_eye.xml"
)

def detect_faces_haar(frame):
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
        
        # Detectar ojos dentro de la cara
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = frame[y:y+h, x:x+w]
        eyes = eye_cascade.detectMultiScale(roi_gray)
        for (ex, ey, ew, eh) in eyes:
            cv2.circle(roi_color, (ex+ew//2, ey+eh//2), 15, (255, 0, 0), 2)
    
    cv2.putText(frame, f"Caras: {len(faces)}", (10, 30),
        cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    return frame, faces

# Webcam en tiempo real
cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    if not ret: break
    frame, faces = detect_faces_haar(frame)
    cv2.imshow("Face Detection", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"): break
cap.release()
# Metodo 2: MediaPipe (moderno, mas preciso, 468 landmarks)
import mediapipe as mp
import cv2

mp_face = mp.solutions.face_mesh
mp_draw = mp.solutions.drawing_utils

cap = cv2.VideoCapture(0)
with mp_face.FaceMesh(max_num_faces=2, min_detection_confidence=0.5) as mesh:
    while True:
        ret, frame = cap.read()
        if not ret: break
        
        rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        results = mesh.process(rgb)
        
        if results.multi_face_landmarks:
            for face in results.multi_face_landmarks:
                mp_draw.draw_landmarks(
                    frame, face, mp_face.FACEMESH_CONTOURS,
                    landmark_drawing_spec=mp_draw.DrawingSpec(
                        color=(0, 255, 0), thickness=1, circle_radius=1
                    )
                )
        
        cv2.imshow("MediaPipe Face Mesh", frame)
        if cv2.waitKey(1) & 0xFF == ord("q"): break
cap.release()
ConsejoMediaPipe de Google es el futuro de la deteccion facial. 468 landmarks vs 68 de dlib, corre en CPU, y tiene modelos para manos, pose corporal y objetos.
← Contornos y Analisis de FormasYOLO: deteccion de objetos en tiempo real →

Practica esta lección

Resuelve los ejercicios del curso de Computer Vision con Python en la app, gratis y con corrección automática.

Empezar a practicar