Skip to content

Commit df80e5e

Browse files
committed
document the polling path, the measurement scripts and the new options
poll_interval was released without a word in the README - the one feature other users with a camera-side detection would most want to find. Also adds the two analysis scripts and fills the gaps in the config references.
1 parent 999e261 commit df80e5e

2 files changed

Lines changed: 46 additions & 0 deletions

File tree

README.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,29 @@ manual run, not something the live pipeline does.
231231
than `record.retain` yield nothing and only cost time — a 28-day run against a 10-day
232232
retention spends most of its hour on events it cannot help.
233233

234+
## Events MQTT never announces
235+
236+
FaceID listens on `frigate/events`. Events **created through Frigate's API** are not
237+
tracked objects, so they never appear there — FaceID simply never learns about them.
238+
239+
This matters if you use a camera's own person detection as a reliability bridge: an
240+
automation sees the camera report a person and creates a Frigate event for it. Those
241+
events carry a snapshot and usually a clip, but stay invisible to FaceID.
242+
243+
Set `poll_interval` (seconds, e.g. `30`) to also poll Frigate's event API:
244+
245+
```yaml
246+
faceid:
247+
poll_interval: 30
248+
```
249+
250+
On one installation that added ~22 events a day at the front door, of which 12 in 20
251+
held a usable face — roughly doubling what FaceID could learn from. Polled events run
252+
through the same pipeline; they carry no bounding box, so their snapshot is the full
253+
frame rather than a person crop. Off by default, since it costs one API request per
254+
interval.
255+
256+
234257
## Calibrating the threshold
235258
236259
The defaults are deliberately cautious, and on a real gallery that caution turned out to
@@ -260,6 +283,25 @@ without a single misassignment.
260283
Do not copy these numbers. Run the scripts on your own gallery: how far strangers get is
261284
the number that decides how low you can safely go.
262285

286+
## Measuring instead of guessing
287+
288+
Two scripts answer the questions that otherwise invite guesswork:
289+
290+
```bash
291+
python scripts/coverage.py # what is each person missing?
292+
python scripts/measure-recognition.py --baseline /tmp/old --days 3
293+
```
294+
295+
`coverage.py` reports, per person: photo count, diversity, viewing angles from the
296+
landmarks, which cameras she was enrolled from, greyscale/IR shots, and a leave-one-out
297+
self test — then names the concrete gap.
298+
299+
`measure-recognition.py` compares the current gallery against an older one (unpack a
300+
backup from `data/backups`) and adds a practical probe against recent Frigate events,
301+
including how much headroom each recognition has above the threshold. Events whose face
302+
is already in the gallery are excluded — they score ~1.0 and measure nothing.
303+
304+
263305
## How training stays healthy
264306

265307
Recognition is only as good as the reference photos, so FaceID keeps galleries diverse
@@ -355,6 +397,8 @@ that matter most:
355397
| `max_faces_per_person` (40) | soft cap; adding more drops the most redundant reference (0 = unlimited) |
356398
| `ignore_threshold` (= match_threshold) | similarity at which a face counts as ignored |
357399
| `ignore_learning` (true) | learn new looks of ignored people as additional anchors (guarded) |
400+
| `hires_enroll` (true) | fetch new review-queue faces from the recording (sharper references) |
401+
| `poll_interval` (0) | seconds; >0 also polls Frigate's event API for events MQTT never announces |
358402

359403
## License
360404

faceid-addon/DOCS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ Full documentation: https://github.com/SkyTechNerds/faceid
3636
| `trimmed_keep` | how many set-aside photos to keep per person (0 = delete immediately) |
3737
| `dedupe_threshold` | default sensitivity for the Settings "Remove duplicates" action |
3838
| `hires_enroll` | fetch new review-queue faces from the recording instead of the detect snapshot (sharper references) |
39+
| `poll_interval` | seconds; >0 also polls Frigate's event API for events MQTT never announces (e.g. events created by an automation from a camera's own detection). 0 = off |
40+
| `match_top_k` | a match score is the mean of this many best-fitting reference photos. Higher resists a single lucky photo; lower helps people whose references cover many angles |
3941
| `backup_enabled` / `backup_hour` / `backup_keep` | optional built-in daily gallery backup |
4042

4143
Thresholds and backup can also be changed live on the app's **Settings** tab; those

0 commit comments

Comments
 (0)