Fleet DMS/ODS Dashboard
Packaged Flask dashboard that aggregates a Driver Monitoring System over WebSocket/API and an ODS/APC object-detection feed over HTTP stats plus SSE video events.
Outcomes
- ●Unified dashboard shell for DMS and ODS/APC edge devices.
- ●Operator-facing controls for DMS calibration, buzzer, camera placement, and visualization.
- ●Real-time ODS/APC canvas overlays for segmentation and detections.
- ●Packaged dashboard distribution suitable for demos or handoff.
Portfolio Highlights
- →Built a packaged fleet dashboard that unifies DMS telemetry, driver-state alerts, head-pose visualization, and ODS/APC detection feeds in one operator UI.
- →Implemented browser-side canvas overlays for face landmarks, iris tracking, head pose, segmentation masks, and object detections.
- →Integrated heterogeneous device protocols including WebSocket, REST, SSE, and MJPEG-style image payloads with configurable device routing.
Snapshot
- Period: April 2026
- Source: `/Users/jose/Developer/work/sparshiq/railtrack-od-dmp-di1/fleet-dashboard`
- Domain: Fleet safety monitoring, driver monitoring UI, object detection dashboard
- Status: Packaged dashboard with DMS and ODS/APC device integration
Portfolio Summary
This dashboard turns multiple edge-AI devices into a single operator-facing fleet monitor. The UI includes a DMS panel for driver state, alerts, face/iris/pose overlays, calibration, camera placement, visualization toggles, and buzzer control. It also includes an ODS panel backed by the `apc` integration path, showing live detection/segmentation overlays, FPS, inference latency, accelerator status, and system logs. The visible UI labels the second panel as `ODS · Object Detection`; the code/config uses `apc` naming and includes a count reset control, so portfolio wording should be careful: "ODS/APC integration" or "object detection/APC feed" is safer than claiming a finished standalone passenger-counting system unless the upstream APC service is found.
Stack
- Flask dashboard server
- Jinja-rendered HTML/CSS/JavaScript
- WebSocket DMS feed
- HTTP REST controls and status endpoints
- SSE event stream for ODS/APC video frames
- Canvas overlays for landmarks, pose, segmentation masks, and detections
- YAML device config
- Waitress and PyInstaller packaging
- Pystray/Pillow tray integration
What I Built
- Aggregator server that injects DMS and ODS/APC device URLs into one dashboard.
- DMS panel with:
- - live video canvas
- - facial landmark, iris, detection, and head-pose overlays
- - EAR, MAR, PERCLOS, KSS, pitch/yaw/roll, gaze zone, FPS, RAM
- - drowsy, yawning, distracted, phone/smoking alert states
- - reset, calibrate, visualization toggle, buzzer toggle, camera placement controls
- ODS/APC panel with:
- - live video canvas fed by SSE
- - segmentation mask overlay
- - YOLO-style detection boxes and labels
- - FPS, inference latency, accelerator status
- - system log stream and visualization toggles
- Packaged builds including `fleet-DMS-ODS-dashboard-v1.0`.
Key Decisions
- Used a thin Flask server as the aggregator, while the browser connects directly to device streams.
- Used WebSocket for DMS because the DMS device emits rich frame/telemetry messages.
- Used SSE for ODS/APC frame events, with HTTP polling for stats and logs.
- Rendered overlays client-side on canvas to keep the dashboard flexible and avoid baking every visualization into server-side video.
- Kept DMS and ODS/APC as separate panels/tabs so operators can focus on one safety stream at a time.
Development Timeline
- Added initial fleet dashboard, config, packaging scripts, and Windows distribution artifacts.
- Updated dashboard UI and produced `fleet-DMS-ODS-dashboard-v1.0`.
- Added Linux build support for dashboard packaging.
- Refactored dashboard streaming to use SSE and client-side overlay rendering.