基于DrowSAFE利用树莓派5构建实时驾驶员困倦检测系统
扫描二维码
随时随地手机看文章
疲劳驾驶是导致致命交通事故的最危险且报道最少的因素之一。像梅赛德斯、宝马或特斯拉那样的商用驾驶员监控系统价格高达数千欧元,并且只能安装在特定车辆上。而用于车队管理的独立系统则需要网络连接,并且还需要支付定期费用。
DrowSAFE 是开源解决方案:这是一个完全独立的困倦检测系统,任何人都可以将其构建并安装在任何车辆中。
其工作原理
DrowSAFE 以约 30 帧每秒的速度运行着一个持续的检测流程:
整个系统均运行在 Pi 5 的四核 Cortex-A76 处理器上。没有图形处理器,没有人工智能加速器,也不需要网络连接。
科学内容:EAR、MAR 和 PERCLOS
MediaPipe 脸部网格技术每帧可检测到 468 个面部特征点。DrowSAFE 利用这些数据计算出三个困倦程度指标:
眼部宽度比(EAR)——由索库普娃和切赫(2016 年)提出——是通过测量双眼 6 个特定点之间的垂直与水平间距的比率来计算的。当眼睛睁开时,EAR 大约在 0.28 到 0.35 之间。在眨眼时,EAR 会急剧下降;持续较低的 EAR 表明处于困倦状态。
EAR = ((p1 - p5) + (p2 - p4)) / (2 × (p0 - p3))
口部比例(MAR)会对嘴巴采用相同的几何形状。如果在连续 15 帧及以上的时间里,MAR 保持在阈值之上,则可认定为确认的打哈欠动作。
PERCLOS(眼闭合率)是美国国家公路交通安全管理局(NHTSA)所采用的严格衡量疲劳程度的标准指标——即在滚动的 60 秒时间段内,眼睛闭合程度超过 80%的帧数所占的比例。如果 PERCLOS 大于 15%,则可以可靠地表明警觉性受损。
头部姿态通过使用 OpenCV 的 solvePnP 算法基于 6 个标准的三维面部特征点进行实时估算。超过阈值的前倾动作(即典型的微睡眠点头动作)会增加疲劳评分。
这四个信号被整合为一个综合的疲劳评分(范围为 0 至 100):
PERCLOS:40%
瞬时有效率:25%
头部姿势(点头):20%
打哈欠频率(MAR):15%
警报状态机
疲劳评分驱动着一个具有滞后效应的三级状态机——该评分必须大幅低于阈值,才会导致警报级别降低。这样可以避免在嘈杂的帧中出现状态的频繁切换。
以下是每个警报级别在显示屏上的显示情况:
生命检测——真实成果
以下截图直接来自运行在 Raspberry Pi 5 上的系统,此时相机模块 3 未开启红外功能,且媒体流中显示了关键点标记。
警告状态 — 分数 43,EAR(外耳道容积)0.188,MAR(中耳容积)1.677,头部俯仰角 -27.3°:
危急状态——得分 81,EAR 值为 0.029,双眼完全闭合:
这两张截图均证实,在搭载 Pi 5 并启用完整 MediaPipe 管道的情况下,系统运行稳定,帧率为 30.0 fps。在关键截图中,EAR 值为 0.029,这表明近乎完全的眼部闭合状态成功触发了警报。
仪表盘
7 英寸的“树莓派触摸显示屏”运行着一个全屏的 Pygame 控制面板,一眼就能看清其内容。
左侧面板(60%):带有 MediaPipe 关键点标注的实时摄像头画面(通过配置文件中的“SHOW_LANDMARKS”选项进行切换)。
右侧面板(占总画面的 40%):疲劳程度评分(以大字体、不同颜色标注),评分进度条,实时的 EAR / MAR / 头部俯仰值,警报级别标志。
底部横幅:全宽的条状区域展示警报信息——颜色和文字会随着警报级别而变化。
为何选择边缘人工智能?
大多数商业驾驶员监控系统要么需要昂贵的车辆支持,要么会将视频传输至云端服务器。而 DrowSAFE 则与众不同:
•无需网络连接——可在任何地方使用,包括隧道和偏远地区。
•零延迟——无需网络往返传输,检测过程瞬间完成
•完全隐私保护——驾驶者的面部图像不会离开设备。
•一次性费用——无需订阅,也无需支付 API 费用
MediaPipe 的面部网格模型针对 ARM 系统进行了优化,在 Pi 5 上无需任何 GPU 或人工智能加速器即可稳定运行,帧率为 30 帧每秒。
硬件组装
步骤 1 — 闪存操作系统
闪存版树莓派操作系统(传统版,64 位)——德贝恩 12 版“博沃尔德”系统——通过树莓派安装工具进行安装。
⚠️ 重要提示:自 2026 年 4 月起,默认的 Pi OS 镜像将安装 Debian 13 特里西操作系统,并搭载 Python 3.13。MediaPipe 目前尚未针对 Python 3.13 进行适配。请在“Raspberry Pi OS(其他)”选项下,明确选择“Raspberry Pi OS(传统版,64 位)”作为安装选项。
在进行固件升级之前,请在“图像器自定义设置”界面中启用 SSH 功能并设置好您的登录凭证。
步骤 2 — 连接显示器
将 7 英寸触摸显示屏通过 DSI 电缆连接到 Pi 5 上。该显示屏直接由 Pi 的 USB-C 接口供电。
第 3 步 — 连接摄像机
Pi 5 采用的是微型 CSI 连接器,而 Camera Module 3 则配备的是标准的 15 针 FPC 线缆。请使用标准转迷你型的适配器线缆(建议使用 300 毫米长的)。
连接至 Pi 5 的 CAM/DISP 0 端口。
第 4 步 — 连接蜂鸣器
将一个工作状态良好的压电蜂鸣器连接到 GPIO 18 引脚:
软件安装设置
步骤 1 — 克隆并安装
预期的验证输出:
步骤 2 — 无摄像头测试(模拟模式)
以一个模拟的 90 秒疲劳周期运行整个仪表盘——该周期会自动依次通过所有三个警报级别,无需使用摄像头或 MediaPipe 技术。
第 3 步 — 启动直播
激活虚拟环境,为 SSH 会话设置 DISPLAY 环境变量为 ":0",并启动管道。
校准
每个人的面部特征都各不相同。请使用内置的校准工具来测量您的基准耳语频率(EAR)和最大耳声反射(MAR)值:
输出
将 EAR_THRESHOLD 设置为您睁眼时 EAR 值的约 65%。将 MAR_THRESHOLD 设置为您的静息状态和打哈欠时的 MAR 值之间的值。所有阈值均在 config/config.py 文件中。
配置
在单个“config/config.py”文件中包含的所有参数:
本文编译自hackster.io





