2) Detección de Manos y Coordenadas- Bases para el control de Proyectos con Visión Artificial 🖐️

Soluciones y Servicios de Robótica, Domótica e IoT

2) Detección de Manos y Coordenadas- Bases para el control de Proyectos con Visión Artificial 🖐️

Acerca del Tutorial

Este vídeo te voy a explicar conceptos y códigos que te permitirán entender como se realiza la detección de coordenadas de las manos utilizando MediaPipe y posteriormente verás la utilidad de conocer estos conceptos, cuando se inicie interactuando con Arduino.

Enlaces:

Codigo Python – Detección de Manos


import cv2
import mediapipe as mp

# Inicializa MediaPipe Drawing Utilities para dibujar las manos
mp_drawing = mp.solutions.drawing_utils

# Inicializa MediaPipe Hands
mp_hands = mp.solutions.hands


# Configura los parámetros de detección de manos
hands = mp_hands.Hands(
    static_image_mode=False,  # Modo de video en tiempo real
    max_num_hands=1,          # Detectar hasta 2 manos
    min_detection_confidence=0.5,  # Umbral de confianza de detección
)

# Iniciar captura de video
cap = cv2.VideoCapture(0)

while cap.isOpened():
    
    success, image = cap.read()
    
    if not success:
        print("Ignorando frame vacío.")
        break
   
    # voltea la imagen horizontalmente - Flip 
    # realiza la conversion  BGR  a  RGB
    image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)
    
    # Procesa la imagen y detecta las manos
    results = hands.process(image)
    
    # print("multi_handedness",results.multi_handedness)
    # print("multi_hand_landmarks",results.multi_hand_landmarks)
   
    
    # Convierte la imagen a BGR para OpenCV
    image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)

    # Dibuja las manos detectadas
    """
    if results.multi_hand_landmarks:
        
        for hand_landmarks in results.multi_hand_landmarks:
            mp_drawing.draw_landmarks(image, hand_landmarks, mp_hands.HAND_CONNECTIONS,
            mp_drawing.DrawingSpec(color=(0,255,0),thickness=4,circle_radius=5),
            mp_drawing.DrawingSpec(color=(255,0,0),thickness=4)
            )
    """
    
    """
    height, width, _ = image.shape
    
    if results.multi_hand_landmarks:
        
        for hand_landmarks in results.multi_hand_landmarks:
            
            thumb_tip_landmark = hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_TIP]
            thumb_tip_x = thumb_tip_landmark.x
            thumb_tip_y = thumb_tip_landmark.y
            thumb_tip_z = thumb_tip_landmark.z
            
            #print(f"Pulgar Coordenadas - X: {thumb_tip_x}, Y: {thumb_tip_y}, Z: {thumb_tip_z}")
            
            thumb_tip_x_int = int(thumb_tip_x*width)
            thumb_tip_y_int = int(thumb_tip_y*height)
            thumb_tip_z_int = int(thumb_tip_y*200)
            
            print(f"Pulgar Coordenadas - X: {thumb_tip_x_int}, Y: {thumb_tip_y_int}, Z: {thumb_tip_z_int}")
            
    """
    
    height, width, _ = image.shape
    
    if results.multi_hand_landmarks:
        for hand_landmarks in results.multi_hand_landmarks:
            
            thumb_tip_landmark = hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_TIP]
            idx_fin_tip_landmark = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP]
    
            thumb_tip_x = thumb_tip_landmark.x
            thumb_tip_y = thumb_tip_landmark.y
           
            idx_fin_tip_x = idx_fin_tip_landmark.x
            idx_fin_tip_y = idx_fin_tip_landmark.y
           
            
            thumb_tip_x_int = int(thumb_tip_x*width)
            thumb_tip_y_int = int(thumb_tip_y*height)
            
            idx_fin_tip_x_int = int(idx_fin_tip_x*width)
            idx_fin_tip_y_int = int(idx_fin_tip_y*height)
            
            cv2.circle(image, (thumb_tip_x_int,thumb_tip_y_int), 10, (255,0,0),5)
            cv2.circle(image, (idx_fin_tip_x_int,idx_fin_tip_y_int), 10, (0,255,0),5)
          
            
            resta_coordenadas = abs(idx_fin_tip_y_int - thumb_tip_y_int)
            print(f"resta_coordenadas: {resta_coordenadas}")
    
   

    # Mostrar la imagen
    cv2.imshow('Detector de Manos', image)
    
    if cv2.waitKey(5) & 0xFF == 27:
        break

cap.release()
cv2.destroyAllWindows()

Requieres de una Asesoría?

Contactanos

Innova Domotics

Todos los Cursos

Ardiuno e IoT
Ardiuno y Andriod
Ardiuno y Firebase
Visión Artificial y Raspberry
y mucho más ....

Tanto en Telegram como en WhatsApp doy a conocer el nuevo contenido que publico en las cuentas de TikTok y YouTube, todos altamente útiles y relacionados con Robótica, Domótica e IoT. Únete al canal de tu preferencia para mantenerte actualizado.