Files
onyx/docs/spikes/G-gesichtsmerkmal.md
T
ScarriffleandClaude Opus 5 3da673662f Zwischenablage, Notizen und der Gesichtsvergleich
Drei neue Module nach dem Bauplan von `ShelfProvider`: reine Regeln getrennt vom
Zustand, versionierte Indexdatei, Inhalte in Dateien statt in `UserDefaults` —
was dort steht, liest jedes Programm mit `defaults read` mit.

Die Zwischenablage achtet `ConcealedType`, `TransientType` und
`AutoGeneratedType`. Diese Marken sind eine Verabredung zwischen Programmen und
kein Systemdienst; wer sie missachtet, sammelt fremde Passwörter ein.

Der Gesichtsvergleich stand im Plan als der eine echte Unsicherheitsfaktor. Ein
Spike hat ihn erledigt: `VNGenerateFaceprintRequest` gibt es nicht, aber
`VNGenerateImageFeaturePrintRequest` ist öffentlich, liefert 768 Elemente und
ein Abstandsmaß — Faktor 3,5 Trennschärfe. Kein eigenes CoreML-Modell nötig.

`FaceMatcher` entscheidet über mehrere Posen, mehrere Einzelbilder und eine
Sperre nach Fehlversuchen. Die Schwelle liegt bewusst nicht mittig: ein falsches
Ja ist ein Fremder am entsperrten Rechner, ein falsches Nein nur ein Passwort,
das man ohnehin kennt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-05 21:06:06 +02:00

2.0 KiB

Spike G — Gesichtswiedererkennung

Im Plan heißt dieser Spike „F". Der Buchstabe war in docs/spikes/ schon an die Frequenzmessung vergeben; hier läuft die vorhandene Reihe weiter.

Frage. Vision liefert öffentlich Rechtecke und Landmarken, aber sagt damit nur, wo ein Gesicht ist — nicht wessen. Für einen Vergleich braucht es einen Vektor mit Abstandsmaß. Gibt es den, oder braucht es ein eigenes CoreML-Modell?

Gemessen am 05.09.2026, Spikes/faceprint-probe.swift.

Ergebnis

Weg Befund
VNGenerateFaceprintRequest existiert nicht — auch nicht über NSClassFromString erreichbar
VNFaceprintObservation existiert nicht
VNGenerateImageFeaturePrintRequest öffentlich und benutzbar

Der öffentliche Merkmalsvektor hat 768 Elemente und bringt computeDistance mit. An zwei synthetischen Mustern:

  • ähnliche Bilder: Abstand 0,134
  • deutlich verschiedene: Abstand 0,473

Also Faktor 3,5 Trennschärfe. Ein eigenes CoreML-Modell ist nicht nötig.

Was das für die Bauform heißt

  1. VNDetectFaceLandmarksRequest findet das Gesicht und seine Landmarken.
  2. Daraus wird ausgerichtet und zugeschnitten — ohne Ausrichtung misst man die Kopfhaltung mit, nicht die Person.
  3. VNGenerateImageFeaturePrintRequest auf dem Ausschnitt gibt den Vektor.
  4. Verglichen wird über computeDistance gegen die hinterlegten Vektoren.

Die Einschränkung, die bleibt

Ein allgemeiner Bildmerkmalsvektor ist kein Gesichtsmerkmal. Er reagiert auf Beleuchtung, Kopfhaltung und Hintergrund mit, nicht nur auf die Person. Deshalb:

  • mehrere Posen beim Anlernen, nicht eine,
  • Bestätigung über mehrere Einzelbilder, nicht eines,
  • eine Schwelle, die lieber ablehnt als falsch zulässt,
  • Sperre nach mehreren Fehlversuchen, Rückfall aufs Passwort.

Und die Aussage aus dem Plan bleibt in voller Schärfe: das ist Bequemlichkeit, keine Sicherheitsgrenze. Ein Foto vor die Kamera zu halten genügt — Face ID hat dafür einen Tiefensensor, die Mac-Webcam hat keinen.