Visión general del sistema
Sistema LPR monolítico, offline-first, desplegado en un único host (mini-servidor en portería) sobre Docker. Toda lectura y escritura golpea SQLite local; la nube es replicación asíncrona para respaldo y gestión.
Stack tecnológico
FastAPI · Python 3.12
API asíncrona con Uvicorn, sesiones aiosqlite por request.
YOLOv8 + PaddleOCR
Detección de placa (modelo propio yolo26_lpr_v3.pt) y OCR, ejecutados en CPU, sin GPU.
OpenCV (headless)
Captura de stream, MOG2 y máscara ROI por polígono.
SQLite (WAL) · SQLModel
Persistencia local en modo WAL, ORM async con SQLModel/SQLAlchemy.
React 19 · Vite · Tailwind
SPA del dashboard, eventos en tiempo real vía SSE.
Docker Compose · Pyarmor
Stack de 3 servicios, ofuscación selectiva del código de aplicación.
Offline-first y sincronización
Todas las operaciones críticas son locales. Un worker de sincronización corre cada 5 minutos y Litestream replica continuamente el WAL de SQLite a Supabase (Postgres + S3). Ante fallos de red, el sistema degrada con elegancia y reintenta en el siguiente ciclo.
- ▪Lecturas/escrituras siempre contra SQLite local.
- ▪Sync asíncrono cada 5 min, sin bloquear el acceso.
- ▪Litestream: replicación continua del WAL para recuperación ante desastres.
- ▪Toda llamada httpx con timeout explícito; los fallos se registran y continúan.
Pipeline de reconocimiento
El sistema filtra movimiento con MOG2 y una región de interés (ROI) antes de invocar el modelo, con cooldown por placa para evitar duplicados. Las lecturas se clasifican por confianza:
Autoriza
Se ejecuta la lógica de acceso, se dispara el relé y se registra el evento.
Minería de dataset
Se guarda el frame para reentrenar el modelo.
Descarta
Lectura de baja confianza, ignorada.
Modelo de datos y multi-tenant
Esquema 3NF particionado por complex_id (cada conjunto es un tenant). Tablas núcleo: Complex, Apartment, User, AccessCredential, VisitorAuth y AccessLog. El log de auditoría es inmutable y denormaliza la placa para conservar integridad aunque se borre la credencial.
Seguridad
- ▪Autenticación JWT con aislamiento multi-tenant por complex_id.
- ▪Cifrado AES-256 en reposo y en tránsito.
- ▪Licencia atada al hardware por huella (CPU + MAC + UUID de volumen).
Modo de operación actual
GateVision detecta, valida la credencial y dispara la apertura del portón mediante un controlador de relés, dejando el evento en el log inmutable. El portero conserva override manual desde el dashboard. Los tags RFID y la biometría de peatones son parte de la hoja de ruta.
La aplicación por dentro
Capturas reales del dashboard de operación.





