- Stella v273.0.0.21 embarque, dans l’application compagnon des lunettes connectées Meta, un dispositif de reconnaissance faciale sur l’appareil reliant détection des visages, alignement, embeddings, base locale, index vectoriel, chemin de stockage et surface de notification
- En appelant directement les handlers existants avec des photos de test, tout fonctionne jusqu’au bout : détection du visage, génération d’un embedding biométrique en 2048 dimensions, recherche dans l’index local, puis en cas de correspondance envoi d’une notification Android
"Person recognized"
- Trois modèles ExecuTorch, dont SCRFD, KPSAligner et SFace, sont téléchargés via NMLML, SFace étant chargé de convertir un visage en un embedding de 2048 nombres
person_profiles/objects.db de RLDrive utilise une recherche cosinus vec0 sur float[2048], et le chemin sans correspondance enregistre dans NameTagsPending/ le visage découpé en .jpg et son empreinte .emb
- Sur un compte non inscrit par défaut, la carte
"Connections" et l’écran de profil cible ne sont pas visibles, et aucun push de données du namespace facial de Meta n’a été observé, ce qui laisse comme principaux points non confirmés le déploiement effectif et son calendrier
Portée et limites
- L’application étudiée est la build Android
com.facebook.stella v273.0.0.21 de l’application compagnon des lunettes connectées Meta Stella
- L’application contient à la fois trois modèles faciaux, un schéma de base locale, un index vectoriel par similarité cosinus cohérent avec les sorties des modèles, un chemin d’écriture préparant les enregistrements biométriques sur disque, une surface de notification et un widget utilisateur
"Connections"
- En appelant directement les handlers existants avec des photos de test, le pipeline s’exécute de bout en bout : il détecte les visages, produit un embedding en 2048 dimensions, puis interroge l’index local
- Sur un compte non inscrit par défaut, l’interface utilisateur n’apparaît pas, l’écran ouvert par le deeplink de notification n’existe pas non plus dans la build v273, et aucun flux où Meta pousserait depuis le serveur des données d’identité vers la base concernée n’a été observé sur le compte de test
- Le point essentiel est qu’il ne s’agit pas d’une preuve que Meta identifie déjà secrètement des personnes pour le grand public aujourd’hui, mais bien qu’un dispositif complet capable de le faire est assemblé sur l’appareil et simplement bloqué par des gates côté Meta
Pile de modèles
| Nom de l’asset |
Fichier |
Taille |
Rôle |
android_facerec_scrfd |
SCRFD.pte |
3.4 MB |
Détection de visages dans l’image |
android_facerec_kps_aligner |
KPSAligner.pte |
117 KB |
Crop et alignement du visage détecté |
android_facerec_sface |
SFace.pte |
96 MB |
Conversion du visage en embedding de 2048 nombres |
- Les trois modèles sont des assets ExecuTorch
.pte téléchargés depuis Meta via le système de distribution d’assets NMLML de Meta
SCRFD correspond à SCRFD d’InsightFace, SFace à SFace de Zhong et al. 2021, et KPSAligner à une famille de modèles d’alignement basée sur les points clés
- La variante SFace de Meta, avec ses 96 MB et sa sortie en 2048 dimensions, semble plus volumineuse que les références publiques d’environ 40 MB et 128–512 dimensions
- Le simple fait d’embarquer des modèles de détection et d’embedding faciaux ne constitue pas à lui seul une preuve de reconnaissance, la détection faciale sur appareil pouvant aussi servir au cadrage ou à l’autofocus
Index facial local et structure de la base
- Le pipeline d’exécution lit la base SQLite suivante
/data/user/0/com.facebook.stella/files/rldrive/person_profiles/objects.db
- Cette base se trouve dans le namespace
person_profiles du framework de synchronisation cross-device de Meta RLDrive, un canal conçu pour être alimenté à distance
- Sur le compte de test, aucun transfert direct de données vers
person_profiles par Meta n’a été observé ; ce qui a été constaté, c’est donc l’existence du canal
- Le schéma clé sépare les informations sur les personnes, les informations sur les visages et la table de recherche vectorielle en 2048 dimensions
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);
- Les lignes de
face pointent vers person via personUri, et face.mediaPath sert de clé primaire de face_mediaPath_vec
- La reconnaissance consiste à rechercher un embedding de 2048 nombres par similarité cosinus, puis à faire une jointure avec
person.name pour l’utiliser dans le texte de la notification
vec0 est l’extension open source sqlite-vec, qui transforme SQLite en moteur de similarité vectorielle, et la dimension float[2048] correspond exactement au format de sortie de l’embedder SFace embarqué dans l’application
- Le schéma autorise plusieurs lignes
face pour un même personUri, mais il n’est pas possible de savoir sur un appareil non inscrit si le déploiement réel adopte un modèle 1:1 ou 1:N
Branches d’exécution et fichiers stockés
- Dans un test où le pipeline complet a été exécuté deux fois, on observe une séparation entre la branche sans correspondance pour un index vide et la branche avec correspondance après préinsertion d’un embedding unique
- La branche sans correspondance écrit une paire
(uuid.jpg, uuid.emb) dans NameTagsPending/ et n’envoie pas de notification
- La branche avec correspondance déclenche une notification Android sur le canal de production
nametags_recognition, avec pour titre "Person recognized" et pour corps "Recognized Michel Foucault", sans rien ajouter à NameTagsPending/
- Les visages non reconnus sont stockés au chemin suivant
/data/user/0/com.facebook.stella/files/NameTagsPending/
- Chaque visage non reconnu génère une paire
.jpg et .emb nommée avec un nouvel UUID ; le .jpg est le visage découpé et aligné issu de SCRFD et KPSAligner, et le .emb est l’empreinte SFace de 2048 nombres
- Le répertoire est en mode
0700, persiste après redémarrage, et les écritures n’ont lieu que dans la branche sans correspondance
- Le fichier
.emb vérifié mesure 8 192 octets, avec une structure 2048 × float32 big-endian, une norme L2 de 0.999999, des valeurs min/max de −0.092110 / +0.098950 et une moyenne de +0.000292
- La paire
(uuid.jpg, uuid.emb) constitue un enregistrement biométrique complet, au même format et avec le même encodage que ce pour quoi l’index cosinus de person_profiles/objects.db a été conçu
Notifications et interface utilisateur
- Stella définit un canal de notification Android nommé
nametags_recognition, avec le nom "NameTags recognition", la description "Notifications for recognized NameTags connections" et une importance IMPORTANCE_HIGH avec heads-up, son et badge
- Le template de notification est codé en dur dans le handler de reconnaissance : le titre est toujours
"Person recognized", et le corps suit toujours la forme "Recognized " + name, où name provient de la table person de person_profiles/objects.db
- La notification est cliquable et configurée pour ouvrir l’écran de profil de la personne dans Stella via un deeplink rédigé par Meta de la forme
fb-viewapp://name_tags?face_id=<face_id>
- Dans la v273, cet écran cible est introuvable et n’apparaît pas non plus dans le graphe de navigation ; appuyer sur la notification renvoie donc vers l’onglet par défaut de Stella
- L’APK contient une carte sous la section
"Connections", avec les chaînes "See your connections" et "Remember the people you met and make new connections." codées en dur
- Sur un compte non inscrit par défaut, cette carte n’apparaît pas dans l’onglet Glasses, et elle n’est pas devenue visible pendant les tests
Synthèse
- Stella v273 contient une pile complète de reconnaissance faciale sur l’appareil, allant de la détection à l’alignement, aux embeddings, à l’index vectoriel, au stockage, au chemin d’écriture et à la surface de notification
- Le pipeline exécuté jusqu’au bout affiche les visages connus avec leur nom dans une notification et prépare sur disque les crops et empreintes des visages inconnus
- Les dimensions de l’index, le format des embeddings et le schéma de stockage sont cohérents entre eux, ce qui indique un système structuré plutôt qu’un assemblage de code mort épars
- La carte
"Connections" destinée aux utilisateurs ainsi que l’écran de profil cible des notifications sont absents de la build ou dissimulés plus profondément
- La base utilisée par le pipeline live se trouve dans un namespace synchronisé aux côtés d’autres namespaces que Meta remplit côté serveur, mais aucun push du namespace facial n’a été observé sur le compte de test
- Ce qui reste non confirmé, c’est si Meta identifie actuellement des inconnus pour les utilisateurs, si des données d’inscription circulent effectivement et si la fonctionnalité est activée en production
- Le dispositif construit, déployé et relié jusqu’à une empreinte faciale en 2048 dimensions et à une notification
"Person recognized" codée en dur représente un investissement d’ingénierie réel ; la question de son usage effectif en production et de son calendrier reste du ressort de Meta
1 commentaires
Commentaires sur Hacker News
J’aimerais qu’une telle fonctionnalité existe entièrement hors ligne. Je souffre de prosopagnosie, donc si je pouvais mettre les photos de mes amis dans une base de données hors ligne pour que l’appareil les reconnaisse, ce serait vraiment utile
L’accessibilité ne devrait pas exiger de renoncer à sa vie privée
J’ai récemment entendu la meilleure analogie pour expliquer la prosopagnosie : les pommes. Si on met deux pommes côte à côte, on voit la différence, mais reconnaître une pomme précise parmi 50 pommes semblables, c’est un problème totalement différent
C’est un peu comme si une pomme vous parlait dans la rue et qu’on vous demandait si vous vous souvenez d’où vous l’avez vue. Il existe des stratégies de contournement, mais elles dépendent beaucoup du contexte et se trompent souvent. Une pomme aux cheveux rouges et à la barbe, on peut savoir que c’est le collègue du bureau d’à côté, mais se demander si c’est la même pomme qui vous a salué hier en ville devient confus
Les changements de coiffure sont particulièrement problématiques. Une fois, à l’heure du déjeuner, je me demandais qui était ce nouveau collègue, puis je l’ai reconnu à sa voix : c’était une personne avec qui je travaillais depuis 10 ans, qui avait simplement changé de couleur de cheveux
Quand Google Glass est sorti pour la première fois en 2012, je dirigeais une startup tech pour des conférences et nous avions une base de données de photos de profil des intervenants et des participants, donc une appli « les lunettes trouvent dans une salle bondée la personne que vous devez rencontrer » m’est tout de suite venue à l’esprit
Mais les conditions développeur de Google Glass l’interdisaient strictement, et avec un peu plus de réflexion on comprenait immédiatement pourquoi
J’aimerais porter l’exact opposé de ça. Il faudrait un appareil qui m’alerte quand quelqu’un à proximité porte les lunettes IA de Facebook, afin que je puisse l’éviter
J’ai déjà clairement dit à ma famille de ne pas partager de photos des enfants sur les plateformes de Meta. Si ce genre d’appareil est imposé à un public qui n’a rien demandé, certaines personnes pourraient réagir violemment
C’est complètement différent de la vidéosurveillance généralement acceptée, ou de l’enregistrement manuel avec un appareil photo, une caméra ou un smartphone
Pour moi, Meta est un cas d’école dans l’histoire des atteintes à la vie privée. Avec ces lunettes connectées, ils sont allés beaucoup trop loin en enregistrant des gens chez eux, parfois nus, sans leur consentement
C’était encore discuté ici il y a environ un mois : Meta in row after workers who saw smart glasses users having sex lose jobs (https://news.ycombinator.com/item?id=47961838)
On dirait qu’ils sont déterminés à enrichir les avocats de Chicago. [0]
[0]: https://en.wikipedia.org/wiki/Biometric_Information_Privacy_Act
D’après le lien, la BIPA exige que les entreprises opérant dans l’Illinois respectent des obligations liées à la collecte et à la conservation des données biométriques, obtiennent le consentement avant de collecter ou divulguer les identifiants biométriques d’une personne, les détruisent en temps voulu et les stockent de manière sécurisée. La gestion des données biométriques doit aussi respecter une « norme de diligence raisonnable »
Idée de startup : mettre des LED proche infrarouge sur le pont et les branches d’une monture de lunettes ordinaire, avec un bon rendement et une forte luminosité, mais en faisant varier le PWM selon une horloge irrégulière d’environ 10 Hz
Si vous voulez prendre une photo de moi, demandez-moi, ou utilisez de la pellicule
Je ne vois absolument aucun usage pratique qui m’aiderait dans ma vie. Après tout, il y a déjà une reconnaissance faciale locale intégrée juste derrière les lunettes.
Je me souviens du nom de certaines personnes, et au fond j’en suis venu à penser que la capacité à retenir les noms n’a pas tant d’importance. Je me souviens des noms des gens que j’aime vraiment.
À l’inverse, ça vaut aussi le coup de se demander si quelqu’un se soucie vraiment que j’oublie son nom. Quand j’étais enfant, j’avais un ami chez les scouts avec qui je traînais toute l’année, mais je ne me suis jamais souvenu de son nom, et ça n’a posé aucun vrai problème.
J’ai fréquenté un grand groupe pendant presque dix ans sans vraiment réussir à retenir qui était qui, puis pendant la pandémie, le fait que Zoom affiche les noms m’a permis de les apprendre peu à peu en quelques semaines.
Quand j’enseignais la plongée sous-marine, je mémorisais la liste des prénoms des élèves, dans un ordre aussi aléatoire que possible, pendant le trajet jusqu’au magasin afin de réduire la charge cognitive liée à l’association visage-nom. À l’appel, j’écrivais tous les noms, puis j’essayais progressivement de m’en passer en posant des questions.
Mais dès que tout le monde met son équipement, surtout dans les régions où l’on porte une cagoule, tout s’effondre. Deux hommes blancs d’environ 35 ans suffisent à m’embrouiller. Si c’était socialement accepté, j’aimerais porter des lunettes correctrices de ce type pour alléger ce fardeau.
Je ne pense pas que Meta fasse ça pour l’accessibilité.
Bien sûr, c’est une conversation assez gênante, donc j’ai aussi une stratégie qui consiste à faire une demi-présentation et à espérer que les gens se présentent complètement entre eux, pour que ça me revienne à ce moment-là.
Je me demande ce que vaudrait une direction comme principe général : les ordinateurs peuvent automatiser autant qu’ils veulent tant qu’ils ne franchissent pas une frontière réseau, mais tout accès au réseau doit obligatoirement être déclenché par une action explicite d’un humain.
Un peu comme dans les navigateurs, où la capture de la souris ou le passage en plein écran exigent une action utilisateur de confiance, mais appliqué plus largement. L’étendue des communications réseau devrait aussi être claire afin d’éviter toute ambiguïté pour l’utilisateur.
Si c’est trop complexe pour pouvoir être expliqué à l’utilisateur visé, alors il ne faut pas le faire à sa place. Cela s’applique surtout aux produits grand public, pas aux déploiements internes.
Sans frontière solide de ce type, j’ai l’impression qu’on va finir dans un panoptique. Même sans impulsion active des gouvernements, la simple logique de profit de l’ère numérique suffit à produire ce résultat. Des règles plus fines seraient peut-être meilleures en théorie, mais face à de fortes incitations, les gens respectent mal les règles complexes.
Je suis en position d’établir des politiques de sécurité au travail, et l’une d’elles est l’interdiction des lunettes intelligentes dans les bureaux. On ne peut pas laisser des employés braquer des lunettes Facebook sur des écrans affichant des informations confidentielles.
J’ai aussi beaucoup de mal à imaginer une situation où j’accepterais l’usage de la reconnaissance faciale. Au restaurant, il n’y a aucune raison que Facebook sache où je mange, et dans un club de musique, il n’a pas besoin de savoir ce que j’écoute. Des lieux comparables à des toilettes publiques sont absolument exclus. Même sur un trottoir public, je n’ai pas envie qu’on puisse suivre avec qui je parle.
Je n’arrive pas du tout à accepter le moindre contexte d’usage pour ça. Honnêtement, au-delà de la simple honte publique pour les gens qui portent ce type de spyware en public, j’aimerais qu’on arrive vite à une situation où ils aient physiquement peur d’être repérés dehors avec ça.
Et pour répondre à l’objection évidente du genre « vous interdisez aussi les caméras de téléphone au travail ? », oui. Si quelqu’un passait la journée à pointer la caméra de son téléphone vers des écrans pour enregistrer le travail, ce serait évidemment interdit aussi. Nous ne partageons pas d’informations confidentielles avec des prestataires qui n’ont pas été évalués et contractualisés, et si je voyais quelqu’un enregistrer, je le convoquerais pour lui expliquer qu’il s’agit d’une situation très risquée.
Je ne veux pas que BigTech ou l’État suivent toutes mes interactions, mais si la dashcam de la voiture du voisin enregistre localement que je suis passé devant son allée, ça me va tant que ce n’est pas envoyé à un tiers.
Bien sûr, la plupart des gens ne veulent pas d’auto-hébergement, et la plupart des services ne sont pas chiffrés de bout en bout, donc il est difficile de prétendre que c’est très important en pratique aujourd’hui. Mais c’est quand même une distinction pertinente si l’on réfléchit à la régulation et au type de monde que nous voulons.
Il y a là une logique à la Deuxième Amendement, et elle est assez difficile à réfuter. Au moins, ça ne tue pas les gens. J’aimerais que chaque policier soit en permanence entouré de cinq ou six dispositifs d’enregistrement qu’il ne contrôle pas. Ce serait l’option la moins mauvaise.
Évidemment, je n’aime pas l’idée que tout parte chez Facebook, et j’espère qu’on dépassera cette étape.
Que se passerait-il si Meta, Flock et Palantir unissaient leurs forces ? On pourrait obtenir une combo maléfique façon actions groupées à la Musk.