NVR & Camera Setup
The NVR client is the on-premises component. It connects to your cameras, runs continuous local face detection and matching, and reports matches to the platform.
What it runs
- Python NVR client using Facial Recognition Model for local detection and embedding.
- Media Server for RTSP stream handling from your cameras.
- A local face cache so matching doesn't round-trip to the cloud.
1. Connect cameras
Point the client at your cameras over RTSP. Most IP cameras expose a URL like rtsp://user:pass@camera-ip:554/stream. Media Server ingests these streams; the client reads frames from them.
Use the highest-quality substream that still keeps frame rate stable — face detection benefits from resolution, but you don't need the full main stream.
2. Register the device
In the dashboard, add an NVR device under your site. The client authenticates to the platform with the device credentials and begins reporting. Devices and detections are scoped to the site you register them under.
3. Detection vs. cloud search
- Continuous detection runs entirely on the NVR — local Facial Recognition Model, no cloud calls, no per-detection cost.
- Manual search from the mobile app uses cloud face search (AWS Rekognition) for one-off lookups, which counts against your monthly search quota.
Matching thresholds
Matching uses cosine similarity. Three thresholds are available:
| Threshold | Value | Use |
|---|---|---|
| Permissive | 0.35 | Cast a wide net; more false positives |
| Default | 0.45 | Balanced |
| Strict | 0.55 | High confidence; fewer matches |
Tune per site based on camera quality and how you act on alerts. Treat every match as probabilistic — see Compliance on human review.
Keeping the client current
NVR clients talk to a versioned API (/api/v1/) so existing hardware keeps working across platform updates. Keep the client reasonably up to date when new versions are published.
Note on cache desync. If the platform database is reset, the NVR's local face cache can hold stale profile IDs, which surfaces as a
404onPOST /api/nvr/detect/match/. The fix is to delete the local cache file and restart the client — not to purge the device. See Troubleshooting.