基于驾驶员面部特征的疲劳检测系统

大家好,本文是对基于驾驶员面部特征的疲劳检测系统源码的介绍与说明。

项目下载:基于驾驶员面部特征的疲劳检测系统

1.关于项目

疲劳驾驶检测系统通过监测驾驶人的眼睛状态,头部状态,嘴部状态等指标,识别出疲劳迹象,及时发出警示提醒。这种预警提醒可以帮助驾驶人意识到自己的疲劳状态,及时采取休息措施,防止发生事故。项目基于OpenCV和dlib库实现对摄像头或视频中的人脸进行实时特征检测,使用PyQt5实现简单的界面设计,通过提取的人脸特征数据进行疲劳检测,判断是否处于疲劳状态并在必要时发出提示信息。

1.1 项目简介

项目实现了一个疲劳驾驶检测系统(带UI界面) :

1.2 项目结构介绍

example_videos文件夹保存供检测使用的视频;README_images文件夹保存此READNE.md用到的图片;src文件夹包含运行文件main.py界面类文件UI.py工具类文件utils.py,预训练人脸关键点检测模型文件shape_predictor_68_face_landmarks.dat,以及警报声音文件warning.mp3。

1.3 运行方法介绍

配置环境:dlib库的安装,也可以参照参照网上的教程

若未安装cmake:

python 复制代码
conda install -c anaconda cmake

安装dlib:

python 复制代码
conda install -c conda-forge dlib

以下是本项目在python3.9环境下使用到的主要库的版本:

进入src文件夹,运行main.py文件,然后按照界面提示,打开摄像头或传入视频进行检测:

2.实验步骤

2.1 MainWindow类的实现

在main.py中创建MainWindow类,继承自Ui_MainWindow类,主要的作用是:

  • 初始化窗口,创建两个线程的实例

  • 连接各种信号和槽函数

  • 实现各个槽函数的功能

2.2 AjustCamera_Thread类的实现

在main.py中创建AjustCamera_Thread类,其主要的作用是:

  • 定义信号对象用于发送图像,消息数据。初始化各种属性以及加载模型的方法

  • 当用户点击调整摄像头按钮,打开摄像头,加载面部特征检测模型。如果人脸在摄像头可检测的范围内,会绘制人脸的12条轴线,并显示头部姿态的三个旋转角度。

2.3 Start_Thread类的实现

在main.py中创建Start_Thread线程类,其主要的作用是初始化各种变量(文件路径,摄像头选择等),实现一些功能方法(检测功能开关,打开视频文件开关,播放音乐的方法等)

程序的核心功能是疲劳驾驶检测功能的实现,具体功能如下:

① 将线程状态设置为运行并向窗口发送消息,打开视频或摄像头

② 初始化测试参数;初始化阈值。

③ 读取视频帧,对当前帧进行调整(维度缩减,灰度化,图像增强)

④ 使用面部检测模型detector检测人脸位置,在这里实现了脱岗检测功能

⑤ 使用predictor获取脸部特征信息,转为数组形式

⑥ 提取左眼,右眼,嘴巴坐标,计算左右眼长宽比(取二者均值)ear,嘴巴长宽比mar。获取头部姿态,取pitch(har),yaw,row旋转角度。并实时在屏幕中显示计算结果。

⑦ 计算100次ear,mar,har并求平均值,得到当前使用者的眼部,嘴部和头部俯仰角的阈值。

⑧ 计算检测时间内,异常状态的次数。异常状态定义:1.ear眼睛长宽比 小于0.75倍阈值标记为异常;2.mar嘴巴长宽比 大于1.6倍阈值标记为异常;3.har头部旋转角度 跟阈值差大于标准值标记为异常。

⑨ 如果这三个异常状态的次数值与检测时间的比值大于设定的疲劳阈值FATIGUE_THRESH,则判定为:1.闭眼时间较长;2.张嘴时间较长;3.低头时间较长。并在屏幕中发送提示信息。

⑩ 如果被判定为疲劳的次数大于3次,则判定为:您已经疲劳,请注意休息。并播放警告音频。

3.实验的不足与拓展

3.1 实验不足

导入视频或者打开摄像头时间不能太短,因为模型需要循环100次计算眼部长宽比,嘴部长宽比,头部俯仰角并求平均作为阈值用于后面的疲劳判断,模型在遮挡或非正脸方面表现不好。

3.2 实验拓展

可以使用yolo添加分心行为检测功能,如玩手机、聊天等。

相关推荐
敲键盘的小夜猫6 分钟前
LLM复杂记忆存储-多会话隔离案例实战
人工智能·python·langchain
高压锅_122023 分钟前
Django Channels WebSocket实时通信实战:从聊天功能到消息推送
python·websocket·django
白杆杆红伞伞1 小时前
T01_神经网络
人工智能·深度学习·神经网络
槑槑紫1 小时前
深度学习pytorch整体流程
人工智能·pytorch·深度学习
盼小辉丶2 小时前
TensorFlow深度学习实战——去噪自编码器详解与实现
人工智能·深度学习·tensorflow
胖达不服输2 小时前
「日拱一码」020 机器学习——数据处理
人工智能·python·机器学习·数据处理
吴佳浩2 小时前
Python入门指南-番外-LLM-Fingerprint(大语言模型指纹):从技术视角看AI开源生态的边界与挑战
python·llm·mcp
吴佳浩2 小时前
Python入门指南-AI模型相似性检测方法:技术原理与实现
人工智能·python·llm
叶 落3 小时前
计算阶梯电费
python·python 基础·python 入门
kebijuelun3 小时前
百度文心 4.5 大模型详解:ERNIE 4.5 Technical Report
人工智能·深度学习·百度·语言模型·自然语言处理·aigc