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>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f289d02c37
commit
3da673662f
@@ -0,0 +1,48 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user