Inicio > Cursos > Computer Vision con Python > Deteccion de pose y manos
Computer Vision con PythonDeteccion de ObjetosLección 8 de 12

Deteccion de pose y manos

MediaPipe de Google detecta el cuerpo humano completo: pose (33 puntos del cuerpo), manos (21 puntos por mano) y cara (468 puntos).

Aplicaciones de pose detection: • Fitness: Contar repeticiones, verificar forma correcta • Fisioterapia: Monitorear ejercicios de rehabilitacion • Gaming: Control por gestos sin controller • Seguridad: Detectar caidas de personas mayores • Deportes: Analisis de tecnica

Aplicaciones de hand tracking: • Lenguaje de senas: Traducir gestos a texto • Control de UI: Interaccion sin tocar la pantalla • VR/AR: Tracking de manos en realidad virtual • Musica: Instrumentos virtuales controlados por gestos

import cv2
import mediapipe as mp
import math

mp_pose = mp.solutions.pose
mp_hands = mp.solutions.hands
mp_draw = mp.solutions.drawing_utils

def count_fingers(hand_landmarks):
    """Cuenta dedos levantados"""
    tips = [4, 8, 12, 16, 20]  # IDs de puntas de dedos
    fingers = 0
    
    # Pulgar (comparar X)
    if hand_landmarks.landmark[4].x < hand_landmarks.landmark[3].x:
        fingers += 1
    
    # Otros dedos (comparar Y — arriba = menor)
    for tip in tips[1:]:
        if hand_landmarks.landmark[tip].y < hand_landmarks.landmark[tip - 2].y:
            fingers += 1
    
    return fingers

def calculate_angle(a, b, c):
    """Calcula angulo entre 3 puntos (para ejercicios)"""
    angle = math.degrees(
        math.atan2(c.y - b.y, c.x - b.x) -
        math.atan2(a.y - b.y, a.x - b.x)
    )
    return abs(angle)

# Pose + Hands en webcam
cap = cv2.VideoCapture(0)
pose = mp_pose.Pose(min_detection_confidence=0.5)
hands = mp_hands.Hands(max_num_hands=2, min_detection_confidence=0.5)

while True:
    ret, frame = cap.read()
    if not ret: break
    rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    
    # Pose
    pose_results = pose.process(rgb)
    if pose_results.pose_landmarks:
        mp_draw.draw_landmarks(frame, pose_results.pose_landmarks, mp_pose.POSE_CONNECTIONS)
    
    # Hands
    hand_results = hands.process(rgb)
    if hand_results.multi_hand_landmarks:
        for hand in hand_results.multi_hand_landmarks:
            mp_draw.draw_landmarks(frame, hand, mp_hands.HAND_CONNECTIONS)
            fingers = count_fingers(hand)
            cv2.putText(frame, f"Dedos: {fingers}", (10, 30),
                cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    
    cv2.imshow("Pose + Hands", frame)
    if cv2.waitKey(1) & 0xFF == ord("q"): break

cap.release()
ConsejoMediaPipe corre en CPU a 30+ FPS. No necesitas GPU. Es la mejor opcion para prototipos rapidos y apps moviles.
← YOLO: deteccion de objetos en tiempo realProyecto: Contador de personas →

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