Keep the camera on. Hide only what the room should not reveal.
I designed and built camera-privacy to blur marker-defined regions in a local camera feed. ArUco markers identify the area to hide; the system does not automatically recognise arbitrary sensitive objects. Synapse provides a separate control interface.
The problem
Video calls can accidentally expose sensitive objects: infrastructure racks, screens, whiteboards, credentials, prototypes, or private workspaces. Blurring the entire camera feed removes useful presence, while relying on manual framing is fragile.
Design & implementation
camera-privacy owns the camera-processing layer. It reads the webcam stream, detects ArUco markers placed around the area to hide, computes a stable rectangle or quadrilateral, and applies a live Gaussian blur to that region.
The control path stays explicit. A local FastAPI service exposes endpoints for status, enable, disable, mode changes, and timed overrides. Synapse can then map a request such as can you disable the privacy for 3 minutes to a bounded API call without taking over the video pipeline.
In the product flow, the processed camera layer is meant to sit between the raw webcam and videoconferencing tools such as Google Meet or Zoom, so the shared feed already contains the privacy protection.
What it does
- Live privacy filtering for explicitly marked regions during video calls
- ArUco marker detection for stable protected regions
- Rectangle and quadrilateral blur masks
- Tracking hold and jump rejection for camera movement
- FastAPI control API for enable, disable, modes, status, and timed overrides
- Synapse-compatible voice control for temporary privacy changes
Why I built it
camera-privacy makes selective blur part of the camera pipeline. It is a working prototype, not a guarantee against information disclosure: framing, marker visibility and the actual outgoing video still need to be checked before sharing.