Project Pink
Real-time indoor tracking & vision AI analytics
Node.js services that register, track and stream every device on the floor in real time, with a vision AI pipeline feeding live analytics.
Entrance
Display A
Display B
Checkout
In frame
0
Avg dwell
0.0s
The system
A real-time location and vision analytics platform: UWB devices are positioned with TDOA, camera feeds run through a vision AI pipeline, and everything streams into interactive 2D/3D dashboards.
Backend & cloud
- Node.js REST APIs: device registration, lifecycle, position processing, persistence
- MQTT/Mosquitto ingestion and device messaging
- Socket.IO event broadcast of positions, alerts and analytics
- aiortc/WebRTC video transport into Python services; Dockerised components
AI / ML inside
- YOLO (Ultralytics) customer detection
- ByteTrack multi-object tracking
- OpenCV real-time frame processing
- NumPy analytics: dwell time, zone occupancy, movement patterns
- DeepFace proposed for facial attribute & expression analysis
Architecture
Hover or tab through the nodes to inspect each service · ● AI/ML ● core ● data ● edge
UWB anchors & tags · indoor radio
Ultra-wideband anchors and tags provide the raw ranging signal for indoor positioning.
TDOA processing · time-difference positions
Time-difference-of-arrival processing converts ranging data into device coordinates.
MQTT · Mosquitto · IoT messaging
Real-time device messaging, ingestion and communication.
IP cameras · RTSP / HTTP
Camera feeds ingested over RTSP/HTTP.
WebRTC · aiortc · low-latency video
aiortc carries low-latency video between cameras and Python processing services.
Vision AI · YOLO · ByteTrack · OpenCV
Detection, multi-object tracking and frame processing; NumPy analytics compute dwell, occupancy and movement patterns. DeepFace proposed for attributes.
Node.js services · REST · lifecycle · positions
Device registration and lifecycle, position processing, AI result integration and persistence.
Socket.IO · event broadcast
Pushes positions, registrations, alerts and AI analytics to every connected client.
Dashboards · Konva · Three.js · Chart.js
Live 2D/3D tracking views and analytics: counts, heatmaps, area popularity.
What I built
- 01Developed Node.js services and REST APIs for device registration, lifecycle management, position processing and persistence.
- 02Integrated MQTT with Mosquitto for real-time IoT messaging, ingestion and device communication.
- 03Broadcast positions, registration updates, alerts and AI analytics to clients with Socket.IO.
- 04Integrated UWB positioning and TDOA processing into live 2D/3D dashboards with Konva.js and Three.js.
- 05Designed a Python vision AI pipeline with YOLO, ByteTrack and OpenCV; proposed DeepFace with NumPy-based behavioural analytics.
- 06Streamed IP camera feeds over RTSP/HTTP and WebRTC (aiortc) into the Python processing services.
- 07Built React + Chart.js dashboards for customer counts, demographic estimates, expressions, area popularity and traffic heatmaps.
Engineering decisions
Raw positions are jittery and arrive constantly.
→ A position-processing service on Node.js normalises UWB/TDOA updates before Socket.IO fans them out, so dashboards animate smoothly.
Detections aren't insights.
→ ByteTrack gives detections a persistent identity; NumPy analytics turn identities over time into dwell, occupancy and movement patterns.
Video is heavy, dashboards must stay live.
→ aiortc WebRTC streaming feeds Python vision services; only compact analytics events travel back through Node.js.
- Node.js
- React.js
- Python
- YOLO
- ByteTrack
- OpenCV
- NumPy
- DeepFace
- MQTT
- Mosquitto
- Socket.IO
- WebRTC
- aiortc
- Three.js
- Konva.js
- Chart.js
- UWB · TDOA
- Docker