perf(privacy): memoiseer de gezichtsscan per afbeelding #911
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
release-blocker
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!911
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/beeldscan-memo"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wat & waarom
Typen in een titel — en in elk ander tekstveld — werd op een deck vol beeld, zoals de proefpresentatie, onwerkbaar traag. Oorzaak:
imagePrivacyRawIssuesProviderhangt aan het hele deck en draaide dus bij élke toetsaanslag opnieuw. Zonder memoisatie herlas en her-detecteerde hij dán álle deck-afbeeldingen, encountFaces(decode + YuNet op drie schalen) is een synchrone OpenCV-aanroep op de UI-thread. Elke toets startte een verse volledige scan; die stapelden op.De tekst-privacyscan (
memoizedDeckScan) en de kwaliteitsanalyse waren hier al tegen gehard met per-dia-memoisatie; alleen de gezichtsscan miste dat — terwijl het bestand zelf schrijft dat deze scan "niet in het pad hoort dat bij elke toetsaanslag draait".Fix
Memoiseer de gezichtsscan per afbeelding op pad + mtime + grootte — dezelfde sleutel die
averageImageColoral voor de contrastscan gebruikt. Een titel typen raakt geen afbeelding, dus alle scans zijn cache-treffers en de UI blijft vrij. Een gewijzigd bestand mist de sleutel en wordt opnieuw gescand: geen verouderde privacyuitslag. Valt er geen echt bestand te statten (relatief pad, web, test met neppeImageService), dan scant hij ongecachet verder — gedrag identiek aan vóór de memo.De scanner zit bewust níét in de sleutel: de detector is een vast ONNX-model met een const drempel, dus het getelde aantal hangt uitsluitend van de beeldpunten af.
Test
test/image_face_scan_memo_test.dartbewaakt beide kanten:Poorten
make check: groen (hele testsuite, dekkingsvloer én per-bestand-vloer).make check-secrets(gitleaks + trufflehog, werkboom + historie): schoon.make sast(semgrep, 3 Dart-regels): 0 findings.Bewaker
Overgeslagen, expliciet: raakt geen bestandsformaat, opslag, afhankelijkheid, uitgaand verkeer of publieke belofte. Puur interne caching; het detectiegedrag is ongewijzigd, en de regressietest borgt dat.
🤖 Generated with Claude Code