/Driver-Monitoring-System2

该系统为危险驾驶行为监测系统,提供实时监测和视频检测两种模式,检测范围包含双手离开方向盘、闭眼睡觉、瞌睡点头、打哈欠共四种行为。该系统为小学期期间编写而成,可能并不具有投入实际应用能力。

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

写在前面

这个仓库的代码最开始是在小学期的时候写的,我和我的同学开发这个系统的时候,并没有使用 GitHub 来托管代码,而是使用更混乱的 QQ 群文件功能来存储代码,而最终提交代码的时候,是由我一个人独自将整个代码推送到本仓库里面,这导致本代码中的作者署名(应该)都是我自己。因此请注意,它不是个人项目,而是由我和我的同学 VnhukvmSyrena 还有 bumianjun 共同开发而来。
为了满足代码量和功能的要求,我们给它添加了很多毫无意义纯凑数的代码,不仅大幅降低代码的可读性,还增加了系统的运行负荷和各种难以解决的 BUG 等等。在推送代码到仓库的时候,我发现这个系统仍然存在不少致命的漏洞,有的甚至会导致程序闪退,不过呢,我仅仅想将其发布到 GitHub 上留作存档,因此最后只是补充了下本代码的环境配置说明而没有尝试去修复这些问题。既然这个仓库只是用于留档,那么就不要浪费时间去修复它了,我想它并不值得那么做,我更愿意重新开发一个功能相似的系统,而不是在这上面继续缝缝补补。

危险驾驶行为检测系统(Driver-Monitoring System)

该系统提供了通过摄像头实时监测、通过视频录像后期检测两大功能,检测范围包括双手离开方向盘、闭眼、哈欠、低头共四类行为。

系统特色

该系统采用了 PERCLOS 疲劳程度评价指标来评价驾驶员的疲劳程度,并提供参考值供使用者分析驾驶员的疲劳状态。
此外,该系统在实时监测驾驶员行为期间,会记录各个危险驾驶行为的出现时间,并通过可互动的图表展现驾驶员的总体状态。使用者可以通过五大图表充分了解到驾驶员的驾驶状态,并及时作出相应调整,避免事故的发生。

环境配置

本项目的运行环境为 Python 3.9.13,项目仓库内已经提供了 requirements.txt 文件,但是为了预防万一,请在安装前先阅读下列两点

  • Dlib 库的安装可能无法直接通过执行下列命令直接完成!如果你直接执行
    pip install dlib
    
    有可能无法正常安装并有报错信息。
  • 在安装 Dlib 库之前,还需要安装 cmake 库,并需要有可用的 C++ 编译器,而执行下列命令则可以安装 cmake
    pip install cmake
    
    这个库被写入到了 requirements.txt 中,你也可以直接执行下列命令,一样可以完成安装
    pip install -r requirements.txt
    
  • Dlib 库有很多种安装方式,此处只介绍一种。
    前往 Dlib 官网下载压缩包,将其解压。
    如果你的电脑安装有 Visual Studio,那么就打开程序 x86 Native Tools Command Prompt for VS 20XX,其中 20XX 对应了你安装的 Visual Studio 版本,如果你找不到这个程序,可以通过开始菜单搜索,也可以选择使用电脑的 CMD 或者 PowerShell 来代替。
    打开程序后,会有一个命令行窗口,请先激活相应的 Python 虚拟环境,参考路径为 /项目名称/venv/Scripts/activate,你可以通过在命令行执行
    cd /项目名称/venv/Scripts/
    .\activate
    
    来激活相应的虚拟环境,激活后应当可以看到命令行带有类似于 (venv) 的前缀。
    如果虚拟环境的 Python 解释器安装在需要管理员权限的文件夹(例如 C:/Program Files/)里,请以管理员身份打开命令行窗口,否则有可能会在安装时提示权限不足(Permission Denied)!
    激活后,请打开到 Dlib 文件解压的目录,这个目录下有一个 setup.py 的文件,确认打开了相应的目录后,执行下列命令
    python setup.py install
    
    等待编译完成即可。

常见问题

  • 如果你的用户文件夹包含中文字符,那么本项目就会无法正常运行。
    例如,你的用户文件夹路径为 C:\Users\中文用户名
    请在代码文件 main.py 开头加入下列代码
    import os
    os.environ['HUB_HOME'] = './module'
    其中 './module' 指定了本项目目录下的文件夹 module,该文件夹可以自行指定,但不能包含中文。
    需要注意的是,此代码只需要在当前用户的用户文件夹包含中文字符时添加,如果用户文件夹名称为纯英文,则没有必要添加。