Entre febrero y julio de 2026, la policía de transporte británica (BTP) escaneó más de 500.000 rostros en las estaciones más transitadas de Londres con reconocimiento facial en vivo. El resultado: una sola alerta contra la lista de vigilancia, y resultó ser un falso positivo, sin ningún arresto derivado directamente de ella.
Esa cifra no demuestra que la tecnología falle. Demuestra que, con una lista de vigilancia pequeña y bien filtrada, casi nadie de esos 500.000 rostros iba a coincidir. Entender por qué exige mirar cómo se mide la precisión de un sistema de identificación biométrica facial y qué pasa cuando se mueve el umbral de similitud.
TL;DR
- El umbral de similitud decide cuántos falsos positivos y falsos negativos comete un reconocimiento facial.- FAR mide cuántos impostores acepta un sistema; FRR, cuántas personas legítimas rechaza.- Bajar el umbral reduce los falsos negativos pero dispara los falsos positivos, sin un punto que elimine ambos.- face_recognition, la librería de Python, usa una tolerancia de 0.6 sobre embeddings de 128 dimensiones.- Con una watchlist chica y un umbral estricto, 500.000 escaneos pueden arrojar solo una alerta falsa, como en Londres.
¿Qué es el reconocimiento facial?
El reconocimiento facial es una tecnología biométrica que identifica o verifica personas a partir de rasgos únicos del rostro, capturados por una cámara y convertidos en un vector numérico. Compara ese vector contra una base de datos o una lista de vigilancia, y decide si hay coincidencia según un umbral de similitud configurable.
Esa última parte es la que casi nunca aparece en los titulares. El sistema no dice "sí" o "no" de forma absoluta: calcula qué tan parecidos son dos rostros y compara ese número contra un límite que alguien, en algún momento, configuró.
Por qué la precisión importa más que el titular
Un titular como "500.000 escaneos, 1 falso positivo" suena a éxito rotundo o a fracaso total según quién lo lea. Ninguna de las dos lecturas es correcta sin conocer dos datos adicionales: cuántas personas había en la lista de vigilancia y qué tan estricto era el umbral usado.
Fraser Sampson, excomisionado británico de biometría y videovigilancia, resumió el problema en declaraciones recogidas por The Guardian: el éxito de un despliegue depende de variables que deben alinearse, entre ellas la ubicación, el horario, la composición de la lista de vigilancia y la probabilidad de que esas personas efectivamente pasen por ahí. Sampson, hoy director no ejecutivo de Facewatch (empresa que opera reconocimiento facial en tiendas), señaló además una diferencia clave: en un supermercado el éxito es que no entren ladrones conocidos; para la policía, el éxito es atrapar a alguien. Bajo ese criterio, el ensayo de Londres no fue especialmente fructífero.
Cómo funciona: de una cara a un vector de números
Una cámara capta un fotograma, un modelo de detección localiza el rostro y lo alinea, y una red neuronal convolucional lo convierte en un vector de puntos flotantes, un embedding. La librería de Python face_recognition, basada en dlib, genera embeddings de 128 dimensiones a partir de esa red.
flowchart TD
A["Camara capta el rostro"] --> B["Deteccion y alineacion facial"]
B --> C["Red neuronal genera el embedding"]
C --> D["Comparacion contra la watchlist"]
D --> E{"Distancia menor o igual al umbral?"}
E -->|"Si"| F["Alerta al oficial"]
E -->|"No"| G["Sin coincidencia"]
Ese embedding no se guarda como una foto: es una lista de 128 números que representa rasgos geométricos del rostro (distancia entre ojos, forma de la mandíbula, entre otros). Comparar dos rostros equivale a medir qué tan lejos están sus dos vectores en ese espacio de 128 dimensiones.
La matriz de confusión: falsos positivos, falsos negativos y sus primos
Cada comparación contra la watchlist cae en una de cuatro categorías: verdadero positivo (era la persona correcta y coincidió), verdadero negativo (no era y no coincidió), falso positivo (no era la persona pero el sistema dijo que sí) y falso negativo (era la persona pero el sistema dijo que no).
En biometría, la tasa de falsos positivos se llama FAR (False Acceptance Rate) y la de falsos negativos, FRR (False Rejection Rate). El programa FRVT del NIST mide y publica ambas tasas para decenas de algoritmos de distintos proveedores, en vez de reducirlos a un solo número de "precisión".
El umbral de similitud: el dial que decide todo
El umbral es la distancia máxima que el sistema tolera para declarar una coincidencia. En face_recognition, ese valor se llama tolerance y su valor por defecto es 0.6 sobre la distancia euclidiana entre dos embeddings de 128 dimensiones.
Bajar el umbral (exigir vectores más parecidos) reduce el FAR pero sube el FRR: el sistema se vuelve más estricto y rechaza más coincidencias reales. Subirlo hace lo contrario. No existe un umbral que minimice ambos errores a la vez, así que cada despliegue elige en qué error prefiere equivocarse.
sequenceDiagram
participant C as "Camara"
participant S as "Sistema de reconocimiento"
participant O as "Oficial de policia"
C->>S: envia el fotograma
S->>S: calcula el embedding y la distancia
S-->>O: alerta si la distancia es menor o igual al umbral
O->>O: verifica la coincidencia antes de actuar
Note over S,O: la alerta no autoriza un arresto por si sola
💡 Tip: si necesitás un solo número para comparar dos sistemas, buscá su Equal Error Rate (EER): el punto donde el FAR y el FRR se igualan.
UmbralEfecto en falsos positivos (FAR)Efecto en falsos negativos (FRR)Cuándo usarloEstricto (ej. 0.4)BajoAltoVigilancia con watchlists grandes o alto costo de un errorMedio (0.6, valor por defecto de face_recognition)EquilibradoEquilibradoPrototipos y casos generalesPermisivo (ej. 0.75)AltoBajoDesbloqueo personal, donde la conveniencia pesa másEjemplos prácticos en Python
Ejemplo 1: distancia entre dos embeddings
Para ver la matemática alcanza con vectores chicos; en producción esos vectores tienen 128 dimensiones.
import numpy as np
embedding_a = np.array([0.10, 0.20, 0.30, 0.40])
embedding_b = np.array([0.15, 0.25, 0.28, 0.42])
umbral = 0.60
distancia = np.linalg.norm(embedding_a - embedding_b)
print(f"Distancia: {distancia:.4f}")
print("MATCH" if distancia El ensayo de la BTP costó 320.786 libras en equipo y personal a lo largo de 18 despliegues.
## Casos de uso reales
Dividiendo el costo total del ensayo (320.786 libras) entre los 18 despliegues, cada operación costó en promedio unas 17.821 libras en equipo y personal, para casi 100 horas de trabajo policial en total, según la [solicitud de información obtenida por Liberty Investigates](https://www.theguardian.com/technology/2026/sep/29/trial-live-facial-recognition-cameras-london-stations-false-positive).
En agosto, la BTP extendió el ensayo cuatro meses más y lo amplió a estaciones del metro de Londres. Desde esa extensión, la policía reportó tres alertas positivas confirmadas: personas que resultaron estar cumpliendo órdenes de prevención de daño sexual u otras condiciones judiciales. A diferencia de la primera fase, ahí el sistema sí acertó, lo que sugiere que la composición de la watchlist cambió junto con el umbral operativo.
Transport for London justificó la extensión diciendo que el sistema "identificaría a personas en listas de vigilancia policial en estaciones clave elegidas por su máximo impacto", con foco en violencia contra mujeres y niñas. En paralelo, más de la mitad de las policías de Inglaterra y Gales ya despliegan reconocimiento facial en vivo, y la policía metropolitana instalará cámaras fijas en el West End de Londres; el alcalde Sadiq Khan confirmó su uso en la recién peatonalizada Oxford Street.
## Errores comunes y buenas prácticas
- **Confundir pocos falsos positivos con un sistema preciso**: el número absoluto depende del tamaño de la watchlist y del volumen escaneado, no solo del umbral.- **Usar un único umbral para todo**: la seguridad de un aeropuerto no tiene el mismo costo de error que desbloquear un teléfono.- **No versionar el umbral en producción**: cambiarlo sin registrar el valor anterior rompe cualquier auditoría posterior.- **Ignorar el sesgo demográfico**: el mismo umbral puede producir un FAR distinto según el grupo demográfico si el modelo se entrenó con datos poco balanceados, algo que los reportes del FRVT del NIST documentan por proveedor.- **Tratar cada alerta como un arresto automático** en lugar de una pista que un oficial debe verificar antes de actuar.
## Comparativa con otras tecnologías biométricas
TecnologíaRequiere contactoFunciona a distanciaCaso de uso típicoHuella dactilarSíNoDesbloqueo de dispositivos, control de accesoIrisNo, pero exige cercaníaNoFronteras, instalaciones de alta seguridadVozNoSí, por micrófonoCentros de atención telefónica, asistentesIdentificación facialNoSí, por cámaraVigilancia, desbloqueo, control fronterizo
## Profundizando: ROC, EER y el problema de la base pequeña
Graficar el FAR contra el FRR para cada valor posible del umbral produce una curva ROC (o su variante DET, común en biometría). Cada punto de esa curva es un umbral distinto; el EER es el punto donde ambas tasas se cruzan, y suele usarse como resumen de un solo número al comparar algoritmos, aunque nunca reemplaza a la curva completa.
Hay un efecto que explica mejor que cualquier otro por qué Londres tuvo apenas un falso positivo: si la watchlist tiene pocas personas y el resto del público no tiene ninguna relación con ella, casi todas las comparaciones son verdaderos negativos por construcción, así que incluso un FAR modesto produce pocos falsos positivos en términos absolutos. Ese mismo FAR, aplicado a una base de millones de rostros (por ejemplo, un padrón nacional), generaría muchísimas más alertas falsas sin que el algoritmo haya cambiado en nada.
> **⚠️ Ojo:** un umbral calibrado para una watchlist de unos cientos de personas puede disparar muchos más falsos positivos si se aplica sobre una base de millones de rostros, aunque el FAR del algoritmo no cambie.
flowchart TD
A["Umbral de similitud"] --> B["Umbral mas estricto, numero menor"]
A --> C["Umbral mas permisivo, numero mayor"]
B --> D["FAR bajo, menos falsos positivos"]
B --> E["FRR alto, mas falsos negativos"]
C --> F["FAR alto, mas falsos positivos"]
C --> G["FRR bajo, menos falsos negativos"]
Más de la mitad de las policías de Inglaterra y Gales ya usan reconocimiento facial en vivo.
📖 Resumen en Telegram: [Ver resumen](https://telegra.ph/Reconocimiento-facial-el-umbral-que-decide-falsos-positivos-y-negativos-09-29)
Tu próximo paso: corré el Ejemplo 2 con tus propias distancias simuladas y anotá en qué umbral tu caso de uso preferiría equivocarse, hacia el FAR o hacia el FRR.
## Preguntas frecuentes
### ¿Qué es la tasa de falsos positivos en una tecnología de reconocimiento de rostros?
Es el FAR (False Acceptance Rate): el porcentaje de comparaciones donde el sistema declara una coincidencia con alguien que en realidad no es la persona buscada.
### ¿Cómo se elige el umbral de similitud en un algoritmo de verificación facial?
Se elige según el costo de cada tipo de error: un umbral estricto reduce falsos positivos pero rechaza más coincidencias reales, y un umbral permisivo hace lo contrario. No hay un valor universalmente correcto.
### ¿Por qué el ensayo con reconocimiento facial en Londres tuvo un solo falso positivo en 500.000 escaneos?
Porque la watchlist usada era pequeña y controlada, así que la gran mayoría de los 500.000 rostros eran verdaderos negativos por diseño, no porque el algoritmo fuera perfecto.
### ¿Qué diferencia hay entre FAR y FRR en un software de coincidencia facial?
FAR mide falsos positivos (aceptar a un impostor) y FRR mide falsos negativos (rechazar a la persona correcta). Bajar uno generalmente sube el otro.
### ¿Es lo mismo verificación 1:1 que identificación 1:N en un sistema de identificación biométrica facial?
No: la verificación 1:1 compara un rostro contra una sola identidad reclamada (como desbloquear un teléfono), mientras que la identificación 1:N lo compara contra toda una lista de vigilancia, como en el caso de la BTP.
### ¿Puedo instalar un software de coincidencia facial en mi propia computadora?
Sí, la librería de Python face_recognition corre en Linux, macOS y Windows con hardware de escritorio normal, sin necesidad de GPU dedicada para casos de prueba pequeños.
## Referencias
- [The Guardian](https://www.theguardian.com/technology/2026/sep/29/trial-live-facial-recognition-cameras-london-stations-false-positive): cobertura del ensayo de reconocimiento facial de la policía de transporte británica.- [NIST FRVT](https://www.nist.gov/programs-projects/face-recognition-vendor-test-frvt): programa que mide FAR y FRR de algoritmos de reconocimiento facial de distintos proveedores.- [Wikipedia](https://en.wikipedia.org/wiki/Facial_recognition_system): historia y funcionamiento general de los sistemas de reconocimiento facial.- [GitHub: face_recognition](https://github.com/ageitgey/face_recognition): librería de Python usada en los ejemplos de este artículo, basada en dlib.- OpenCV: tutorial oficial de detección de rostros con clasificadores en cascada.
📱 **¿Te gusta este contenido?** Únete a nuestro canal de Telegram [@programacion](https://t.me/programacion) donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.
Top comments (0)