| __pycache__ | ||
| config | ||
| docs | ||
| logs | ||
| models | ||
| src | ||
| venv | ||
| .gitignore | ||
| FIX_404_ERROR.md | ||
| FIXES_SUMMARY.md | ||
| install_rpi.sh | ||
| POC_README.md | ||
| POC_SUMMARY.md | ||
| PROJECT_STRUCTURE.md | ||
| QUICK_START_RPI.md | ||
| RASPBERRY_PI_INSTALL.md | ||
| README.md | ||
| requirements_rpi.txt | ||
| requirements.txt | ||
| RPI_COMPATIBILITY_SUMMARY.md | ||
| run_poc.sh | ||
| SMOKE_SEATBELT_UPDATE.md | ||
| track_drive copy.py | ||
| track_drive.py | ||
| TROUBLESHOOTING.md | ||
Driver DSMS/ADAS - POC Demo
World-Class Real-Time Driver Monitoring System | Optimized for Raspberry Pi & Low-Spec CPUs
🚀 Quick Start
# Install dependencies
pip install -r requirements.txt
# Run POC Demo
./run_poc.sh
# OR
streamlit run src/poc_demo.py
📦 Technologies & Libraries
Core Framework
- Streamlit (v1.28+) - Web UI framework
- OpenCV (v4.8+) - Image processing & video capture
- NumPy (v1.24+) - Numerical operations
Deep Learning Models
- YOLOv8n (Ultralytics) - Object detection (ONNX optimized)
- ONNX Runtime (v1.15+) - Fast inference engine
- PyTorch (v2.0+) - Model training/export (not used in runtime)
Face & Pose Analysis
- MediaPipe Face Mesh (v0.10+) - Face landmarks, PERCLOS, head pose
- MediaPipe Pose (v0.10+) - Body landmarks for smoking/seatbelt
Utilities
- PyYAML (v6.0+) - Configuration management
- scikit-learn (v1.3+) - ML utilities (installed but not used in POC)
✅ Active Features (POC)
DSMS (Driver State Monitoring)
- Drowsiness Detection - MediaPipe Face Mesh (PERCLOS algorithm)
- Distraction Detection - MediaPipe Face Mesh (head pose yaw/pitch)
- Driver Absent Detection - MediaPipe Face Mesh (face presence)
- Phone Detection - YOLOv8n ONNX (COCO class 67: cell phone)
- Smoking Detection - MediaPipe Pose (hand-to-mouth gesture)
- Seatbelt Detection - MediaPipe Pose (shoulder/chest analysis)
UI Features
- Real-time video feed (camera or uploaded file)
- Camera ON/OFF toggle
- Video file upload (MP4, AVI, MOV, MKV, WebM, FLV, WMV, M4V)
- Live alerts display
- Performance statistics
❌ Disabled Features (Not in POC)
Removed from Original Implementation
- Vehicle Detection - YOLOv8n (COCO classes 2,3,5,7) - Removed for POC
- Pedestrian Detection - YOLOv8n (COCO class 0) - Removed for POC
- VideoMAE - Action recognition model - Too heavy for low-spec CPUs
- Roboflow API - External seatbelt detection - Replaced with MediaPipe Pose
- Isolation Forest - Anomaly detection - Not reliable without training data
- Optical Flow - OpenCV Farneback - Removed (was for speed/braking estimation)
ADAS Features (Not Implemented)
- Forward Collision Warning (FCW)
- Lane Departure Warning (LDW)
- Tailgating Detection
- Hard Braking/Acceleration Detection
- Overspeed Detection
🎯 Model Details
YOLOv8n (ONNX)
- Model:
yolov8n.onnx(auto-exported from PyTorch) - Input: 640x640 RGB image
- Output: 84x8400 (4 bbox + 80 class scores)
- Classes Used: 67 (cell phone only)
- Confidence Threshold: 0.5
- Inference: Every 2nd frame (skip=2)
MediaPipe Face Mesh
- Landmarks: 468 points (refined)
- Features: PERCLOS, head yaw/pitch, face presence
- Confidence: 0.5 (detection), 0.5 (tracking)
- Max Faces: 1
MediaPipe Pose
- Landmarks: 33 body points
- Complexity: 1 (balanced)
- Features: Smoking (hand-to-mouth), Seatbelt (shoulder/chest)
- Inference: Every 6th frame (optimized)
- Confidence: 0.5 (detection), 0.5 (tracking)
⚙️ Configuration
File: config/poc_config.yaml
Key Settings:
- Frame size: 640x480
- Inference skip: 2 frames
- PERCLOS threshold: 0.3
- Head pose threshold: 25°
- Confidence threshold: 0.5
📊 Performance
Target Hardware: Raspberry Pi 4 / Low-spec CPU (4 cores, 2GHz, 8GB RAM)
Optimizations:
- ONNX inference (faster than PyTorch)
- Frame skipping (process every 2nd frame)
- MediaPipe Pose runs every 6th frame
- Queue-based threading (non-blocking UI)
- Optimized frame size (640x480)
Expected Performance:
- FPS: 15-25 (with frame skipping)
- Memory: 1-2GB
- CPU: 60-80%
📁 Project Structure
Driver_DSMS_ADAS/
├── src/
│ └── poc_demo.py # Main POC application
├── config/
│ └── poc_config.yaml # Configuration file
├── models/ # Auto-created: YOLO ONNX models
├── logs/ # Auto-created: Application logs
├── requirements.txt # Python dependencies
├── run_poc.sh # Quick start script
└── README.md # This file
🔧 Dependencies
Required (see requirements.txt):
- streamlit>=1.28.0,<2.0.0
- opencv-python>=4.8.0,<5.0.0
- numpy>=1.24.0,<2.0.0
- ultralytics>=8.0.0,<9.0.0
- torch>=2.0.0,<3.0.0 (for YOLO export only)
- onnxruntime>=1.15.0,<2.0.0
- mediapipe>=0.10.0,<1.0.0
- pyyaml>=6.0,<7.0
Optional (installed but not used in POC):
- transformers>=4.30.0,<5.0.0 (VideoMAE - disabled)
- roboflow>=1.1.0,<2.0.0 (API - disabled)
- scikit-learn>=1.3.0,<2.0.0 (Isolation Forest - disabled)
🐛 Known Limitations
- Smoking Detection: Heuristic-based (hand-to-mouth distance), may have false positives
- Seatbelt Detection: Heuristic-based (shoulder/chest analysis), accuracy depends on camera angle
- Phone Detection: Only detects visible phones (not in pockets)
- Frame Skipping: Predictions update every 2nd frame (smooth video, delayed alerts)
📝 Notes
- Original File:
track_drive.py(full implementation with disabled features) - POC File:
src/poc_demo.py(streamlined, optimized version) - Models: Auto-downloaded on first run (YOLOv8n ~6MB)
- ONNX Export: Automatic on first run (creates
models/yolov8n.onnx)
🎯 Use Cases
- Driver Monitoring: Real-time drowsiness, distraction, phone use
- Safety Compliance: Seatbelt, smoking detection
- Demo/POC: Lightweight, accurate features for presentations
- Raspberry Pi Deployment: Optimized for low-spec hardware
Last Updated: 2024
Status: ✅ POC Ready - Production Optimized