Una aplicación Python que permite dibujar en una pizarra digital utilizando gestos de manos capturados a través de la cámara web. Este proyecto combina visión por computadora y seguimiento de manos en tiempo real para crear una experiencia de dibujo interactiva sin contacto físico.
- Dibujo Intuitivo: Usa tu dedo índice como lápiz digital para dibujar sobre un lienzo virtual
- Gesto de Meñique: Activa/desactiva el modo de dibujo levantando solo el dedo meñique
- Paleta de Colores: Incluye múltiples colores para dibujar (rojo, verde, azul, amarillo, magenta, cian, negro, blanco)
- Borrado Rápido: Botón para limpiar la pizarra completamente
- Modo Espejo: Visión como en un espejo para una experiencia más natural
- Selección de Manos: Configura la app para detectar la mano izquierda (predeterminada), derecha o ambas
- Interpolación Adaptativa: Líneas suaves incluso en movimientos rápidos
- Grosor Adaptativo: Varía el grosor de las líneas según la velocidad del movimiento
- Interfaz Minimalista: Panel de controles simple y UI optimizada que muestra solo información esencial
- Métricas en Tiempo Real: Visualización de FPS y estado del dibujo
- Optimizaciones de Rendimiento: Ajustes automáticos para mantener una experiencia fluida
[Imagen de ejemplo del proyecto en funcionamiento - Sugerido añadir una cuando esté disponible]
- Python 3.10 o superior
- Dependencias Python (ver
requirements.txt
):- opencv-python (≥4.5.0)
- mediapipe (≥0.8.10)
- numpy (≥1.20.0)
- Herramientas de desarrollo: ruff, pytest
- Cámara web funcional (integrada o externa)
- Procesador: Recomendado Intel Core i5 o superior (o equivalente)
- RAM: 4GB mínimo, 8GB recomendado
- Espacio libre en disco: 500MB
-
Clona el repositorio:
git clone https://github.com/[tu-usuario]/pizarra-digital-python.git cd pizarra-digital-python
-
Crea un entorno virtual (recomendado):
# Windows python -m venv venv venv\Scripts\activate # macOS/Linux python -m venv venv source venv/bin/activate
-
Instala las dependencias:
pip install -r requirements.txt
python src/run.py
Con opciones adicionales:
# Modo de depuración con procesamiento síncrono y solo mano derecha
python src/run.py --debug --no-async --mano-derecha
# Calidad alta, resolución media y sin métricas
python src/run.py --quality high --resolution medium --no-metrics
--camera ÍNDICE
: Especifica el índice de la cámara a utilizar--debug
: Activa el modo de depuración con logs detallados--no-async
: Desactiva la captura asíncrona de video--no-metrics
: Oculta las métricas de rendimiento en pantalla--quality {low,medium,high}
: Establece la calidad de procesamiento--resolution {low,medium,high}
: Establece la resolución de la cámara--no-mirror
: Desactiva el modo espejo de la cámara--mano-derecha
: Detecta solo la mano derecha (la del lado derecho)--mano-izquierda
: Detecta solo la mano izquierda (la del lado izquierdo) - Opción predeterminada--ambas-manos
: Detecta ambas manos del usuario
- Dibujar: Extiende tu dedo índice frente a la cámara
- Activar/Desactivar Dibujo: Extiende solo el dedo meñique hacia arriba (manteniendo los demás dedos cerrados)
- Cambiar color: Haz clic en los botones de colores
- Borrar todo: Haz clic en el botón "Borrar"
- Salir: Presiona 'q' en cualquier momento
pizarra-digital-python/
├── src/
│ ├── pizarra_digital/ # Paquete principal
│ │ ├── captura/ # Gestión de entrada de cámara
│ │ ├── deteccion/ # Detección de manos con MediaPipe
│ │ ├── dibujo/ # Lógica de dibujo y gestos
│ │ ├── interfaz/ # Elementos de la interfaz de usuario
│ │ ├── lienzo/ # Manejo del lienzo de dibujo
│ │ ├── utils/ # Utilidades varias
│ │ ├── config.py # Configuración global
│ │ └── main.py # Punto de entrada principal
│ └── run.py # Script para ejecutar la aplicación
├── tests/ # Pruebas unitarias
├── project_docs/ # Documentación técnica
├── requirements.txt # Dependencias del proyecto
├── README.md # Este archivo
└── .gitignore # Patrones de archivos a ignorar
- Intenta varios índices: Usa
--camera 1
,--camera 2
, etc. para probar diferentes cámaras - Verifica los permisos: Asegúrate de que tu sistema operativo permita el acceso a la cámara
- Cierra otras aplicaciones: Otras aplicaciones podrían estar usando la cámara (Zoom, Teams, navegadores)
- Ajusta la resolución: Usa
--resolution low
para diagnosticar problemas
- Reduce la calidad: Usa
--quality low
para mejorar los FPS - Desactiva la asyncronía: Prueba con
--no-async
si experimentas problemas - Reduce la resolución: Usa
--resolution low
para mejor rendimiento - Cierra aplicaciones en segundo plano: Libera recursos del sistema
- Mejora la iluminación: Asegúrate de que tu mano esté bien iluminada
- Ajusta la distancia: Mantén tu mano a una distancia moderada de la cámara (20-50 cm)
- Cambia la configuración: Prueba con
--mano-derecha
o--mano-izquierda
según corresponda - Modo espejo: Prueba con o sin
--no-mirror
para ver qué funciona mejor
- Interfaz simplificada: Rediseñada para mostrar solo FPS, estado del dibujo y mano detectada
- Gesto de meñique: Implementado para reemplazar el gesto de pinza y mejorar la fiabilidad de activación/desactivación
- Mano predeterminada: Cambiada a mano izquierda para mayor comodidad para la mayoría de usuarios
- Modo espejo: Añadida opción para ver la cámara en modo espejo para experiencia más natural
- Opciones de línea de comandos: Mejoradas para mayor flexibilidad y control
- Optimizaciones de interpolación: Líneas más suaves durante movimientos rápidos
- Mejoras en la detección: Mayor precisión en la detección de gestos y posición de dedos
- Selección de manos: Soporte para seleccionar qué mano detectar (derecha, izquierda o ambas)
- Guardar y cargar dibujos
- Herramientas adicionales (formas, texto)
- Reconocimiento de gestos adicionales
- Modo multijugador para colaboración
- Exportación a formatos estándar
- Optimizaciones para dispositivos de bajo rendimiento
Este proyecto está licenciado bajo los términos de la licencia MIT. Ver el archivo LICENSE para más detalles.
Las contribuciones son bienvenidas. Por favor, siente libre de enviar pull requests o abrir issues para mejorar el proyecto.
Desarrollado como parte de un proyecto personal para explorar las capacidades de OpenCV y MediaPipe en la creación de interfaces naturales de usuario.