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

NeuroFace Backend

API FastAPI + OpenCV con reconocedor LBPH — entrena labels y expone /api/labels

neuroface

OpenVINO Model Server (OVMS)

Servidor de inferencia Intel que sirve face-detection-retail-0005 (FP16) vía REST/gRPC, desplegado como KServe InferenceService

neuroface

Model PVC

PersistentVolumeClaim de 1 Gi que almacena los archivos .xml/.bin del Intel Model Zoo

neuroface

Jupyter Workbench

Notebook de OpenShift AI para experimentación con modelos

neuroface

CV Processor

Microservicio Python (UBI9) — pollea OVMS /v1/config y Backend /api/labels cada 30 s

kafka-cdc

Kafka Topic

cv.face.detections en Strimzi cdc-cluster (SASL_SSL + SCRAM-SHA-512)

kafka-cdc

Kafka Consumer

Mismo proceso Python — consume eventos y rutea por event_type

kafka-cdc

Mailpit

SMTP + HTTP API — recibe emails HTML formateados por tipo de evento

openshift-lightspeed

Flujo de Eventos

El CV Processor ejecuta un loop de polling continuo:

  1. Registrar rostro — El usuario registra un rostro en la UI de NeuroFace (webcam → Frontend → Backend LBPH)

  2. Poll OVMSGET /v1/config cada 30 segundos para verificar estado del modelo

  3. Poll BackendGET /api/labels cada 30 segundos para detectar nuevos rostros registrados

  4. Producir a Kafka — Publica eventos JSON al topic cv.face.detections (SASL_SSL autenticado)

  5. Consumir de Kafka — El mismo proceso lee eventos y rutea por event_type

  6. Enviar email — Formatea HTML y envía POST /api/v1/send a Mailpit

Tipos de Evento

Tipo Descripción Destinatario

person_registered

Se detecta un nuevo label en la respuesta de /api/labels

Security Admin — admin@neuralbank.io

ovms_model_status

OVMS /v1/config retorna la configuración del modelo

ML Ops — mlops@neuralbank.io

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

neuroface

Granite 3.1 2B LLM

KServe InferenceService — genera análisis de seguridad ante violaciones PPE

neuroface

Kafka Topic

cv.ppe.detections en Strimzi cdc-cluster con SASL_SSL + SCRAM-SHA-512

kafka-cdc

Kafka DLQ

dlq.ppe-errors — cola de mensajes fallidos

kafka-cdc

Jupyter Workbench

ppe-yolo-detection.ipynb — consume eventos Kafka, genera gráficos de compliance

neuroface

Flujo de Datos PPE

Cada frame de webcam sigue este recorrido:

  1. Captura — El frontend Angular captura un frame vía WebRTC

  2. Inferencia YOLO — El backend reenvía a YOLO serving (/v1/predict), obtiene bounding boxes con nombres de clase y scores de confianza

  3. Verificación de Compliance — El backend compara las detecciones contra las clases PPE esperadas (hardhat, safety-vest, goggles) y asigna estado: compliant, violation o no_persons

  4. Análisis LLM (ante violación) — Granite 3.1 genera un análisis de seguridad explicando los riesgos

  5. Publicación a Kafka — Evento completo publicado a cv.ppe.detections

  6. 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-user desde 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

ovms-face-detection — runtime custom basado en la imagen OVMS

InferenceService

face-detection-retail-0005 — modo RawDeployment, storage desde PVC

Jupyter Workbench

neuroface-workbench — para experimentación y debugging de modelos

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.

Verificación

Estado del Modelo OVMS

curl -s http://face-detection-retail-0005-predictor.neuroface.svc.cluster.local:8080/v1/config

Labels Registrados

curl -s http://neuroface-backend.neuroface.svc.cluster.local:8000/api/labels

Eventos en Kafka

Navegar a Kafka Console → Topics → cv.face.detections → Messages para ver eventos en tiempo real.

Emails de Notificación

Abrir Mailpit (https://n8n-mailpit-openshift-lightspeed.) para ver los emails enviados por el consumer.

Acceso

Servicio URL

NeuroFace App

https://neuroface-neuroface.

OpenShift AI

https://data-science-gateway./projects/neuroface

Kafka Console

https://kafka-console-kafka-cdc.

Mailpit

https://n8n-mailpit-openshift-lightspeed.

Capturas de Pantalla

NeuroFace — UI de registro facial
NeuroFace — Pipeline de detección
NeuroFace — Eventos Kafka
NeuroFace — Notificaciones Mailpit