Add opt-in face recognition to hermes_vision

SFace embeddings on top of YuNet's landmarks. Nothing is stored until someone is
enrolled with `python -m hermes_vision.people enroll NAME`; only 128-number
embeddings are kept, never images, in a 0600 JSON file under a 0700 directory,
written atomically. `list` and `forget` manage it. The detector node puts a
recognised name in Detection2D.id (empty if unknown) and picks up database
changes without a restart.

Checked with a throwaway database on the burst frames: eight of nine unenrolled
frames were recognised, down to side profiles (similarity 0.52-0.66), the miss
being a head tipped back at 0.34 against the 0.363 threshold, and an unrelated
photo scored 0.16 and stayed unknown.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AFN8nRRCiDiMN7ChBpHJhs
This commit is contained in:
2026-10-04 23:13:49 -07:00
co-authored by Claude Sonnet 5.5
parent f8525c5526
commit cf711060d0
6 changed files with 293 additions and 2 deletions
+1
View File
@@ -20,6 +20,7 @@ setup(
'console_scripts': [
'face_detector = hermes_vision.face_detector_node:main',
'detect_faces = hermes_vision.detect_cli:main',
'people = hermes_vision.people:main',
],
},
)