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, 逆向工具, 驾驶员疲劳检测