Inspiration
Construction and manufacturing sites across India already have CCTV, but nobody watches it in real time. Missing helmets, people walking into danger zones and falls are among the most common causes of serious injuries, and a single safety officer cannot watch every camera for a whole shift. We wanted the cameras to watch themselves.
What it does
SafetyEye turns existing CCTV into an AI safety officer.
- PPE compliance - detects helmets and hi-vis vests (plus gloves, boots, goggles) and checks each worker: "W2 - NO HELMET"
- Restricted zones - draw a polygon on any camera; a worker's feet entering it raises an alert
- Fall detection - pose keypoints (shoulder-to-hip torso angle) flag a person lying down
- Multilingual alerts - English, Hindi and Marathi alert text and voice announcements, so the message reaches the workers on the floor
- Incident log - every event saved with a snapshot, de-duplicated, with a one-click acknowledge workflow and CSV export
- Live analytics - compliance score, violations by type, trend, and hotspot cameras
- Shift report - plain-language summary with recommended actions (e.g. helmet dispenser at the gate with the most no-helmet events)
- Check any photo or webcam directly from the dashboard
How we built it
- Model: YOLO11n fine-tuned on the Ultralytics Construction-PPE dataset (11 classes, 1,132 training images), trained entirely on a 2-core CPU in under an hour. On the held-out test split: helmet mAP50 0.91, vest 0.91, person 0.84.
- Falls: YOLO11n-pose keypoints + aspect-ratio fallback.
- Rule engine: assigns each PPE item to the worker box that contains it, merges pose and PPE detections, checks zones and site-required gear.
- Backend: FastAPI with one worker thread per camera, SQLite incident store, JPEG snapshots, WebSocket live feed, REST API.
- Frontend: dark control-room dashboard (vanilla JS + Chart.js) with language switcher and browser speech synthesis.
- Runs fully on-premise on CPU (~50 ms per frame) - no video leaves the site, which matters for privacy and for sites with poor connectivity.
Challenges
The dataset's "no_helmet" / "no_gloves" classes are rare and weak, so instead of trusting them we infer violations from the absence of a helmet or vest on a detected worker. Tiny background people were causing false alerts, so the engine ignores people too small to judge reliably. Duplicate alerts were solved with per-worker cooldowns. Some false "no vest" alerts remain on unusual jackets - more site-specific training data is the fix.
What we learned
Per-worker reasoning matters more than raw detection: supervisors need "who is missing what, where", not a cloud of boxes.
What's next (24-hour on-site round)
RTSP multi-camera ingestion with ByteTrack so one worker = one incident, WhatsApp/SMS escalation to supervisors, edge deployment on Jetson / Raspberry Pi via ONNX/OpenVINO, more Indian languages (Tamil, Telugu, Bengali), and heat-stress / fire-smoke detection.
Demo note: the three demo "cameras" replay held-out images from the dataset's test/val split; any RTSP stream or video file can be plugged in via config.
Log in or sign up for Devpost to join the conversation.