Custom zones
Review: click a detection to exclude or restore it (photos, browser mode). Draw zone: drag on the picture to mask a fixed area such as a window, a screen or a photo frame; zones are sent to the server too.
Method
Heads: YOLO26-pose finds every person; the head centre is the mean of the nose, eye and ear keypoints (confidence ≥ 0.30). "Fitted" sizes the mask from the ear, eye and shoulder spacing; "OwlGuard 14%" uses the original square with a radius of 14% of the body length (min 18 px at 640). Both fall back to the top 22% of the body box when no facial keypoint is visible. Ported from owlsense/modules.py · blur_heads().
A YOLO26n COCO detector runs alongside: a pose "person" counts only when it also sees a person there (this drops the giraffes and ornaments the pose model mistakes for people), and plates are searched only inside the vehicles it finds. Faces: YuNet (OpenCV zoo, MIT), boxes grown to the whole head; a face without a person around it must be very confident or crowd-sized. Plates: YOLOv9-t 512 (open-image-models, MIT). Video is decoded frame by frame with WebCodecs, every frame is detected and masked, then re-encoded with the original audio copied over. Nothing is uploaded; saved photos carry no EXIF.