NeuroFace CV — Computer Vision Pipeline
Descripción General
El pipeline de Computer Vision de NeuroFace extiende la arquitectura event-driven del demo, integrando reconocimiento facial con streaming de eventos vía Kafka y notificaciones por email.
Componentes
| Componente | Función | Namespace |
|---|---|---|
NeuroFace Frontend |
Aplicación Angular para registro de rostros y detección en vivo vía webcam (WebRTC) |
|
NeuroFace Backend |
API FastAPI + OpenCV con reconocedor LBPH — entrena labels y expone |
|
OpenVINO Model Server (OVMS) |
Servidor de inferencia Intel que sirve |
|
Model PVC |
PersistentVolumeClaim de 1 Gi que almacena los archivos |
|
Jupyter Workbench |
Notebook de OpenShift AI para experimentación con modelos |
|
CV Processor |
Microservicio Python (UBI9) — pollea OVMS |
|
Kafka Topic |
|
|
Kafka Consumer |
Mismo proceso Python — consume eventos y rutea por |
|
Mailpit |
SMTP + HTTP API — recibe emails HTML formateados por tipo de evento |
|
Flujo de Eventos
El CV Processor ejecuta un loop de polling continuo:
-
Registrar rostro — El usuario registra un rostro en la UI de NeuroFace (webcam → Frontend → Backend LBPH)
-
Poll OVMS —
GET /v1/configcada 30 segundos para verificar estado del modelo -
Poll Backend —
GET /api/labelscada 30 segundos para detectar nuevos rostros registrados -
Producir a Kafka — Publica eventos JSON al topic
cv.face.detections(SASL_SSL autenticado) -
Consumir de Kafka — El mismo proceso lee eventos y rutea por
event_type -
Enviar email — Formatea HTML y envía
POST /api/v1/senda Mailpit
Tipos de Evento
| Tipo | Descripción | Destinatario |
|---|---|---|
|
Se detecta un nuevo label en la respuesta de |
Security Admin — |
|
OVMS |
ML Ops — |
Schema del Evento Kafka
{
"event_type": "person_registered",
"timestamp": "2025-06-15T14:32:00Z",
"source": "neuroface-lbph",
"person_name": "Max",
"face_count": 1,
"detection_method": "lbph",
"camera_id": "label-registry"
}
{
"event_type": "ovms_model_status",
"timestamp": "2025-06-15T14:32:30Z",
"source": "openvino-model-server",
"model_name": "face-detection-retail-0005",
"model_server": "ovms",
"ovms_response": { "face-detection-retail-0005": { "model_version_status": [{"state": "AVAILABLE"}] } },
"camera_id": "ovms-monitor"
}
Detección de Seguridad PPE (YOLO + OpenShift AI + Kafka)
El módulo de Detección de Seguridad PPE extiende la plataforma NeuroFace con monitoreo en tiempo real de Equipos de Protección Personal. Los frames de la webcam se envían a un endpoint de serving YOLOv8n para detección de objetos, y un Granite 3.1 LLM genera análisis de seguridad en lenguaje natural cuando se detectan violaciones. Los eventos se publican a Kafka para dashboards de compliance.
Arquitectura PPE
| Componente | Rol | Namespace |
|---|---|---|
YOLO PPE Serving |
Servidor HTTP Python con Ultralytics YOLOv8n — recibe JPEG, retorna bounding boxes y labels de clase |
|
Granite 3.1 2B LLM |
KServe InferenceService — genera análisis de seguridad ante violaciones PPE |
|
Kafka Topic |
|
|
Kafka DLQ |
|
|
Jupyter Workbench |
|
|
Flujo de Datos PPE
Cada frame de webcam sigue este recorrido:
-
Captura — El frontend Angular captura un frame vía WebRTC
-
Inferencia YOLO — El backend reenvía a YOLO serving (
/v1/predict), obtiene bounding boxes con nombres de clase y scores de confianza -
Verificación de Compliance — El backend compara las detecciones contra las clases PPE esperadas (
hardhat,safety-vest,goggles) y asigna estado:compliant,violationono_persons -
Análisis LLM (ante violación) — Granite 3.1 genera un análisis de seguridad explicando los riesgos
-
Publicación a Kafka — Evento completo publicado a
cv.ppe.detections -
Consumo en Notebook — Jupyter renderiza dashboards de compliance con matplotlib
Evento Kafka PPE
{
"event_type": "ppe_compliance_check",
"source": "neuroface-ppe-backend",
"timestamp": "2026-04-19T18:30:00Z",
"ppe_status": "violation",
"person_count": 1,
"expected_ppe": ["hardhat", "safety-vest", "goggles"],
"present_ppe": ["safety-vest"],
"missing_ppe": ["hardhat", "goggles"],
"detections": [
{"class_name": "person", "confidence": 0.92, "bbox": {"x1": 120, "y1": 50, "x2": 380, "y2": 470}},
{"class_name": "safety-vest", "confidence": 0.87, "bbox": {"x1": 145, "y1": 180, "x2": 355, "y2": 390}}
],
"llm_analysis": "Violación PPE: 1 operador sin casco y gafas protectoras. Riesgo: lesión craneal y exposición ocular. Acción correctiva inmediata requerida."
}
Seguridad
-
Kafka: SASL_SSL con SCRAM-SHA-512 (credenciales
cdc-userdesde Kubernetes Secret) -
Kafka Console OIDC: Autenticado vía Keycloak (RHBK) — roles:
platformadmin→ admin,userN→ viewer -
OVMS / YOLO: Acceso interno al cluster únicamente (sin Route externa)
-
Endpoint LLM: KServe con inyección de token ServiceAccount
-
Tráfico inter-namespace: Todas las conexiones Kafka usan TLS
Integración con OpenShift AI
El modelo de NeuroFace se sirve a través de OpenShift AI usando KServe:
| Recurso | Detalle |
|---|---|
ServingRuntime |
|
InferenceService |
|
Jupyter Workbench |
|
GitOps y ArgoCD
Todos los recursos del pipeline CV se despliegan vía GitOps:
-
field-content-neuroface-cv: Application ArgoCD para OVMS, InferenceService, CV Processor, Notebook -
field-content-mailpit: Application ArgoCD para Mailpit (SMTP sink) -
field-content-kafka-console: Console con OIDC habilitado
La definición completa está en examples/helm/components/neuroface-cv/templates/all.yaml.