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>
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
VNDetectFaceLandmarksRequestfindet das Gesicht und seine Landmarken.- Daraus wird ausgerichtet und zugeschnitten — ohne Ausrichtung misst man die Kopfhaltung mit, nicht die Person.
VNGenerateImageFeaturePrintRequestauf dem Ausschnitt gibt den Vektor.- Verglichen wird über
computeDistancegegen 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.