1. 项目概述疲劳驾驶是导致交通事故的重要原因之一。根据相关研究疲劳驾驶导致的交通事故占比高达20%-30%。传统的人工监测方法存在效率低、成本高、主观性强等问题。基于计算机视觉的疲劳驾驶检测系统为解决这一问题提供了新的技术路径。本项目采用YOLOv12目标检测算法结合Python和PyQt5开发了一套完整的疲劳驾驶检测系统。系统能够实时监测驾驶员面部状态准确识别打哈欠、闭眼等疲劳特征并通过直观的UI界面展示检测结果。相比传统方案本系统具有以下优势检测精度高YOLOv12算法在保持实时性的同时检测精度较前代提升约15%响应速度快在普通消费级GPU上可实现30FPS以上的处理速度用户体验好科幻风格的UI界面设计操作简单直观扩展性强模块化设计便于功能扩展和算法升级2. 系统架构设计2.1 整体架构系统采用典型的三层架构设计数据采集层支持摄像头、视频文件和静态图片三种输入方式算法处理层基于YOLOv12的核心检测算法包含预处理、推理和后处理模块应用展示层PyQt5实现的用户界面提供参数配置、结果显示和系统管理功能各模块间通过信号量进行通信确保系统的高效运行和低延迟响应。2.2 技术选型考量在选择技术方案时我们重点考虑了以下因素算法性能YOLOv12在精度和速度上达到最佳平衡特别适合实时检测场景开发效率Python生态提供了丰富的CV库和工具链大幅降低开发门槛部署便利系统支持CPU和GPU两种运行模式适配不同硬件环境用户体验PyQt5跨平台特性确保系统可在Windows、Linux等主流操作系统运行3. 核心功能实现3.1 疲劳状态检测系统可识别四种关键面部状态打哈欠(Yawn)嘴部张开程度超过阈值并持续一定时间闭眼(close)眼睛闭合时间超过安全阈值正常状态(noYawn)面部特征处于正常范围睁眼(open)眼睛处于睁开状态检测逻辑采用多帧验证机制避免瞬时动作导致的误报。具体实现如下def check_fatigue(detections, frame_count): yawn_frames 0 close_frames 0 for class_name, _, _ in detections: if class_name Yawn: yawn_frames 1 elif class_name close: close_frames 1 # 连续5帧检测到打哈欠或闭眼视为疲劳状态 if yawn_frames 5 or close_frames 5: return True return False3.2 多线程处理为保证UI流畅性系统采用生产者-消费者模式的多线程架构采集线程负责视频/图像数据的读取检测线程运行YOLOv12模型进行目标检测UI线程负责界面更新和用户交互线程间通过队列进行数据传递避免资源竞争和阻塞。关键代码如下class DetectionThread(QThread): frame_received pyqtSignal(np.ndarray, np.ndarray, list) def __init__(self, model, source, conf, iou): super().__init__() self.model model self.source source self.conf conf self.iou iou self.running True def run(self): while self.running: frame self.get_frame() if frame is None: break results self.model(frame, confself.conf, iouself.iou) annotated_frame results[0].plot() detections self.parse_results(results) self.frame_received.emit(frame, annotated_frame, detections) def stop(self): self.running False3.3 参数动态调节系统提供以下可调参数置信度阈值(0-1.0)控制检测结果的严格程度IoU阈值(0-1.0)调节重叠检测框的合并策略模型选择支持yolov12n/s/m/l不同规模的模型参数调节采用双向绑定机制滑块和数值框实时同步# 置信度阈值同步 def on_confidence_changed(self, value): self.confidence value / 100.0 self.confidence_slider.setValue(int(value * 100)) self.confidence_spinbox.setValue(self.confidence) if self.detection_thread: self.detection_thread.conf self.confidence4. 数据集与模型训练4.1 数据集构建我们收集了超过16,000张驾驶员面部图像涵盖不同光照条件白天、夜晚、逆光等驾驶员特征年龄、性别、肤色等姿态变化正面、侧面、低头等数据集按8:1:1的比例划分为训练集、验证集和测试集确保模型评估的客观性。4.2 数据增强策略为提高模型鲁棒性训练时采用了以下增强方法几何变换随机旋转(±15°)、平移(±20%)、缩放(0.8-1.2x)颜色扰动亮度(±30%)、对比度(±20%)、饱和度(±20%)遮挡模拟随机矩形遮挡(最大20%面积)增强配置示例augmentation: hsv_h: 0.015 # 色调 hsv_s: 0.7 # 饱和度 hsv_v: 0.4 # 亮度 degrees: 15 # 旋转角度 translate: 0.2 # 平移 scale: 0.2 # 缩放 shear: 0.0 # 剪切 perspective: 0.0001 # 透视 flipud: 0.0 # 上下翻转 fliplr: 0.5 # 左右翻转 mosaic: 1.0 # 马赛克增强 mixup: 0.2 # MixUp增强4.3 模型训练细节训练采用以下超参数配置model.train( datadata.yaml, epochs100, batch8, imgsz640, device0, # 使用GPU workers4, optimizerAdamW, lr00.001, lrf0.01, momentum0.937, weight_decay0.0005, warmup_epochs3, warmup_momentum0.8, box7.5, # box loss增益 cls0.5, # cls loss增益 dfl1.5, # dfl loss增益 )训练过程中采用早停策略当验证集mAP连续10个epoch不提升时终止训练。5. 系统部署与优化5.1 环境配置推荐使用以下环境部署基础环境Python 3.9PyTorch 2.0CUDA 11.7 (GPU版本)依赖安装pip install -r requirements.txtrequirements.txt核心内容ultralytics8.0.0 opencv-python4.7.0.72 PyQt55.15.7 numpy1.23.55.2 性能优化技巧模型量化使用FP16精度可提升30%推理速度model YOLO(yolov12s.pt).half()TensorRT加速转换模型为TensorRT格式可获得2-3倍速度提升model.export(formatengine, device0)多帧采样对视频流可每2-3帧处理一次降低计算负载5.3 常见问题排查检测结果不稳定检查摄像头焦距和角度调整置信度和IoU阈值确保光照条件充足界面卡顿降低检测分辨率关闭不必要的可视化选项检查系统资源占用模型加载失败验证模型文件完整性检查PyTorch版本兼容性确保有足够的GPU内存6. 使用指南6.1 快速开始安装依赖环境下载预训练模型(yolov12s.pt)运行主程序python main.py6.2 操作流程登录系统(默认账号/密码admin/123456)选择检测模式(图片/视频/摄像头)调整检测参数(可选)开始检测并查看结果保存检测结果(可选)6.3 高级功能自定义模型替换models目录下的模型文件数据集扩展按YOLO格式添加新数据并重新训练报警阈值设置修改config.json中的疲劳判定参数7. 项目扩展方向多模态检测结合方向盘握力、车道偏离等信号云端部署支持多路视频流同时处理移动端适配开发Android/iOS版本驾驶员身份识别集成人脸识别模块实际部署中发现系统在以下场景表现最佳摄像头高度与驾驶员眼睛平齐光照强度在300-1000lux范围内驾驶员佩戴普通眼镜不影响检测效果系统运行温度保持在60°C以下时性能最稳定