rafaelzoric/DriverFatigueDetectionAndPreventionSystem
GitHub: rafaelzoric/DriverFatigueDetectionAndPreventionSystem
一套低成本、可后装的双模块驾驶员疲劳检测与预防系统,通过视觉、IMU 与 GPS 三路传感器融合计算加权疲劳评分并触发声光振动报警。
Stars: 0 | Forks: 0
# SleepAway — 驾驶员疲劳检测与预防系统
## 概述
在澳大利亚,驾驶员疲劳导致了约 **20–30% 的致命和严重道路交通事故**(澳大利亚汽车协会)。澳大利亚道路上的乘用车平均车龄为 11.4 年,这意味着大多数驾驶员的车辆都没有内置的疲劳检测系统。
SleepAway 是一款双模块设备,能够以低廉的成本轻松为任何车辆加装疲劳检测功能——只需一个仪表盘支架和 USB 供电,无需额外安装。
## 系统架构
```
┌─────────────────────────────────────┐ BLE 5 ┌──────────────────────────┐
│ Dashboard Module │ ◄────────────► │ Headband Module │
│ │ │ │
│ Raspberry Pi 5 (2GB) │ │ ESP32-C3 Mini │
│ XC9021 IR Camera (OV5647) │ │ MPU6050 IMU │
│ Adafruit GPS Breakout v3 │ │ Vibration motor │
│ Grove Vision AI V2 (YOLO) │ │ 1100mAh LiPo battery │
│ 3W LED + Gravity Speaker │ │ Makerverse USB-C charger│
└─────────────────────────────────────┘ └──────────────────────────┘
```
## 检测方法
### Vision AI — 仪表盘模块
- **主要:** MediaPipe Face Mesh(468 个 3D 特征点)与 Eye Aspect Ratio (EAR) 计算
- **次要:** Grove Vision AI V2 Ethos-U55 NPU 上的 YOLOv8n(实验性)
- **备用:** OpenCV Haar 级联 + dlib 68 特征点检测
### IMU — 头带模块
- MPU6050 加速度计 + 陀螺仪
- 俯仰角计算,用于检测点头动作
- 10Hz 数字低通滤波器 (DLPF) —— 在固件中配置,无需硬件滤波器
### GPS — 仪表盘模块
- 滚动时间窗口内的速度方差监控
- 不稳定的速度变化会影响疲劳评分
### 传感器融合
这三个数据源都会汇总并输入到一个加权疲劳评分中:
```
Score = F_camera × W_c + F_imu × W_i + F_gps × W_g
where W_c + W_i + W_g = 1 and 0 < F < 100
```
摄像头权重最高,GPS 权重最低。
## 报警系统
当综合疲劳评分超过阈值时:
- 🔴 **3W 200 流明 LED** 闪烁(通过 2N2222 晶体管连接 GPIO17)
- 🔊 **扬声器** 播放音调逐渐升高的警报(GPIO18)
- 📳 **振动马达** 对驾驶员头部发出脉冲振动(ESP32 GPIO4)
## 硬件
### 仪表盘模块 — 物料清单
| 组件 | 成本 (AUD) | 来源 |
|---|---|---|
| Raspberry Pi 5 Model B 2GB | $104.62 | Core Electronics |
| XC9021 IR 夜视摄像头 | 借用 | ECTE Store (Jaycar XC9021) |
| Adafruit Ultimate GPS Breakout v3 | 借用 | ECTE Store |
| Grove Vision AI Module V2 | $34.70 | Core Electronics |
| Gravity Digital Speaker Module | $9.75 | Little Bird Electronics |
| 3W 200 流明 LED 模块 | $3.05 | Little Bird Electronics |
| Raspberry Pi 主动散热器 | $8.95 | Little Bird Electronics |
### 头带模块 — 物料清单
| 组件 | 成本 (AUD) | 来源 |
|---|---|---|
| ESP32-C3 Mini 开发板(含排针) | $7.60 | Core Electronics |
| MPU6050 IMU | $6.11 | Little Bird Electronics |
| 微型振动马达 (10×2.7mm) | $1.68 | Little Bird Electronics |
| 聚合物锂离子电池 3.7V 1100mAh | $8.65 | Core Electronics |
| Makerverse USB-C 锂电池充电器 | $6.85 | Core Electronics |
**总支出:$202.38**(含 $9.42 运费) — 占 $350 预算的 57.8%
## 接线
### 仪表盘模块 — 主要连接
| 组件 | Pi 5 引脚 | 协议 |
|---|---|---|
| XC9021 IR 摄像头 | CSI 接口(22 针) | MIPI CSI-2 |
| Grove Vision AI V2 | GPIO2/3 | I2C |
| GPS Breakout v3 | GPIO14/15 | UART0 |
| 3W LED | GPIO17 → 2N2222 | GPIO/PWM |
| 扬声器 | GPIO18 | GPIO |
### 头带模块 — 主要连接
| 组件 | ESP32-C3 引脚 | 协议 |
|---|---|---|
| MPU6050 SDA | GPIO8 | I2C |
| MPU6050 SCL | GPIO9 | I2C |
| 振动马达 | GPIO4 → 2N2222 | GPIO |
| Pi 5(无线) | 内置 BLE | BLE 5 |
## 软件设置
### 仪表盘 (Raspberry Pi 5)
**环境要求:**
- Raspberry Pi OS Bookworm (Python 3.11)
- OpenCV, MediaPipe, Picamera2, pyserial, pynmea2
**安装依赖项:**
```
sudo apt install python3-opencv python3-picamera2 -y
pip install mediapipe pyserial pynmea2 --break-system-packages
```
**为 GPS 启用 UART:**
```
sudo nano /boot/firmware/config.txt
# 在 [all] 下添加:
# enable_uart=1
# dtoverlay=uart0-pi5
sudo reboot
```
**修复串口权限(永久生效):**
```
sudo usermod -a -G tty $USER
# 或者
sudo nano /etc/udev/rules.d/99-serial.rules
# 添加:KERNEL=="ttyAMA0", MODE="0666"
```
**运行疲劳检测:**
```
python3 dashboard/sleepaway_detection.py
```
### 头带 (ESP32-C3 Mini)
**环境要求:**
- Arduino IDE 2
- Espressif 的 ESP32 板卡支持包
- Adafruit MPU6050 库
- Adafruit Unified Sensor 库
**板卡设置:**
- 开发板:ESP32C3 Dev Module
- USB CDC On Boot:Enabled
- 上传速度:921600
**上传 sketch:**
在 Arduino IDE 中打开 `headband/imu_calibration.ino` 并上传至 ESP32-C3 Mini。
## 仓库结构
```
SleepAway/
├── dashboard/
│ ├── sleepaway_detection.py # Main fatigue detection (MediaPipe + EAR)
│ └── gps_test.py # GPS NMEA parsing test
├── headband/
│ └── imu_calibration.ino # ESP32 IMU reading + calibration
├── hardware/
│ └── circuit_diagrams/ # LaTeX circuit diagrams (circuitikz)
├── docs/
│ └── design_report/ # Progress report assets
└── README.md
```
## 目标规格
| 需求 | 目标 |
|---|---|
| 检测准确率 | 在任何条件下均 ≥ 90% |
| 头带电池续航 | > 10 小时 |
| 主模块供电 | 标准 USB-C (5V/3A) |
| 头带重量 | < 300g |
| 报警响应时间 | 确认疲劳后 < 1 秒 |
## 许可证
本项目为卧龙岗大学 ECTE350 课程的一部分而开发。
© 2025 SleepAway 团队 — 保留所有权利。
标签:ESP32, Raspberry Pi, 内存执行, 嵌入式系统, 物联网, 计算机视觉, 边缘AI, 逆向工具, 驾驶员疲劳检测