- Stella v273.0.0.21 enthält in der Companion-App für Meta Smart Glasses eine On-Device-Gesichtserkennungs-Einrichtung, die Gesichtserkennung, Ausrichtung, Embedding, lokale DB, Vektorindex, Speicherpfad und Benachrichtigungsoberfläche miteinander verbindet
- Beim direkten Aufruf vorhandener Handler mit Testfotos lief die Kette bis zum Ende durch: Gesichtserkennung, Erzeugung eines 2048-dimensionalen biometrischen Embeddings, Suche im lokalen Index und bei einem Treffer das Senden einer Android-Benachrichtigung
"Person recognized"
- Drei ExecuTorch-Modelle, darunter SCRFD, KPSAligner und SFace, werden über NMLML ausgeliefert; SFace übernimmt dabei die Umwandlung eines Gesichts in ein Embedding aus 2048 Zahlen
- RLDrives
person_profiles/objects.db nutzt für vec0 eine Kosinus-Suche über float[2048], und der Pfad für kein Treffer speichert zugeschnittene Gesichter als .jpg sowie .emb-Fingerprints unter NameTagsPending/
- Bei einem nicht registrierten Standardkonto waren weder die Karte
"Connections" noch der Zielprofilbildschirm sichtbar, und es wurde auch kein Push von Meta-Namespace-Daten für Gesichter beobachtet; ob und wann das ausgerollt wird, bleibt die zentrale offene Frage
Umfang und Grenzen
- Die untersuchte App ist der Android-Build
com.facebook.stella v273.0.0.21 der Companion-App Stella für Meta Smart Glasses
- In der App sind drei Gesichtsmodelle, ein lokales DB-Schema, ein zur Modellausgabe passender Vektorindex auf Kosinus-Ähnlichkeit, ein Schreibpfad zur Ablage biometrischer Datensätze auf dem Datenträger, eine Benachrichtigungsoberfläche sowie ein
"Connections"-Widget für Nutzer vorhanden
- Beim direkten Aufruf vorhandener Handler mit Testfotos lief die Pipeline vollständig durch, erkannte Gesichter, erzeugte ein 2048-dimensionales Embedding und suchte anschließend im lokalen Index
- Bei einem nicht registrierten Standardkonto erschien die Nutzeroberfläche nicht, der per Benachrichtigungs-Deep-Link geöffnete Bildschirm war im Build v273 ebenfalls nicht vorhanden, und ein Ablauf, bei dem Meta Identitätsdaten in die betreffende DB serverseitig pusht, wurde beim Testkonto ebenfalls nicht beobachtet
- Entscheidend ist derzeit die Unterscheidung, dass dies kein Beleg dafür ist, Meta identifiziere heimlich bereits heute Personen bei normalen Nutzern, sondern dass eine dafür vollständige Vorrichtung auf dem Gerät zusammengesetzt ist und von Meta per Gate zurückgehalten wird
Modell-Stack
| Asset-Name |
Datei |
Größe |
Rolle |
android_facerec_scrfd |
SCRFD.pte |
3.4 MB |
Erkennung von Gesichtern im Bild |
android_facerec_kps_aligner |
KPSAligner.pte |
117 KB |
Zuschneiden und Ausrichten erkannter Gesichter |
android_facerec_sface |
SFace.pte |
96 MB |
Umwandlung eines Gesichts in ein Embedding aus 2048 Zahlen |
- Die drei Modelle sind ExecuTorch-
.pte-Assets, die von Meta über das Asset-Auslieferungssystem NMLML heruntergeladen werden
SCRFD entspricht SCRFD aus InsightFace, SFace dem SFace von Zhong et al. 2021, und KPSAligner gehört zu einer Modellfamilie für schlüsselpunktbasierte Ausrichtung
- Metas SFace-Variante wirkt mit 96 MB und 2048-dimensionalem Output größer als die öffentliche Referenz mit rund 40 MB und 128–512 Dimensionen
- Allein die Tatsache, dass Modelle zur Gesichtserkennung und Embedding-Erzeugung vorhanden sind, ist noch kein Beweis für eine Erkennungsfunktion; Gesichtserkennung auf dem Gerät kann auch für Framing oder Autofokus genutzt werden
Lokaler Gesichtsindex und DB-Struktur
- Die Ausführungspipeline liest folgende SQLite-DB:
/data/user/0/com.facebook.stella/files/rldrive/person_profiles/objects.db
- Diese DB liegt unter
person_profiles im Meta-Framework für geräteübergreifende Synchronisierung RLDrive und ist als Kanal ausgelegt, der aus der Ferne befüllt werden kann
- Im Testkonto wurde keine Übertragung beobachtet, bei der Meta Daten direkt nach
person_profiles pusht; beobachtet wurde also die Existenz des Kanals
- Das zentrale Schema trennt Personeninformationen, Gesichtsinformationen und eine Vektorsuchtabelle für 2048-dimensionale Vektoren
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);
- Zeilen in
face verweisen über personUri auf person, und face.mediaPath dient als Primärschlüssel für face_mediaPath_vec
- Die Erkennung sucht ein Embedding aus 2048 Zahlen per Kosinus-Ähnlichkeit und joint das Ergebnis mit
person.name, das dann im Benachrichtigungstext verwendet wird
vec0 ist die Open-Source-Erweiterung sqlite-vec, die SQLite in eine Engine für Vektorähnlichkeit verwandelt, und die Dimension float[2048] passt exakt zur Ausgabeform des in der App enthaltenen SFace-Embedders
- Das Schema erlaubt mehrere
face-Zeilen pro personUri, aber ob eine reale Auslieferung 1:1 oder 1:N nutzt, ist auf einem nicht registrierten Gerät nicht ersichtlich
Ausführungszweige und gespeicherte Dateien
- In Tests mit zwei Durchläufen der gesamten Pipeline trennten sich ein Zweig kein Treffer bei leerem Index und ein Zweig Treffer, nachdem vorab ein einzelnes Embedding eingefügt worden war
- Der Zweig ohne Treffer schreibt Paare
(uuid.jpg, uuid.emb) nach NameTagsPending/ und sendet keine Benachrichtigung
- Der Treffer-Zweig zeigt eine Android-Benachrichtigung über den produktiven Kanal
nametags_recognition an; Titel war "Person recognized", Text "Recognized Michel Foucault", und unter NameTagsPending/ wurde nichts ergänzt
- Nicht erkannte Gesichter werden unter folgendem Pfad gespeichert:
/data/user/0/com.facebook.stella/files/NameTagsPending/
- Für jedes nicht erkannte Gesicht wird ein neues Paar
.jpg und .emb mit UUID-Namen angelegt; das .jpg ist das von SCRFD und KPSAligner erzeugte zugeschnittene und ausgerichtete Gesicht, das .emb der SFace-Fingerprint aus 2048 Zahlen
- Der Verzeichnismodus ist
0700, bleibt auch nach einem Neustart erhalten, und Schreibzugriffe erfolgen nur im Zweig ohne Treffer
- Verifizierte
.emb-Dateien haben eine Größe von 8.192 Byte, die Struktur 2048 × float32 big-endian, L2-Norm 0.999999, Min/Max −0.092110 / +0.098950 und Mittelwert +0.000292
- Die Paare
(uuid.jpg, uuid.emb) sind vollständige biometrische Datensätze in genau der Form und Kodierung, für die der Kosinus-Index in person_profiles/objects.db zum Abgleich ausgelegt ist
Benachrichtigungen und Nutzer-UI
- Stella definiert einen Android-Benachrichtigungskanal namens
nametags_recognition; sein Name ist "NameTags recognition", die Beschreibung "Notifications for recognized NameTags connections", und die Priorität ist IMPORTANCE_HIGH mit Heads-up, Ton und Badge
- Das Benachrichtigungstemplate ist im Erkennungs-Handler fest verdrahtet; der Titel lautet immer
"Person recognized", der Text immer "Recognized " + name, wobei name aus der Tabelle person in person_profiles/objects.db stammt
- Die Benachrichtigung ist antippbar und soll über einen von Meta erzeugten Deep-Link der Form
fb-viewapp://name_tags?face_id=<face_id> den Personenprofil-Bildschirm innerhalb von Stella öffnen
- In v273 lässt sich dieser Zielbildschirm nicht finden, auch nicht im Navigation Graph; ein Tippen auf die Benachrichtigung führt daher zum Standard-Tab von Stella
- Im APK gibt es unter dem Abschnitt
"Connections" eine Karte mit den fest verdrahteten Strings "See your connections" und "Remember the people you met and make new connections."
- Bei einem nicht registrierten Standardkonto erschien diese Karte nicht im Glasses-Tab und wurde auch während der Tests nicht sichtbar
Zusammenfassung
- In Stella v273 existiert ein vollständiger Stack für On-Device-Gesichtserkennung, der von Erkennung, Ausrichtung und Embedding bis zu Vektorindex, Speicher, Schreibpfad und Benachrichtigungsoberfläche reicht
- Die vollständig ausgeführte Pipeline kennzeichnet bekannte Gesichter namentlich per Benachrichtigung und legt für unbekannte Gesichter Zuschnitte und Fingerprints auf dem Datenträger ab
- Da Indexdimension, Embedding-Form und Speicherschema zueinander passen, handelt es sich nicht um verstreuten toten Code, sondern um ein konsistentes System
- Die nutzerseitige Karte
"Connections" und der Ziel-Profilbildschirm der Benachrichtigung fehlen im Build oder sind tiefer verborgen
- Die von der Live-Pipeline verwendete DB liegt in einem Synchronisations-Namespace neben anderen Namespaces, die Meta serverseitig befüllt, aber ein Push des Gesichts-Namespace wurde im Testkonto nicht beobachtet
- Unbestätigt bleibt, ob Meta Nutzer derzeit tatsächlich bei unbekannten Personen unterstützt, ob Registrierungsdaten fließen und ob diese Funktion in Produktion aktiviert ist
- Eine Vorrichtung, die bis hin zu 2048-dimensionalen Gesichts-Fingerprints und der fest verdrahteten Benachrichtigung
"Person recognized" aufgebaut, ausgeliefert und verdrahtet wurde, ist eine technische Investition; ob und wann sie tatsächlich produktiv eingesetzt wird, bleibt eine Frage, die Meta beantworten muss
1 Kommentare
Hacker-News-Kommentare
Ich wünschte, so eine Funktion gäbe es komplett offline. Ich habe Prosopagnosie, und wenn ich Fotos von Freunden in eine Offline-Datenbank laden und sie erkennen lassen könnte, wäre das wirklich nützlich
Barrierefreiheit sollte nicht den Verzicht auf Privatsphäre verlangen
Neulich habe ich die beste Analogie zur Erklärung von Prosopagnosie gehört: Äpfel. Wenn man zwei Äpfel nebeneinander legt, sieht man die Unterschiede, aber einen bestimmten Apfel unter 50 ähnlichen Äpfeln wiederzuerkennen, ist ein völlig anderes Problem
Es ist, als würde dich auf der Straße ein Apfel ansprechen und du solltest dich erinnern, wo du ihn schon einmal gesehen hast. Es gibt Workarounds, aber sie hängen stark vom Kontext ab und sind fehleranfällig. Ein Apfel mit roten Haaren und Bart ist vielleicht der Kollege aus dem Büro nebenan, aber ob es derselbe Apfel ist, der gestern in der Innenstadt gewunken hat, ist unklar
Veränderungen der Frisur sind ein besonders großes Problem. Einmal habe ich mich beim Mittagessen gefragt, wer der neue Kollege ist, bis ich die Stimme hörte und ihn daran erkannt habe — es war jemand, mit dem ich seit 10 Jahren arbeite und der nur die Haarfarbe geändert hatte
Als Google Glass 2012 zum ersten Mal herauskam, betrieb ich ein Tech-Startup für Konferenzen, und wir hatten eine Datenbank mit Profilfotos von Vortragenden und Teilnehmenden, also kam mir ganz selbstverständlich die Idee für eine App, die „mit der Brille die Person findet, die man in einem vollen Raum treffen will“
Aber die Google-Glass-Entwicklerbedingungen haben das strikt verboten, und schon nach kurzem Nachdenken war sofort klar, warum
Ich würde gern das genaue Gegenteil davon tragen. Man bräuchte ein Gerät, das mich warnt, wenn jemand in der Nähe die Facebook-AI-Brille trägt, damit ich ausweichen kann
Ich habe meiner Familie bereits ausdrücklich gesagt, keine Fotos der Kinder auf Meta-Plattformen zu teilen. Wenn so ein Gerät der unbekannten Öffentlichkeit aufgezwungen wird, werden manche Menschen wohl gewaltsam reagieren
Das ist etwas völlig anderes als die allgemein akzeptierten CCTV-Anlagen oder das manuelle Aufnehmen mit Kamera oder Smartphone
Meta ist für mich das Paradebeispiel für Eingriffe in die Privatsphäre in der Technikgeschichte. Diese Smart Glasses haben die Grenze weit überschritten, indem Menschen in ihren eigenen Wohnungen, teilweise nackt, ohne Einwilligung aufgenommen wurden
Das wurde hier schon vor etwa einem Monat diskutiert: Meta in row after workers who saw smart glasses users having sex lose jobs (https://news.ycombinator.com/item?id=47961838)
Sie scheinen fest entschlossen zu sein, Anwälte in Chicago reich zu machen. [0]
[0]: https://en.wikipedia.org/wiki/Biometric_Information_Privacy_Act
Laut dem verlinkten Inhalt verlangt BIPA von Unternehmen, die in Illinois tätig sind, die Anforderungen für die Erhebung und Speicherung biometrischer Daten einzuhalten, die Zustimmung einzuholen, bevor biometrische Identifikatoren einer Person erhoben oder offengelegt werden, sie rechtzeitig zu löschen und sicher zu speichern. Für den Umgang mit biometrischen Daten gilt außerdem ein „reasonable standard of care“
Startup-Idee: Nahinfrarot-LEDs an Steg und Bügeln eines normalen Brillengestells anbringen und sie effizient und hell betreiben, aber mit PWM auf einem unregelmäßigen Takt von etwa 10 Hz
Wer ein Foto von mir machen will, kann fragen oder Film benutzen
Mir fällt kein einziger praktischer Anwendungsfall ein, der mein Leben verbessern würde. Denn direkt hinter der Brille wäre bereits eine eingebaute lokale Gesichtserkennung
An ein paar Namen erinnere ich mich, und letztlich halte ich die Fähigkeit, sich Namen gut zu merken, nicht für besonders bedeutsam. Die Namen von Menschen, die ich wirklich mag, merke ich mir.
Umgekehrt kann man sich auch fragen, ob es jemanden wirklich stört, wenn ich seinen Namen vergesse. Als Kind hatte ich bei den Pfadfindern ein Jahr lang einen Freund, mit dem ich ständig zusammen war, aber ich kann mich nicht an seinen Namen erinnern, und es war trotzdem kein Problem
Ich war fast zehn Jahre lang Teil einer großen Gruppe und konnte mir trotzdem kaum merken, wer wer ist; erst während der Pandemie, als in Zoom die Namen angezeigt wurden, habe ich sie mir nach und nach über einige Wochen eingeprägt.
Wenn ich Tauchen unterrichte, lerne ich auf der Fahrt zum Shop die Namensliste der Teilnehmer in möglichst zufälliger Reihenfolge auswendig, um die kognitive Last zu verringern, Gesichter und Namen zu verknüpfen. Beim Aufrufen der Anwesenheit schreibe ich alle Namen auf und versuche dann schrittweise, Fragen ohne Spickzettel zu stellen.
Aber sobald die Ausrüstung angelegt ist, vor allem in Gegenden, wo man eine Kopfhaube trägt, bricht das sofort zusammen. Zwei weiße Männer um die 35 bringe ich dann leicht durcheinander. Wenn es gesellschaftlich akzeptiert wäre, würde ich so etwas gern in einer Sehstärkenbrille nutzen, um diese Last zu verringern
Ich glaube nicht, dass Meta das aus Gründen der Barrierefreiheit macht
Natürlich ist das ein ziemlich unangenehmes Gespräch, daher fahre ich auch oft die Strategie, die Leute halbwegs einander vorzustellen und zu hoffen, dass sie sich dann vollständig selbst vorstellen, damit es mir in dem Moment wieder einfällt
Ich frage mich, wie folgender allgemeiner Grundsatz wäre: Computer dürfen automatisch beliebig viel tun, solange sie die Netzwerkgrenze nicht überschreiten, aber jeder Zugriff aufs Netzwerk muss immer durch eine ausdrückliche Handlung eines Menschen ausgelöst werden.
Ähnlich wie im Browser das Erfassen der Maus oder der Wechsel in den Vollbildmodus eine vertrauenswürdige Nutzeraktion erfordert, nur allgemeiner angewandt. Auch der Umfang der Netzwerkkommunikation sollte klar sein, damit der Nutzer ihn nicht missverstehen kann.
Wenn etwas so komplex ist, dass man es dem betroffenen Nutzer nicht erklären kann, sollte man es nicht stellvertretend für ihn tun. Das gilt vor allem für Massenprodukte für Verbraucher, nicht für interne Bereitstellungen.
Ohne solche harten Grenzen steuern wir wohl auf ein Panoptikum zu. Selbst ohne aktives Vorantreiben durch den Staat führen schon die schlichten Profitanreize des digitalen Zeitalters zu so einem Ergebnis. Feinere Regeln wären theoretisch vielleicht besser, aber bei starken Anreizen halten Menschen komplexe Regeln meist nicht gut ein
Ich bin in einer Position, in der ich Sicherheitsrichtlinien am Arbeitsplatz festlegen kann, und eine davon ist ein Verbot von Smart Glasses im Büro. Ich kann nicht zulassen, dass Mitarbeiter mit einer Facebook-Brille auf Bildschirme mit vertraulichen Informationen zielen.
Mir fallen auch kaum Situationen ein, in denen ich den Einsatz von Gesichtserkennung erlauben würde. Im Restaurant muss Facebook nicht wissen, wo ich esse, und in einem Musikclub nicht, was ich höre. An Orten wie öffentlichen Toiletten geht es auf keinen Fall. Auch auf öffentlichen Gehwegen möchte ich nicht verfolgt werden, mit wem ich spreche.
Ich kann mir kaum vorstellen, irgendeinen Einsatzfall davon auch nur ansatzweise zu akzeptieren. Ehrlich gesagt hoffe ich nicht nur auf öffentliche Beschämung von Leuten, die solche öffentliche Spyware tragen, sondern darauf, dass schnell ein Klima entsteht, in dem man reale Angst davor hat, damit draußen erwischt zu werden.
Auf den naheliegenden Einwand „Verbietest du am Arbeitsplatz auch Handykameras?“ ist die Antwort: ja. Natürlich würde ich es auch verbieten, wenn jemand den ganzen Tag die Handykamera auf Bildschirme hält und die Arbeit mitschneidet. Wir teilen vertrauliche Informationen nur mit geprüften und vertraglich gebundenen Anbietern, und wenn ich jemanden beim Filmen sehen würde, würde ich die Person zu mir rufen und erklären, dass das eine sehr riskante Situation ist
Ich will nicht, dass BigTech oder der Staat all meine Interaktionen nachverfolgen, aber es ist für mich in Ordnung, wenn die Dashcam im Auto des Nachbarn lokal speichert, dass ich an seiner Einfahrt vorbeigegangen bin, solange das nicht an Dritte hochgeladen wird.
Natürlich wollen die meisten kein Self-Hosting, und die meisten Dienste sind auch nicht Ende-zu-Ende-verschlüsselt, daher lässt sich das derzeit praktisch kaum als besonders wichtig verkaufen. Für Regulierung und für die Frage, in welcher Welt wir leben wollen, ist diese Unterscheidung aber trotzdem relevant
Da steckt eine Art Logik wie beim Second Amendment drin, und die ist ziemlich schwer zu widerlegen. Zumindest tötet das hier niemanden. Ich möchte, dass jeder Polizist jederzeit von fünf oder sechs Aufnahmegeräten umgeben ist, die er nicht kontrollieren kann. Das ist die weniger schlechte Option.
Natürlich gefällt mir nicht, dass alles zu Facebook geht, und ich hoffe, dass wir diese Phase hinter uns lassen
Was wäre, wenn Meta, Flock und Palantir ihre Kräfte bündeln? Das könnte eine Kombination des Bösen ergeben wie bei Musks Bündelaktien