Nexa Safe
Continuous PPE compliance monitoring on existing site cameras
The problem
PPE compliance on a construction or industrial site is checked by a supervisor walking rounds. That makes it sampled rather than continuous, and contested after the fact because nobody has a record.
The first hard evidence anyone produces usually arrives during an incident investigation, which is the worst possible moment to discover you do not have it.
What we built
A compliance console running on the same camera feeds as the rest of the platform. For every person in frame it reports which required items are present and which are missing across helmet, vest, mask, gloves, goggles and boots, with the required set configurable per site, because a warehouse and a welding bay do not have the same rules.
The detector is deliberately model-agnostic. It auto-maps any YOLOv8 PPE model's class names onto canonical categories and resolves both labelling conventions in use, positive such as hardhat and negative such as no-hardhat, so a customer can bring their own trained weights without a code change.
How it is built
Vision
- Ultralytics YOLOv8
- PyTorch with CUDA acceleration
Application
- FastAPI
- PostgreSQL
- Next.js
Shared platform
- OpenCV capture layer
- WebSocket streaming
Built inside the same January to July 2026 window by the same three to four engineer team, reusing the capture, authentication and streaming layers already built for Nexa Sight.
Engineering decisions that mattered
Containment ratio instead of intersection-over-union
PPE items are matched to a person by containment ratio rather than the usual IoU. A helmet is tiny next to a body, so IoU scores near zero on a perfectly correct match, and the standard metric would have reported a compliant worker as a violation.
Compliance sampled, not evaluated every frame
Detection runs at 4 frames per second per camera. A missing helmet is a state that persists for minutes rather than an event you can miss, so sampling costs nothing in detection quality and keeps GPU load flat as cameras are added.
One camera decode shared across all three consoles
Consumer reference counting means running Sight, Safe and Count on the same camera costs one video decode rather than three, and switching one console off never kills a stream the other two are still using.
Violation logging throttled to stay readable
One record per camera per ten seconds, so a worker standing in frame produces a log a supervisor can actually read instead of thousands of duplicate rows.
How it is sold
Our own product, sold to construction, manufacturing, logistics and industrial operators as a standalone console or bundled with the suite.
Common questions
- Can we use our own PPE detection model?
- Yes. The detector maps a model's class names onto canonical PPE categories automatically and handles both labelling conventions, positive such as hardhat and negative such as no-hardhat, so bringing your own trained weights needs no code change.
- Can required PPE differ by area of the site?
- Yes. The required item set is configured per site and per camera, because a warehouse aisle and a welding bay have different rules and a single global policy produces either false violations or missed ones.
- Will it flood us with alerts?
- No. Violation logging is throttled to one record per camera per ten seconds. Without that, a worker standing in frame for two minutes generates thousands of near-identical rows and the log becomes unusable, which is how most detection systems end up ignored.
Guides on Nexa Safe
What to work out before you buy one.