Skip to content

SaulGut249/Emfuvision_RBPI5

Repository files navigation

Emfuvision – Plataforma de visión por computadora en tiempo real

Emfuvision es una aplicación de escritorio (PySide6) que captura video en vivo, ejecuta detección con modelos YOLOv11, genera visualizaciones interactivas (overlays, máscara dinámica tipo heatmap y métricas en vivo) y guarda cada paquete de información en SQLite para poder analizar tráfico de personas en entornos comerciales.

Estado actual: WIP/alpha – el código es funcional para pruebas locales con cámaras USB/videos pregrabados y continúa en evolución.

Arquitectura rápida

┌─────────┐   ┌─────────┐   ┌──────────┐   ┌─────────┐   ┌───────────┐
│ Cámara  │→→│ Captura  │→→│ Inferencia│→→│ Merge/   │→→│ Base de    │
│ / video │   │(Media)  │   │(YOLO)    │   │Heatmap   │   │datos SQLite│
└─────────┘   └─────────┘   └──────────┘   └─────────┘   └───────────┘
                            ↘ métricas UI y mascaras ↗
  • modules/Cap abre la fuente, normaliza el frame y comparte la máscara dibujada.
  • modules/ML ejecuta seguimiento/detección con ultralytics.YOLO y expone los paquetes de detecciones.
  • modules/Merg crea la visualización final (overlays + máscara dinámica que resalta zonas calientes) y alimenta los gráficos del dock de métricas.
  • modules/DB persiste cada frame y sus detecciones en emfuvision.sqlite3.

Requisitos

  • Python 3.9 (probado en Windows 11 + WSL, debería funcionar en Linux/macOS con backend de cámara disponible).
  • GPU opcional; por defecto usa CPU. Si quieres Coral TPU, instala pycoral siguiendo la guía oficial.
  • Dependencias principales:
    • PySide6, pyqtgraph
    • opencv-python, numpy
    • ultralytics (modelos YOLOv11, en el repo ya se incluyen yolo11n.pt y yolo11s.pt)
    • onnx, tensorflow-cpu, tf_keras, sng4onnx, onnx_graphsurgeon (para futuros experimentos/exportaciones)
    • SQLite3 viene incluido con Python.

Consulta requirements.txt para las versiones mínimas. PySide6 y pyqtgraph no aparecen allí porque suelen instalarse aparte (ver pasos de instalación).

Instalación

  1. Clonar el repositorio
    git clone https://github.com/<usuario>/Emfuvision.git
    cd Emfuvision
  2. Crear y activar entorno (Conda recomendado)
    conda create -p .venv python=3.9
    conda activate .venv
  3. Instalar dependencias base
    pip install -r requirements.txt
    pip install PySide6 pyqtgraph
  4. (Opcional) Coral TPU
    pip install --extra-index-url https://google-coral.github.io/py-repo/ "numpy<2" pycoral~=2.0
  5. Verificar pesos YOLO: deja yolo11n.pt/yolo11s.pt en la raíz o apunta Params → Modelo al archivo que prefieras.

Ejecución

python main.py

Qué verás en la UI

  • Vista central: video original con cajas + máscara dinámica en paralelo.
  • Dock de métricas (MetricsDock): latencia por etapa (captura, inferencia, merge y total) + conteo de personas.
  • Dock de parámetros (ParamsDock):
    • Selecciona cámara o archivo (combo Fuente de video o botón Buscar).
    • Ajusta modelo (yolo11n.pt, yolo11s.pt, etc.), backend y tamaño de entrada.
    • Cambia thresholds (confianza y NMS) o activa/desactiva overlays.

Para terminar, cierra la ventana. El MainWindow se encarga de detener los hilos (MediaWorker, InferWorker, MargeWorker, DBaseWorker).

Base de datos

  • Se crea automáticamente emfuvision.sqlite3 con dos tablas:
    • frames: id, timestamp, ancho/alto y número de detecciones.
    • detections: bounding boxes + clase/confianza para cada frame.
  • Puedes inspeccionarla con cualquier cliente SQLite (DB Browser, DBeaver, etc.).
  • Si necesitas limpiar datos, elimina el archivo .sqlite3 y se regenerará al arrancar.

Estructura del proyecto (resumen)

main.py                  # Arranca la app PySide6
modules/
  Cap/                   # Captura y preprocesamiento
  ML/                    # Modelos YOLO + lógica de inferencia
  Merg/                  # Overlays y máscara dinámica
  DB/                    # Persistencia en SQLite
  UI/                    # Widgets, docks y ventana principal
  Admin/                 # Tipos compartidos y estado global (máscara)
Resources/               # Videos/imágenes de prueba
enviroment.yml           # Entorno alterno para Conda/Mamba
requirements.txt         # Dependencias base para pip

Flujo de trabajo interno

  1. MediaWorker lee la fuente con OpenCV, recorta a formato cuadrado, convierte a RGB y añade la máscara compartida.
  2. InferWorker recibe cada Packet, corre YOLO.track (seguimiento persistente) y adjunta detecciones.
  3. MargeWorker crea los frames con overlays, calcula la máscara dinámica tipo heatmap (dinamicMask) y alimenta los gráficos.
  4. DBaseWorker guarda el resultado en SQLite para futuras estadísticas.

Cada etapa usa colas queue.Queue independientes y se ejecuta en su propio QThread, manteniendo la UI responsiva.

Roadmap abierto

  • Conectar dashboard web/PowerBI a la base de datos para visualizar largas sesiones.
  • Añadir anonimización avanzada (blurring dinámico) antes de guardar frames.
  • Integrar motor de reglas para alertas en vivo (ocupación máxima, zonas calientes).
  • Soporte directo para Coral TPU (modules/ML/utils/Inference_coral.py).

Si encuentras bugs o quieres proponer mejoras, abre un issue o envía un PR. ¡Gracias por probar Emfuvision!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages