Introducción
En este proyecto lo que buscamos hacer es un programa con visión artificial para aquellas
personas de las cuales no se pueden comunicar como normalmente lo harían y lo puedan
hacer con gestos o moviendo algunas de las extremidades del cuerpo y con ello nos
podamos comunicar a través del programa y poder decir lo que queremos.
Desarrollo
import cv2
import mediapipe as mp
import requests
# Claves de Pushover
api_token = "abm675t7eay78a4243xdz5ecpmv8e4" # Reemplaza con tu API Token de Pushover
user_key = "unuqfmxm5dmd9unffornainpeuimsg" # Reemplaza con tu User Key de Pushover
# Inicialización de MediaPipe para detección de poses
mp_pose = [Link]
pose = mp_pose.Pose()
mp_drawing = [Link].drawing_utils
# Variables para evitar notificaciones repetitivas
ultima_accion = None
# Funciones de notificación según el gesto detectado
def notificar_necesidad(necesidad):
print(f"Notificación: La persona necesita {necesidad}.")
# Enviar notificación a Pushover
[Link]("[Link] data={
"token": api_token,
"user": user_key,
"message": f"La persona necesita {necesidad}."
})
# Función para mostrar texto en pantalla
def mostrar_texto(frame, texto):
font = cv2.FONT_HERSHEY_SIMPLEX
[Link](frame, texto, (50, 50), font, 1, (0, 255, 0), 2, cv2.LINE_AA)
# Función principal para el reconocimiento de gestos
def detectar_gestos():
global ultima_accion
cap = [Link](0) # Usar la cámara web
while [Link]():
ret, frame = [Link]()
if not ret:
break
# Convertir la imagen a RGB para MediaPipe
rgb_frame = [Link](frame, cv2.COLOR_BGR2RGB)
resultado = [Link](rgb_frame)
if resultado.pose_landmarks:
mp_drawing.draw_landmarks(frame, resultado.pose_landmarks, mp_pose.POSE_CONNECTIONS)
# Obtener la posición de puntos específicos para detectar gestos
lm = resultado.pose_landmarks.landmark
hombro_izq = lm[mp_pose.PoseLandmark.LEFT_SHOULDER]
mano_izq = lm[mp_pose.PoseLandmark.LEFT_WRIST]
hombro_der = lm[mp_pose.PoseLandmark.RIGHT_SHOULDER]
mano_der = lm[mp_pose.PoseLandmark.RIGHT_WRIST]
cabeza = lm[mp_pose.[Link]]
# Detectar gesto de "levantar la mano izquierda" para notificación de comer
if mano_izq.y < hombro_izq.y and ultima_accion != "comer":
notificar_necesidad("comer")
ultima_accion = "comer"
mostrar_texto(frame, "La persona necesita comer.")
# Detectar gesto de "levantar ambas manos por encima de la cabeza" para ir al baño
elif mano_izq.y < cabeza.y and mano_der.y < cabeza.y and ultima_accion != "ir al baño":
notificar_necesidad("ir al baño")
ultima_accion = "ir al baño"
mostrar_texto(frame, "La persona necesita ir al baño.")
# Detectar gesto de "cruzar los brazos" para dormir
elif abs(mano_izq.x - mano_der.x) < 0.1 and ultima_accion != "dormir":
notificar_necesidad("dormir")
ultima_accion = "dormir"
mostrar_texto(frame, "La persona necesita dormir.")
# Mostrar el video con la detección de pose
[Link]('Detección de Gestos', frame)
# Salir del bucle con la tecla 'q'
if [Link](10) & 0xFF == ord('q'):
break
[Link]()
[Link]()
# Ejecutar la función principal
detectar_gestos()
*Mano derecha para notificar la comida
*Mano izquierda para ir al baño
+Brazos cruzador para notificar necesidad de dormir
Esto lo hicimos en Visual Studio en este trabajo primero hicimos que identificara diferentes imágenes con una luz
clara y con la que se puede apreciar bien la imagen o el objeto que nosotros queríamos que leyera la computadora
y después con un código hicimos que leyera los gestos o los movimientos que hiciéramos ya que teníamos que
hacer que leyera los movimientos del cuerpo y los gestos que hacíamos y ya por ultimo hicimos que a través de
acciones o movimientos del cuerpo dijera lo que quisiera hacer la persona que este leyendo el programa
dependiendo de las necesidades que desee es dependiendo de la acción que va a hacer para pedir lo que quiere a
través de movimientos de manos y brazos y con ello nos mandaba mensaje sobre lo que queríamos a través de la
aplicación Pushover y con ello podíamos saber lo que quería hacer y saber lo que quería.