WebAI Inference
Throttling

Arquitectura modular de throttling inteligente para inferencia ML en tiempo real sobre cámara web. Demostración progresiva en 4 versiones.

V1
Prototipo inicial — 3 capas — Throttling básico por frames

Arquitectura inicial de 3 capas funcional. El throttling es manual por select FPS: el usuario selecciona la cantidad de FPS desde un <select>. Renderizado de bounding boxes con PredictionProcessor — comparación directa frame a frame, sin diff inteligente. Objetivo: validar que el pipeline cámara → modelo → canvas era viable en browser.

VideoController — Cámara, zoom, linterna
ModelController — Inferencia coco-ssd + RAF
PredictionProcessor — Render directo en canvas
V2
Arquitectura de 4 capas — ThrottleController

Refactorización completa hacia 4 capas. Se extrae el control de inferencia a ThrottleController, un módulo dedicado con calibración automática en warmup (3 runs) y ajuste de FPS ±1 por ciclo según presupuesto de CPU. Arquitectura modular definitiva: cada capa reemplazable de forma independiente.

VideoController — Cámara, zoom, linterna
ThrottleController — Heurística automática de FPS
ModelController — Inferencia + throttle integrado
CanvasRenderer — Render HiDPI, colores por clase
V3
Optimización de render — VectorProcessor + diff

Se inserta VectorProcessor entre ModelController y CanvasRenderer. Compara vectores de predicción por índice entre frames y bloquea draws cuando no hay cambios reales. Si el frame no cambió, el render se omite completamente. Primera optimización real de CPU para dispositivos de gama baja.

VideoController — Cámara, zoom, linterna
ThrottleController — Heurística automática de FPS
ModelController — Inferencia + throttle integrado
VectorProcessor — Diff por índice, sin redraws
CanvasRenderer — Render HiDPI, colores por clase
V4
Object Tracking real — IoU + identidad persistente

VectorProcessor evoluciona a un Object Tracker real. Cada objeto detectado recibe una identidad persistente (#id) entre frames. Matching via Intersection over Union (IoU) con fallback por distancia euclidiana de centroides. Los objetos envejecen via MAX_AGE y desaparecen si no son vistos.

VideoController — Cámara, zoom, linterna
ThrottleController — Heurística automática de FPS
ModelController — Inferencia + throttle integrado
VectorProcessor (IoU) — Tracker con ID persistente
CanvasRenderer — Render con #id y stableFrames
// Flujo de datos en producción
ThrottleController
VideoController
ModelController
VectorProcessor (IoU)
CanvasRenderer
Cada módulo es independiente y reemplazable sin modificar el resto del pipeline.
VectorProcessor actúa como capa de filtrado inteligente: solo dispara el render cuando hay cambios reales entre frames, eliminando draw calls innecesarios y reduciendo consumo de CPU. ThrottleController calibra automáticamente el dispositivo y ajusta el FPS dinámicamente según el presupuesto disponible — sin intervención del usuario.