Skip to content

[Privacy/Ethics] README documents "Face-blur mode by default" as a GDPR mitigation feature, but no face-blurring implementation exists anywhere in the pipeline #176

Description

@prince-pokharna

Summary

Eagle's Known Challenges section states:

"Face-blur mode by default; GDPR note in docs"

This is documented as an existing, default privacy feature — not a planned one. However, examining the pipeline:

  1. Detection model: yolov8n.onnx is YOLOv8 Nano, a general object detection model trained on COCO classes (person, car, bottle, etc.). It does not detect or localize faces — it detects full body bounding boxes.
  2. No face detection service: The services/ directory contains detection/, tracking/, reasoning/, and memory/ — there is no face_detection/ or anonymization/ module.
  3. No blur utilities: libs/utils/ contains frame processing helpers, but no face-blurring or anonymization utilities are documented or implemented.

Why this matters critically:

Eagle is a real-time surveillance system being contributed to by 36 forks. Users deploying Eagle in production environments may believe face-blurring is active by default (per the README), when it is not. In EU jurisdictions, deploying a surveillance system without proper face anonymization under the mistaken belief that it's enabled constitutes a GDPR violation — with fines up to 4% of annual revenue or €20 million.

Proposed Fix

Immediate (documentation fix):
Change the README to accurately reflect the current state:
| Privacy Concerns | Face-blur mode is planned (not yet implemented). Currently, Eagle captures and displays video with full person visibility. Deploy only in environments where surveillance is legally authorized. |

Full implementation:

  1. Add services/anonymization/face_blur.py using OpenCV or insightface:
import cv2
def blur_faces(frame: np.ndarray, face_boxes: list) -> np.ndarray:
    for (x, y, w, h) in face_boxes:
        roi = frame[y:y+h, x:x+w]
        frame[y:y+h, x:x+w] = cv2.GaussianBlur(roi, (99, 99), 30)
    return frame
  1. Integrate a face detection step (using YOLOv8-face or insightface) into the detection pipeline before frames are passed to VLM captioning
  2. Add EAGLE_FACE_BLUR=true environment variable to enable/disable (default: true)

Acceptance Criteria

  • README accurately reflects that face-blur is planned/not yet implemented
  • services/anonymization/face_blur.py implemented with face detection + Gaussian blur
  • Face-blur applied by default in the detection pipeline before VLM captioning
  • EAGLE_FACE_BLUR environment variable documented in .env.example

Labels: privacy, security, feature, priority: high

Metadata

Metadata

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions