Nexa Count
Directional people counting you can actually trust
The problem
Retailers and venue operators buy footfall counters and then quietly stop trusting the number. The two classic failures are people loitering near a doorway being counted repeatedly, and someone walking parallel to the counting line tripping it without ever entering.
A footfall number nobody trusts is worse than no number, because it still ends up in a report.
What we built
A counting console where the operator draws virtual lines onto the live feed and gets directional in and out totals.
A crossing registers only on a true segment-intersection test between the person's movement vector and the line, so walking alongside a line, or past the end of it, is never counted. Direction comes from the sign of a cross product, which stays correct at any approach angle, and a given track cannot be counted twice on the same line in the same direction.
Tracks are anchored at the feet rather than the body centre, because the ground contact point is what actually crosses a doorway and it drifts far less when someone is half hidden behind a display or another shopper.
How it is built
Vision
- YOLOv8n person detection
- Purpose-built greedy nearest-centroid tracker
- CUDA acceleration
Application
- FastAPI
- PostgreSQL
- Next.js
- WebSocket streaming
The newest of the three consoles, added inside the same platform build window and reaching working state in July 2026, by the same team.
Engineering decisions that mattered
A purpose-built tracker rather than a borrowed one
Line counting needs a few seconds of frame-to-frame identity, not long-term re-identification, so a greedy nearest-centroid tracker does the job and removes a heavy dependency that would have brought nothing else with it.
Occlusion tolerance
Counting samples at 6 fps and holds a track through up to 12 missed samples, so a crossing still registers when someone is briefly hidden behind a display or another person.
Crossings are never rate-limited
Unlike PPE violations, crossings are never throttled. A dropped violation is a duplicate you did not need; a dropped crossing silently corrupts the day's total, which is the entire product.
The database is the source of truth
Live totals in memory are treated strictly as a cache. The events table is authoritative and totals re-seed from it whenever a camera comes back online, so a restart cannot lose a day's count.
How it is sold
Our own product, aimed at retail, shopping malls, venues and transport hubs.
Common questions
- Why do people counters usually produce numbers nobody trusts?
- Two failures dominate. Someone loitering near a doorway gets counted repeatedly, and someone walking parallel to the counting line trips it without entering. Both come from testing proximity to a line rather than testing whether the person's path genuinely crossed it, which is a different calculation.
- Does it count direction, or just totals?
- Direction, taken from the sign of a cross product between the movement vector and the line, which stays correct at any approach angle rather than only for people walking perpendicular to the doorway. In and out are reported separately.
- What happens to the day's count if a camera drops out?
- Nothing is lost. Live in-memory totals are only a cache; the events table is the source of truth and totals re-seed from it when the camera reconnects. Systems that hold the running total only in memory lose the day on a restart.
Guides on Nexa Count
What to work out before you buy one.