← Volver al blog
Plugins #deface

Difuminado de rostros en pantalla con el plugin Deface

Un plugin de privacidad: un worker Python detecta rostros con CenterFace y el overlay del reproductor los difumina, mosaica o enmascara del lado cliente. Leé la advertencia de privacidad antes de confiar en él.

2 min de lectura
Read in English

Privacidad en la capa de presentación

El plugin Deface difumina rostros en el reproductor. Un worker Python corre CenterFace sobre el stream HLS en vivo de la app, transmite cajas de rostro normalizadas al canal de datos en vivo del plugin, y el overlay del reproductor ofusca cada región del lado cliente — difuminado, mosaico o una máscara sólida.

Está modelado sobre el open-source ORB-HD/deface, adaptado al framework de workers de StreamHub para que el ciclo de vida del proceso lo gestione el sistema por vos.

Leé esta advertencia primero

Deface anonimiza solo el reproductor. Las máscaras las dibuja el navegador del espectador encima del elemento de video, lo que significa:

  • el stream crudo (WebRTC, segmentos HLS, restreams RTMP) todavía contiene los rostros;
  • las grabaciones, VODs y capturas todavía contienen los rostros — el pipeline de grabación queda intacto;
  • un espectador con DevTools puede quitar el overlay.

Tratalo como una función de privacidad de la capa de presentación — pantallas de kiosco, embeds públicos, pantallas de demo — no como anonimización del medio en sí. El grabado (burn-in) de las máscaras del lado servidor no está implementado.

Instalar y configurar

curl -X POST $BASE/apps/live/plugins/deface/install \
  -H "Authorization: Bearer $TOKEN"

curl -X PATCH $BASE/apps/live/plugins/deface \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{"enabled": true, "config": {"room": "lobby", "replacewith": "blur"}}'

room es el único campo requerido. Perillas útiles de config:

  • replacewithblur | mosaic | solid | none (solo detectar).
  • thresh — umbral de detección (default 0.2).
  • maskScale — agrandar las cajas para cubrir pelo/mentón (default 1.3).
  • fps — cuadros muestreados por segundo (default 2).
  • boxes — rectángulos en lugar de las elipses por defecto.

Por qué no parpadea

El worker hace POST en cada cuadro muestreado — una lista de rostros vacía limpia activamente las máscaras. Es deliberado: una máscara vieja que persiste es un bug de render, mientras que una máscara faltante es un bug de privacidad. El overlay mapea las cajas normalizadas de CenterFace sobre el elemento de video real (contemplando letterbox/pillarbox), y aplica debounce a los payloads vacíos antes de limpiar, así una detección inestable en una escena estática no titila.

La CPU suele alcanzar

CenterFace es mucho más liviano que YOLO. Mantené fps bajo (1–4) y reducí la escala de fuentes HD con scale alrededor de 640x360, y la CPU maneja la mayoría de las salas cómodamente. CUDA solo rinde por encima de ~10fps o con muchas salas simultáneas, y el worker nunca entra en crash-loop por una GPU ausente — cae a CPU con una nota en el log. El modelo de ~7MB se descarga en la primera corrida y se comparte entre apps.