1) Detección de manos – Guía Rápida con MediaPipe y Anaconda Python
Acerca del Tutorial
Este vídeo es el primero de varios controles de visión artificial y el entorno virtual que se instala en este video, utilizando Anaconda Python será nuestro entorno inicial de trabajo para posteriores proyectos.
Enlaces:
Comandos para crear el ambiente virtual, instalar open cv y Jupyter
# creo un ambiente virtual
conda create --name vir_env_opencv python=3.9
# activa el ambiente virtual
conda activate vir_env_opencv
#instalo OpenCv
pip install opencv-contrib-python
pip install matplotlib
#verifico la version de OpenCv
python
import cv2
print(cv2.__version__)
4.8.1
exit()
# Instala Jupiter NoteBook
conda install jupyter
# permite que se seleccione el ambiente virtual creado
pip install ipykernel
#agrego el ambiente virtual a Jupiter
python -m ipykernel install --user --name vir_env_opencv --display-name "vir_env_opencv"
# Volvemos a abrir Jupiter NoteBook
jupyter notebook
Comandos para instalar MediaPipe y verificar la versión
pip install mediapipe
python -c "import mediapipe as mp; print(mp.__version__)"
Codigo Python – Detección de Manos
import cv2
import mediapipe as mp
# Inicializa MediaPipe Hands
mp_hands = mp.solutions.hands
hands = mp_hands.Hands()
# Inicializa MediaPipe Drawing Utilities para dibujar las manos
mp_drawing = mp.solutions.drawing_utils
# Iniciar captura de video
cap = cv2.VideoCapture(0)
while cap.isOpened():
success, image = cap.read()
if not success:
print("Ignorando frame vacío.")
continue
# 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)
# 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)
# Mostrar la imagen
cv2.imshow('Detector de Manos', image)
if cv2.waitKey(5) & 0xFF == 27:
break
cap.release()
cv2.destroyAllWindows()