Skip to content

feat(web): reproducción de cámara al seleccionar + edición de ROI en vivo - #5

Open
npalmae wants to merge 1 commit into
mainfrom
feat/roi-editor-live-preview
Open

feat(web): reproducción de cámara al seleccionar + edición de ROI en vivo#5
npalmae wants to merge 1 commit into
mainfrom
feat/roi-editor-live-preview

Conversation

@npalmae

@npalmae npalmae commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

Propósito

Mejorar la operatividad del dashboard: ver una cámara individual en grande y hacer la calibración de ROIs usable sobre imagen real de la cámara (frame estático o video en vivo), en lugar de subir imágenes manualmente.

Cambios

Vista de cámara individual (CameraGrid.tsx)

  • Clic en cualquier tile de la parrilla → modal a pantalla completa con el stream en vivo (WHEP/HLS según cámara), estado de conexión y nombre. Se cierra con Esc.

Editor de ROI (RoiConfiguratorPage.tsx)

  • Frame automático: al abrir el configurador captura el frame actual de la cámara vía go2rtc (/api/frame.jpeg). El botón "Frame en vivo" lo recaptura; "Subir" queda como respaldo para cámaras offline.
  • Edición sobre video en vivo (opcional): fondo WebRTC (WHEP) con botón Congelar/Reanudar para dibujar sobre la escena congelada y reanudar el flujo.
  • Fix de alineación: el escenario se calcula en JS con ResizeObserver (letterbox exacto imagen↔SVG en cualquier tamaño de ventana). Antes, aspect-ratio CSS rompía la proporción en contenedores altos y los clics caían desplazados.
  • Arrastre: mover líneas/polígonos completos o vértices individuales (con setPointerCapture, no se pierde el drag al mover rápido).
  • Línea elástica: preview del segmento siguiente siguiendo el cursor + puntos marcados al dibujar.
  • Polígonos: cierre al clicar cerca del primer vértice (marcado), clic derecho elimina el último vértice, Esc cancela el borrador.
  • Deshacer: botón con contador + Ctrl/Cmd+Z (alta/borrado/movimiento).

Verificación

  • tsc -b --noEmit limpio, vite build OK
  • Desplegado y probado en instancia real (12 cámaras Dahua/Imou + demo de tráfico): alineación exacta al arrastrar, conteo de eventos tras guardar ROI en cámaras con flujo
  • Captura de frame y WHEP validados vía proxy nginx /go2rtc/

Notas

  • No cambia contratos de API ni el plano de analítica; es solo capa web
  • El documento docs/oferta-casos-de-uso.md queda fuera de este PR (material comercial)

Camera view:
- click a grid tile opens a fullscreen modal with the live stream (Esc to close)

ROI configurator:
- auto-capture live camera frame as background (go2rtc frame.jpeg)
- optional live video background (WHEP) with freeze/resume while drawing
- exact image/canvas alignment via JS-computed letterbox stage (fixes click
  offset on non-16:9 viewports)
- drag whole figures or individual vertices (pointer capture)
- rubber-band preview and vertex dots while drawing
- close polygon by clicking near first vertex; right-click removes last vertex
- undo stack (Ctrl+Z) for add/delete/move operations
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant