基于Python+Flask+MediaPipe实现疲劳和分心驾驶实时检测计算机视觉的驾驶员危险行为检测系统源码+项目说明

张开发
2026/4/20 11:39:30 15 分钟阅读

分享文章

基于Python+Flask+MediaPipe实现疲劳和分心驾驶实时检测计算机视觉的驾驶员危险行为检测系统源码+项目说明
驾驶员危险行为检测系统效果展示项目简介驾驶员危险行为检测系统是一个基于计算机视觉技术的智能监控系统能够实时检测驾驶员的疲劳和分心行为并及时发出告警帮助降低交通事故风险。系统采用Flask Web框架提供友好的操作界面所有数据处理均在本地完成保护用户隐私。算法原理一、核心技术栈人脸关键点检测Google MediaPipe Face Mesh468个3D人脸关键点图像处理OpenCV数值计算NumPy、SciPy二、疲劳检测算法1. EAREye Aspect Ratio- 眼睛纵横比原理通过计算眼睛的垂直距离与水平距离的比值来判断眼睛是否闭合。当眼睛睁开时EAR值较大当眼睛闭合时EAR值接近0。计算公式EAR (||p2-p6|| ||p3-p5||) / (2 × ||p1-p4||)其中p1、p4眼睛左右角点p2、p3上眼睑关键点p5、p6下眼睑关键点MediaPipe关键点索引左眼362, 385, 387, 263, 373, 380右眼33, 160, 158, 133, 153, 144判定逻辑阈值默认0.21可配置当EAR 阈值且持续20帧约0.7秒时判定为疲劳闭眼分别计算左右眼EAR后取平均值提高准确性2. MARMouth Aspect Ratio- 嘴部纵横比原理通过计算嘴部的垂直张开程度与水平宽度的比值来检测打哈欠行为。打哈欠时嘴部张开MAR值显著增大。计算公式MAR (||p2-p6|| ||p3-p5||) / (2 × ||p1-p4||)MediaPipe关键点索引左嘴角61右嘴角291上唇13, 14下唇78, 308判定逻辑阈值默认0.55可配置当MAR 阈值且持续15帧约0.5秒时判定为打哈欠告警级别warning低于闭眼的danger级别三、分心检测算法头部姿态估计Head Pose Estimation原理使用PnPPerspective-n-Point算法通过2D图像点和3D模型点的对应关系计算头部的三维旋转角度欧拉角。算法流程3D模型点定义标准人脸模型鼻尖(0.0, 0.0, 0.0)下巴(0.0, -330.0, -65.0)左眼左角(-225.0, 170.0, -135.0)右眼右角(225.0, 170.0, -135.0)左嘴角(-150.0, -150.0, -125.0)右嘴角(150.0, -150.0, -125.0)2D图像点提取从MediaPipe检测的468个关键点中提取对应点相机内参矩阵构建K [[focal_length, 0, center_x], [0, focal_length, center_y], [0, 0, 1]]PnP求解使用cv2.solvePnP()计算旋转向量和平移向量旋转向量转旋转矩阵使用Rodrigues变换旋转矩阵转欧拉角Yaw偏航角左右转头Pitch俯仰角低头/抬头Roll翻滚角头部倾斜判定逻辑阈值默认30°可配置当任一角度超过阈值且持续90帧约3秒时触发分心告警自动识别偏转方向头部左偏/右偏、低头/抬头、头部倾斜告警级别持续5秒为danger否则为warning四、架构设计模式系统采用多种设计模式保证代码质量和可扩展性策略模式BaseDetector定义统一接口FatigueDetector和DistractionDetector实现不同检测策略模板方法模式process()方法定义标准流程预处理→特征提取→检测→后处理→通知工厂模式DetectorFactory统一创建和管理检测器实例观察者模式检测器触发告警时通知告警服务实现解耦单例模式VideoService确保全局唯一的视频流管理器五、系统架构采用混合架构样式分层架构表现层Web界面→ 业务逻辑层检测器、服务→ 数据访问层SQLite管道-过滤器视频采集 → 预处理 → 人脸检测 → 特征提取 → 行为分析 → 告警判断事件驱动检测器发布事件告警服务订阅并处理环境要求硬件要求最低配置CPUIntel i3 或同等性能处理器内存4GB RAM摄像头720p USB摄像头存储2GB 可用空间推荐配置CPUIntel i5 或更高内存8GB RAM摄像头1080p USB摄像头存储5GB 可用空间软件要求操作系统Windows 10、Ubuntu 18.04、macOS 10.14Python版本3.8 或更高版本推荐3.10浏览器Chrome 90、Edge 90、Firefox 88摄像头驱动确保摄像头可正常使用Python依赖包核心依赖requirements.txtFlask2.3.3 # Web框架 Flask-CORS4.0.0 # 跨域支持 opencv-python4.8.0.76 # 图像处理 mediapipe0.10.14 # AI人脸检测 numpy1.24.3 # 数值计算 scipy1.11.2 # 科学计算 python-dateutil2.8.2 # 日期处理 Pillow10.0.0 # 图像处理安装步骤1. 获取项目代码如果已有项目文件跳过此步骤。否则#源码可以从github仓库firc-projects获取gitclone项目地址cdDrivingBehavior2. 创建虚拟环境推荐Windows系统python-mvenv venv venv\Scripts\activateLinux/macOS系统python3-mvenv venvsourcevenv/bin/activate3. 安装依赖包pipinstall-rrequirements.txt国内用户加速安装使用清华镜像源pipinstall-rrequirements.txt-ihttps://pypi.tuna.tsinghua.edu.cn/simple安装前检查确认Python版本 ≥ 3.8python --version升级pip到最新版本python -m pip install --upgrade pip4. 验证安装python-cimport cv2; import mediapipe; import flask; print(安装成功)如果输出安装成功说明依赖包安装正确。运行步骤方法一使用启动脚本Windows系统run.batLinux/macOS系统./run.sh方法二手动启动cdsrc python app.py访问系统启动成功后在浏览器中访问http://localhost:5000或在局域网其他设备访问需查看本机IPhttp://本机IP:5000使用流程启动监控点击启动监控按钮授权摄像头允许浏览器访问摄像头实时检测系统自动开始检测疲劳和分心行为查看告警检测到危险行为时会自动弹出告警提示查看历史切换到历史记录页面查看所有告警记录统计分析切换到统计分析页面查看数据图表系统设置在系统设置页面调整检测阈值和参数注意事项一、使用环境要求光照条件避免过暗或过亮的环境避免强光直射摄像头建议在正常室内光照下使用摄像头位置正对驾驶员面部距离建议50-100厘米确保脸部清晰可见无遮挡佩戴物品普通眼镜不影响检测墨镜会降低检测准确率口罩会影响嘴部检测打哈欠检测可能不准确二、性能优化降低卡顿关闭其他占用CPU的程序降低视频分辨率修改config.py中的VIDEO_WIDTH和VIDEO_HEIGHT确保电脑配置满足最低要求调整灵敏度如果误报频繁提高阈值EAR_THRESHOLD、MAR_THRESHOLD、HEAD_POSE_THRESHOLD如果漏报频繁降低阈值在系统设置页面可实时调整无需重启三、数据管理数据存储告警记录存储在SQLite数据库中data/database.db数据不会占用内存存储在磁盘文件中每条记录约200字节10000条约2MB清理数据进入系统设置页面可清除N天前的旧数据或清空所有记录建议定期清理30天前的数据日志文件系统日志存储在logs/system.log如遇问题可查看日志排查四、安全与隐私本地处理所有视频数据在本地处理不上传云端局域网访问如需远程访问确保网络安全防火墙设置开放5000端口时需评估安全风险五、常见问题Q1摄像头无法打开检查摄像头是否正常连接确认摄像头未被其他程序占用在浏览器中允许摄像头访问权限修改config.py中的CAMERA_INDEX参数0、1、2等Q2检测不准确调整光照条件调整摄像头角度和距离在设置页面调整检测阈值确保脸部无遮挡Q3如何在其他设备访问确保config.py中HOST ‘0.0.0.0’查看本机IP地址WindowsipconfigLinuxifconfig在其他设备浏览器访问http://:5000确保防火墙允许5000端口Q4如何扩展新功能在src/detectors/创建新检测器文件继承BaseDetector基类实现extract_features()和detect()方法在DetectorFactory中注册新检测器六、开发调试调试模式config.py中DEBUG True时启用热重载日志级别可修改LOG_LEVEL为DEBUG查看详细信息API测试所有API返回JSON格式可用Postman测试文件夹结构介绍DrivingBehavior/ │ ├── data/ # 数据存储目录运行时自动创建 │ └── database.db # SQLite数据库存储告警记录 │ ├── docs/ # 项目文档目录 │ ├── 心得体会.md # 开发心得与经验总结 │ ├── 架构设计文档.md # 系统架构设计详细说明 │ ├── 架构评审文档.md # ATAM架构评审报告 │ ├── 界面原型设计.md # UI原型设计规范 │ └── 需求文档.md # 功能与非功能需求说明 │ ├── logs/ # 日志目录运行时自动创建 │ └── system.log # 系统运行日志 │ ├── prototypes/ # 界面原型 │ └── index.html # 静态原型页面 │ ├── src/ # 源代码主目录 │ ├── app.py # Flask主应用入口 │ │ - 定义路由页面和API │ │ - 视频流推送 │ │ - 错误处理 │ │ │ ├── config.py # 配置管理模块 │ │ - 系统参数配置阈值、端口等 │ │ - 环境配置开发/生产 │ │ - 动态配置更新 │ │ │ ├── detectors/ # 检测器模块 │ │ ├── __init__.py # 模块初始化 │ │ ├── base_detector.py # 检测器基类抽象接口 │ │ │ - 定义处理流程模板 │ │ │ - 实现观察者模式 │ │ │ - DetectorFactory工厂类 │ │ ├── fatigue_detector.py # 疲劳检测器 │ │ │ - EAR计算眼睛纵横比 │ │ │ - MAR计算嘴部纵横比 │ │ │ - 闭眼和哈欠检测逻辑 │ │ └── distraction_detector.py # 分心检测器 │ │ - 头部姿态估计PnP算法 │ │ - 欧拉角计算 │ │ - 偏转方向识别 │ │ │ ├── models/ # 数据模型层 │ │ ├── __init__.py # 模块初始化 │ │ └── alert_model.py # 告警数据模型 │ │ - SQLite数据库操作 │ │ - 告警记录增删改查 │ │ - 统计查询接口 │ │ │ ├── services/ # 业务服务层 │ │ ├── __init__.py # 模块初始化 │ │ ├── video_service.py # 视频服务 │ │ │ - 摄像头管理单例模式 │ │ │ - 视频流捕获和处理 │ │ │ - 调用检测器进行分析 │ │ └── alert_service.py # 告警服务 │ │ - 告警记录管理 │ │ - 统计数据计算 │ │ - 观察者回调处理 │ │ │ ├── utils/ # 工具类模块 │ │ ├── __init__.py # 模块初始化 │ │ └── logger.py # 日志工具 │ │ - 统一日志格式 │ │ - 文件和控制台输出 │ │ │ ├── static/ # 静态资源目录 │ │ ├── css/ # 样式文件 │ │ │ └── style.css # 自定义样式 │ │ └── js/ # JavaScript脚本 │ │ ├── common.js # 公共工具函数 │ │ ├── monitor.js # 实时监控逻辑 │ │ ├── history.js # 历史记录页面逻辑 │ │ ├── statistics.js # 统计分析页面逻辑 │ │ └── settings.js # 系统设置页面逻辑 │ │ │ └── templates/ # HTML模板目录 │ ├── base.html # 基础模板导航栏、布局 │ ├── index.html # 实时监控页面 │ ├── history.html # 历史记录页面 │ ├── statistics.html # 统计分析页面 │ └── settings.html # 系统设置页面 │ ├── requirements.txt # Python依赖包清单 ├── run.bat # Windows启动脚本 ├── run.sh # Linux/macOS启动脚本 ├── README.md # 项目说明文档目录设计说明分层架构detectors/检测算法实现业务逻辑层services/服务封装业务逻辑层models/数据访问数据访问层templates/和static/界面展示表现层模块化设计每个模块职责单一便于维护和扩展配置集中管理所有参数在config.py中统一配置数据与代码分离data/和logs/目录存储运行时数据技术特性✅实时检测30FPS流畅检测✅双模检测同时支持疲劳和分心检测✅智能告警分级告警warning/danger✅Web界面友好美观的响应式界面✅数据可视化Chart.js图表展示统计趋势✅灵活配置支持运行时动态调整参数✅本地处理保护隐私无需联网✅易于扩展支持添加新检测算法开发路线图v1.0当前版本✅ 基础疲劳检测闭眼、打哈欠✅ 基础分心检测头部姿态✅ Web监控界面✅ 历史记录查询✅ 统计分析✅ 系统设置

更多文章