Sistema de asistencia por reconocimiento facial para elementos navales. Construido con Python, DeepFace y Flask, siguiendo principios de Arquitectura Hexagonal (Puertos y Adaptadores).
- Registro biométrico — Alta de elementos navales con captura facial de referencia.
- Pase de lista facial — Identificación en tiempo real por coincidencia biométrica.
- Ubicación dinámica — Formato oficial naval:
"Ciudad, Estado, a 23 de junio del 2026." - Reporte de situación — Estado en tiempo real: quién está "A bordo" y quién está "Fuera".
- Reporte diario — Registro completo de movimientos del día.
- Frontend integrado — Interfaz de administrador y guardia servida desde Flask.
core/ → Dominio puro (sin dependencias externas)
entities.py → User, AttendanceRecord (dataclasses)
ports.py → Interfaces abstractas (repositorios, reconocimiento facial)
services.py → NavalAttendanceService (casos de uso)
infra/ → Adaptadores concretos
deepface_adapter.py → Reconocimiento facial (DeepFace)
json_repository.py → Almacenamiento en JSON
api/ → Capa de presentación (Flask + flask-restful)
app.py → Ensamblaje, endpoints, cron job
routes.py → Recursos RESTful
ui/ → Frontend estático (HTML/JS)
index.html — Paneles de Admin y Pase de Lista
- Python 3.11+
- pip
# Clonar el repositorio
git clone https://github.com/tu-usuario/nias_system.git
cd nias_system
# Crear entorno virtual
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Instalar dependencias
pip install -r requirements.txt
# Ejecutar servidor
python api/app.pyEl servidor arranca en http://0.0.0.0:5000. El frontend se sirve automáticamente en la raíz.
python test_local.pyUsa un MockFaceAdapter que simula el reconocimiento facial sin cámara ni GPU.
docker compose up -dEl servidor queda disponible en http://localhost:8000.
- Conectar el repositorio GitHub en Dokploy.
- Seleccionar Build type: Dockerfile.
- Configurar el dominio (ej.
asistencia.develorian.dev). - Habilitar HTTPS (Let's Encrypt automático).
- Puerto interno:
8000. - Desplegar.
Los datos se almacenan en un volumen Docker (nias_data) para persistencia.
| Método | Ruta | Descripción | Respuesta |
|---|---|---|---|
POST |
/api/v1/users |
Registra elemento naval con imagen | 201 / 400 |
POST |
/api/v1/attendance |
Pase de lista facial (entrada/salida) | 200 / 404 |
GET |
/api/v1/reports/situation |
Situación en tiempo real (a bordo/fuera) | 200 |
GET |
/api/v1/reports/daily |
Reporte diario de movimientos | 200 |
curl -X POST http://localhost:8000/api/v1/users \
-H "Content-Type: application/json" \
-d '{
"id": "123456",
"grade": "Teniente de Navío",
"name": "Juan Pérez",
"assignment": "Batallón 1",
"role": "Comandante",
"image_b64": "data:image/jpeg;base64,/9j/4AAQ..."
}'curl -X POST http://localhost:8000/api/v1/attendance \
-H "Content-Type: application/json" \
-d '{
"image_b64": "data:image/jpeg;base64,/9j/4AAQ...",
"is_entry": true,
"reason": "Ingreso a labores",
"location": "Puerto Vallarta, Jal."
}'DeepFace descarga pesos pre-entrenados (VGG-Face, Facenet, etc.) en la primera ejecución. Se requiere conexión a internet la primera vez. Los pesos se cachean en ~/.deepface/.
- Backend: Python, Flask, flask-restful, flask-cors
- IA: DeepFace, OpenCV, TensorFlow/Keras
- Almacenamiento: JSON (archivos locales)
- Frontend: HTML5, JavaScript vanilla, Geolocation API
- Despliegue: Docker, gunicorn, Dokploy
Proyecto privado — Hybridge / Develorian.