- Stella v273.0.0.21 contiene dentro de la app complementaria de los lentes inteligentes de Meta un sistema de reconocimiento facial en el dispositivo que conecta detección de rostros, alineación, embedding, base de datos local, índice vectorial, ruta de almacenamiento y superficie de notificaciones
- Al invocar directamente los handlers existentes con fotos de prueba, funcionó todo el flujo hasta detectar rostros, generar embeddings biométricos de 2048 dimensiones, buscar en el índice local y, si había coincidencia, enviar una notificación de Android
"Person recognized"
- Tres modelos ExecuTorch —SCRFD, KPSAligner y SFace— se descargan mediante NMLML, y SFace se encarga de convertir el rostro en un embedding de 2048 números
person_profiles/objects.db de RLDrive usa búsqueda por coseno sobre vec0 float[2048], y la ruta de sin coincidencia guarda el rostro recortado .jpg y la huella .emb en NameTagsPending/
- En cuentas no inscritas por defecto no aparecen la tarjeta
"Connections" ni la pantalla del perfil objetivo, y tampoco se observó un push de datos del namespace facial por parte de Meta, por lo que la gran incógnita sigue siendo si se desplegará y cuándo
Alcance y límites
- La app analizada es la compilación Android
com.facebook.stella v273.0.0.21 de Stella, la app complementaria de los lentes inteligentes de Meta
- Dentro de la app conviven tres modelos faciales, un esquema de BD local, un índice vectorial por similitud de coseno coherente con la salida de los modelos, una ruta de escritura que prepara registros biométricos en disco, una superficie de notificaciones y un widget para usuarios llamado
"Connections"
- Al invocar directamente los handlers existentes con fotos de prueba, el pipeline se ejecutó de principio a fin: detectó el rostro, generó un embedding de 2048 dimensiones y luego buscó en el índice local
- En cuentas no inscritas por defecto no apareció la UI para usuarios, la pantalla que debía abrir el deeplink de la notificación tampoco existía en la build v273, y tampoco se observó en la cuenta de prueba un flujo en el que Meta empujara datos de identidad hacia la BD relacionada
- El punto clave es distinguir que esto no demuestra que Meta esté identificando personas en secreto para usuarios comunes hoy, sino que existe en el dispositivo un sistema completo capaz de hacerlo, actualmente bloqueado por compuertas de Meta
Stack de modelos
| Nombre del recurso |
Archivo |
Tamaño |
Rol |
android_facerec_scrfd |
SCRFD.pte |
3.4 MB |
Detectar rostros en la imagen |
android_facerec_kps_aligner |
KPSAligner.pte |
117 KB |
Recortar y alinear el rostro detectado |
android_facerec_sface |
SFace.pte |
96 MB |
Convertir el rostro en un embedding de 2048 números |
- Los tres modelos son recursos
.pte de ExecuTorch descargados desde Meta mediante el sistema de distribución de assets NMLML
SCRFD corresponde al SCRFD de InsightFace, SFace al SFace de Zhong et al. 2021, y KPSAligner pertenece a la familia de modelos de alineación basada en puntos clave
- La variante de SFace de Meta, con 96 MB y salida de 2048 dimensiones, parece más grande que la referencia pública de alrededor de 40 MB y 128–512 dimensiones
- El hecho de incluir modelos de detección e embedding facial no prueba por sí solo una función de reconocimiento; la detección facial en el dispositivo también puede usarse para encuadre o autofoco
Índice facial local y estructura de la BD
- El pipeline de ejecución está diseñado para leer la siguiente BD SQLite
/data/user/0/com.facebook.stella/files/rldrive/person_profiles/objects.db
- Esta BD se encuentra dentro del namespace
person_profiles bajo RLDrive, el framework de sincronización entre dispositivos de Meta, un canal diseñado para ser llenado de forma remota
- En la cuenta de prueba no se observó que Meta empujara datos directamente a
person_profiles, por lo que lo observado fue la existencia del canal
- El esquema central separa información de personas, información de rostros y una tabla de búsqueda vectorial de 2048 dimensiones
CREATE TABLE person (
nodeid INTEGER PRIMARY KEY,
name TEXT,
uri TEXT,
blob BLOB,
deleted INTEGER,
version BLOB
);
CREATE TABLE face (
nodeid INTEGER PRIMARY KEY,
mediaPath TEXT,
personUri TEXT,
blob BLOB,
deleted INTEGER,
uri TEXT,
version BLOB
);
CREATE VIRTUAL TABLE face_mediaPath_vec
USING vec0(mediaPath float[2048] distance_metric=cosine);
- Las filas de
face apuntan a person mediante personUri, y face.mediaPath actúa como clave primaria de face_mediaPath_vec
- El reconocimiento sigue un flujo en el que busca el embedding de 2048 números por similitud de coseno y luego hace join con
person.name para usarlo en el texto de la notificación
vec0 es la extensión open source sqlite-vec, que convierte SQLite en un motor de similitud vectorial, y la dimensión float[2048] coincide exactamente con la salida del embedder SFace incluido en la app
- El esquema permite múltiples filas
face para un mismo personUri, pero en un dispositivo no inscrito no se puede ver si en el despliegue real se usa un modelo 1:1 o 1:N
Ramas de ejecución y archivos almacenados
- En una prueba que ejecutó el pipeline completo dos veces, se separaron la rama de sin coincidencia para un índice vacío y la rama de coincidencia con un embedding único cargado previamente
- La rama sin coincidencia escribe pares
(uuid.jpg, uuid.emb) en NameTagsPending/ y no envía ninguna notificación
- La rama con coincidencia muestra una notificación de Android en el canal de producción
nametags_recognition, con el título "Person recognized" y el cuerpo "Recognized Michel Foucault", y no agrega nada a NameTagsPending/
- Los rostros no reconocidos se guardan en la siguiente ruta
/data/user/0/com.facebook.stella/files/NameTagsPending/
- Cada rostro no reconocido genera un par
.jpg y .emb con un UUID nuevo como nombre; el .jpg es el rostro recortado y alineado producido por SCRFD y KPSAligner, y el .emb es la huella SFace de 2048 números
- El modo del directorio es
0700, persiste tras reinicios, y la escritura solo ocurre en la rama sin coincidencia
- El archivo
.emb validado tenía un tamaño de 8,192 bytes, estructura big-endian de 2048 × float32, norma L2 de 0.999999, valores min/max de −0.092110 / +0.098950 y media de +0.000292
- El par
(uuid.jpg, uuid.emb) constituye un registro biométrico completo en el mismo formato y codificación que el índice por coseno de person_profiles/objects.db está diseñado para comparar
Notificaciones e interfaz de usuario
- Stella define un canal de notificaciones Android llamado
nametags_recognition, con nombre "NameTags recognition", descripción "Notifications for recognized NameTags connections" e importancia IMPORTANCE_HIGH, con heads-up, sonido e insignias
- La plantilla de la notificación está hardcodeada dentro del handler de reconocimiento: el título siempre es
"Person recognized" y el cuerpo siempre sigue la forma "Recognized " + name, donde name proviene de la tabla person de person_profiles/objects.db
- La notificación puede tocarse y está configurada para abrir dentro de Stella la pantalla de perfil de la persona mediante un deeplink creado por Meta con la forma
fb-viewapp://name_tags?face_id=<face_id>
- En v273 no se encuentra esa pantalla objetivo ni aparece en el navigation graph, por lo que al tocar la notificación se abre la pestaña predeterminada de Stella
- Dentro del APK hay una tarjeta bajo la sección
"Connections", con los textos "See your connections" y "Remember the people you met and make new connections." hardcodeados
- En cuentas no inscritas por defecto, esa tarjeta no aparecía en la pestaña Glasses, aunque durante las pruebas sí llegó a mostrarse
Conclusión
- Stella v273 incluye un stack completo de reconocimiento facial en el dispositivo que abarca detección, alineación, embedding, índice vectorial, almacenamiento, ruta de escritura y superficie de notificaciones
- El pipeline ejecutado de extremo a extremo etiqueta rostros conocidos y los muestra en notificaciones, mientras que los rostros desconocidos preparan en disco un recorte y una huella
- La dimensión del índice, el formato del embedding y el esquema de almacenamiento coinciden entre sí, por lo que no parece código muerto disperso sino un sistema coherente
- La tarjeta
"Connections" orientada al usuario y la pantalla de perfil destino de la notificación no están en la build o permanecen más ocultas
- La BD que usa el pipeline en vivo está dentro de un namespace de sincronización junto con otros namespaces que Meta sí llena desde el servidor, pero en la cuenta de prueba no se observó ningún push del namespace facial
- Lo que sigue sin confirmarse es si Meta hoy identifica desconocidos para los usuarios, si fluyen datos de registro y si esta función está habilitada en producción
- Un sistema construido, desplegado y conectado hasta el punto de producir huellas faciales de 2048 dimensiones y una notificación hardcodeada
"Person recognized" representa una inversión de ingeniería; si eso se aplicará en producción y cuándo, sigue siendo algo que Meta debe responder
1 comentarios
Opiniones de Hacker News
Ojalá existiera una función así completamente offline. Tengo prosopagnosia, así que sería realmente útil si pudiera cargar fotos de mis amigos en una base de datos offline para que los reconociera
La accesibilidad no debería exigir renunciar a la privacidad
Hace poco escuché la mejor analogía para explicar la prosopagnosia: las manzanas. Si pones dos manzanas una al lado de la otra, se ven las diferencias, pero reconocer una manzana específica entre 50 manzanas parecidas es un problema totalmente distinto
Es como si una manzana te hablara en la calle y tuvieras que recordar de dónde la conoces; hay atajos, pero dependen mucho del contexto y fallan seguido. Puedo saber que la manzana pelirroja y con barba es mi compañero de la oficina de al lado, pero me confundo sobre si es la misma manzana que me saludó ayer en el centro
Los cambios de peinado son un problema especialmente grande. Una vez, a la hora del almuerzo, me preguntaba quién era un colega nuevo; lo reconocí por la voz, y resultó ser una persona con la que había trabajado 10 años que solo se había cambiado el color del pelo
Cuando salió por primera vez Google Glass en 2012, yo dirigía una startup tecnológica de conferencias, y como teníamos una base de datos con fotos de perfil de ponentes y asistentes, la idea de una app que “hiciera que los lentes encontraran a la persona con la que quedaste en un salón lleno de gente” surgió de inmediato
Pero los términos para desarrolladores de Google Glass lo prohibían estrictamente, y con pensarlo un poco más era obvio por qué
Quisiera usar exactamente lo opuesto a esto. Hace falta un dispositivo que me avise si alguien cerca está usando los lentes de IA de Facebook, para poder evitarlo
Ya le he dejado muy claro a mi familia que no compartan fotos de los niños en plataformas de Meta. Si este tipo de dispositivos se impone al público general que no lo pidió, también habrá gente que reaccione de forma violenta
Es completamente distinto de los CCTV, cámaras o smartphones que hoy se aceptan socialmente cuando graban de forma manual
Para mí, Meta es el caso emblemático de violación de la privacidad en la historia de la tecnología. Estos smart glasses ya cruzaron demasiado la línea al grabar personas dentro de sus casas, a veces desnudas, sin consentimiento
Esto ya se discutió aquí hace como un mes: Meta in row after workers who saw smart glasses users having sex lose jobs (https://news.ycombinator.com/item?id=47961838)
Parece que quieren hacer ricos a los abogados de Chicago. [0]
[0]: https://en.wikipedia.org/wiki/Biometric_Information_Privacy_Act
Según el enlace, BIPA exige que las empresas que operan en Illinois cumplan requisitos relacionados con la recolección y almacenamiento de información biométrica; deben obtener consentimiento para recolectar o divulgar identificadores biométricos de una persona, destruirlos oportunamente y almacenarlos de forma segura. La gestión de datos biométricos también requiere un “estándar de cuidado razonable”
Idea para startup: poner LED infrarrojos cercanos en el puente y los costados de unos lentes normales, con buena eficiencia y brillo, pero usando PWM con un reloj irregular de unos 10Hz
Si quieres tomarme una foto, pregúntame o usa película
No se me ocurre ni un solo uso práctico que ayude a mi vida. Ya hay reconocimiento facial local integrado justo detrás de los lentes
Recuerdo el nombre de algunas personas, y al final llegué a pensar que la habilidad misma de memorizar nombres no tiene tanta importancia. Sí recuerdo los nombres de las personas que realmente quiero.
También vale la pena pensar si de verdad a alguien le importa tanto que yo olvide su nombre. Cuando era niño, en scouts tenía un amigo con el que anduve todo un año, pero no recuerdo su nombre, y no pasó nada grave
Conviví casi 10 años con un grupo grande y aun así me costaba mucho recordar quién era quién; durante la pandemia, como en Zoom salían los nombres, los fui aprendiendo poco a poco a lo largo de unas semanas.
Cuando enseñaba buceo, camino a la tienda memorizaba la lista de nombres de los alumnos en un orden lo más aleatorio posible para reducir la carga cognitiva de asociar cara y nombre. Al pasar lista, anotaba todos los nombres e intentaba ir haciéndolo gradualmente sin chuleta mientras hacía preguntas.
Pero en cuanto se ponen el equipo, todo se viene abajo, sobre todo en lugares donde usan capucha. Si son dos hombres blancos de unos 35 años, me confundo. Si fuera socialmente aceptable, me gustaría usar esto en lentes graduados para reducir esa carga
No creo que Meta esté haciendo esto por accesibilidad
Claro, es una conversación bastante incómoda, así que también existe la estrategia de hacer una medio presentación y esperar que todos se presenten por completo entre sí para acordarme en ese momento
Como principio general, me pregunto qué tal sería esta dirección: las computadoras pueden hacer automáticamente todo lo que quieran siempre que no toquen el límite de red, pero para acceder a la red tendría que iniciarse obligatoriamente con una acción explícita de una persona.
Sería algo parecido a cómo el navegador exige una acción confiable del usuario para capturar el mouse o entrar en pantalla completa, pero aplicado de forma más amplia. El alcance de la comunicación en red también tendría que quedar claro para que el usuario no pueda malinterpretarlo.
Si es demasiado complejo como para explicárselo al usuario objetivo, entonces no debería hacerse en su nombre. Esto aplicaría sobre todo a productos de consumo masivo, no tanto a distribución interna.
Si no trazamos una frontera tan firme, siento que vamos rumbo al panóptico. Incluso sin un impulso activo del gobierno, el simple incentivo de ganancias de la era digital lleva a ese resultado. En teoría, reglas más detalladas podrían ser mejores, pero cuando los incentivos son fuertes, la gente no suele cumplir bien reglas complejas
Estoy en una posición donde puedo crear políticas de seguridad en el trabajo, y una de ellas es prohibir los lentes inteligentes dentro de la oficina. No podemos permitir que los empleados apunten con unos lentes de Facebook a pantallas donde aparece información confidencial.
Casi no se me ocurre ninguna situación en la que aceptaría permitir el uso de reconocimiento facial. Si estoy en un restaurante, no hay razón para que Facebook sepa dónde como; si estoy en un club de música, no necesita saber qué escucho. Espacios como baños públicos serían un no rotundo. Tampoco quiero que me rastreen en la vía pública para saber con quién hablo.
No creo que pueda aceptar ni un poco las situaciones en las que se usaría esto. Honestamente, más allá de avergonzar públicamente a la gente que use este spyware público, ojalá se genere pronto un ambiente en el que a la gente le dé miedo físico que la descubran usándolo afuera.
Y para responder a la obvia réplica de “¿también prohíben las cámaras de los celulares en el trabajo?”, sí. Por supuesto que también estaría prohibido pasarse todo el día apuntando con la cámara del teléfono a la pantalla y grabando el trabajo. No compartimos información confidencial con proveedores que no hayan sido revisados y contratados, y si veo a alguien grabando, lo llamaría aparte y le explicaría que es una situación muy riesgosa
No quiero que BigTech o el gobierno rastreen todas mis interacciones, pero sí me parece aceptable que la dashcam del auto del vecino registre localmente que pasé frente a su entrada, siempre que no se suba a un tercero.
Claro, la mayoría no quiere autohospedar nada y la mayoría de los servicios tampoco usa cifrado de extremo a extremo, así que es difícil vender esto como algo importante en la práctica hoy. Aun así, si pensamos en regulación y en el mundo que queremos, es una distinción relevante
Aquí hay una lógica parecida a la de la Segunda Enmienda, y es bastante difícil de refutar. Al menos esto no mata a nadie. Quiero que todos los policías estén siempre rodeados de 5 o 6 dispositivos de grabación que ellos no controlen. Esa es la opción menos mala.
Obviamente no me gusta una estructura donde todo vaya a Facebook, y espero que superemos esa etapa
¿Qué pasaría si Meta, Flock y Palantir unieran fuerzas? Parece que podrían crear una combinación malvada tipo paquete accionario a lo Musk