基於 YOLOv8 的駕駛員疲勞狀態識別系統實戰(含完整源碼與可視化界面)
一、項目背景與研究意義
隨着汽車保有量的持續增長,疲勞駕駛已成為交通事故的重要誘因之一。據統計,在高速公路和長途駕駛場景中,由於駕駛員長時間保持同一姿態,容易出現注意力下降、反應遲鈍、頻繁眨眼、打哈欠等疲勞特徵,從而顯著提升事故風險。
傳統的疲勞檢測方法多依賴以下方式:
- 車載方向盤行為分析
- 心率、腦電等生理傳感器
- 人工巡查與事後分析
這些方法或成本較高,或依賴額外硬件,或難以規模化部署。相比之下,基於計算機視覺的疲勞狀態識別具備以下優勢:
- 僅依賴攝像頭即可工作
- 可實時分析駕駛員面部行為
- 易於與現有車載系統或監控系統集成
基於此,本文實現並完整落地了一套 基於 YOLOv8 的駕駛員疲勞狀態識別系統,並通過 PyQt5 圖形化界面 實現真正意義上的“開箱即用”。
源碼下載與效果演示
嗶哩嗶哩視頻下方觀看:
https://www.bilibili.com/video/BV1noKpzNEvQ/
包含:
📦完整項目源碼
📦 預訓練模型權重
🗂️ 數據集地址(含標註腳本
二、系統總體設計方案
2.1 系統架構概覽
整個系統採用典型的 “模型推理 + GUI 展示” 架構,核心流程如下:
輸入源(圖片 / 視頻 / 攝像頭)
↓
YOLOv8 疲勞行為檢測模型
↓
行為狀態判定(閉眼 / 打哈欠 / 正常)
↓
PyQt5 圖形界面實時展示
↓
檢測結果保存與回放
系統既可以作為 獨立桌面應用運行,也可作為 疲勞檢測模塊嵌入到其他項目中。
2.2 功能模塊劃分
系統主要包含以下幾個核心功能模塊:
| 模塊名稱 | 功能説明 |
|---|---|
| 模型加載模塊 | 支持加載訓練好的 YOLOv8 權重 |
| 圖像檢測模塊 | 單張或批量圖片疲勞識別 |
| 視頻檢測模塊 | 視頻逐幀分析並保存結果 |
| 攝像頭模塊 | 實時疲勞行為檢測 |
| 閾值控制模塊 | 動態調整置信度閾值 |
| 結果保存模塊 | 自動保存檢測圖片與視頻 |
三、疲勞狀態識別思路設計
3.1 疲勞行為建模思路
本項目並非直接做“疲勞 / 非疲勞”二分類,而是採用 更具工程可解釋性的行為檢測策略,即:
先檢測具體疲勞行為,再綜合判斷駕駛狀態
主要檢測以下關鍵目標:
- 閉眼(Eye Closed)
- 打哈欠(Yawning)
通過對 眼睛狀態 + 嘴部張開程度 的組合分析,可以有效區分:
- 正常駕駛
- 輕度疲勞
- 明顯疲勞
該方式相比純分類模型,更適合後續擴展(如分神檢測、低頭玩手機等)。
3.2 模型選擇原因:YOLOv8
YOLOv8 是 Ultralytics 推出的新一代目標檢測模型,具有以下優勢:
- Anchor-Free 架構,訓練更穩定
- 推理速度快,適合實時視頻流
- 原生支持 ONNX / TensorRT 導出
- 生態成熟,工程資料豐富
在疲勞駕駛這種 實時性要求極高 的場景中,YOLOv8 非常適合部署在邊緣端或本地端。
四、數據集構建與訓練流程
4.1 數據集結構設計
項目採用標準 YOLO 數據集格式,結構如下:
dataset/
├── images/
│ ├── train
│ └── val
├── labels/
│ ├── train
│ └── val
每一張圖片都對應一個 .txt 標註文件,記錄目標類別與歸一化後的邊框信息。
4.2 標註類別説明
本項目標註的核心類別包括:
eye_closeyawn
可根據實際需求繼續擴展:
eye_openphone_usehead_down
4.3 模型訓練命令示例
使用 Ultralytics 官方 CLI 即可完成訓練:
yolo detect train \
data=datasets/expression/loopy.yaml \
model=yolov8n.pt \
epochs=100 \
batch=16 \
lr0=0.001
訓練完成後,將自動生成:
- 最優權重
best.pt - 損失函數曲線
- mAP 評估指標
- 混淆矩陣
五、模型推理與結果解析
5.1 推理代碼示例
模型推理基於 PyTorch 與 Ultralytics API:
from ultralytics import YOLO
model = YOLO("best.pt")
results = model("test.jpg", conf=0.25)
for box in results[0].boxes:
cls = int(box.cls)
score = float(box.conf)
模型輸出包括:
- 目標類別
- 置信度
- 邊框座標
5.2 狀態判定邏輯
在工程實現中,可以採用如下邏輯:
- 連續多幀檢測到閉眼 → 疲勞預警
- 間歇性打哈欠 → 疲勞趨勢提示
- 長時間無異常 → 正常狀態
這種 時序融合策略 可有效降低誤報率。
六、PyQt5 圖形界面設計
6.1 GUI 設計目標
在實際落地中,很多用户並不具備深度學習背景,因此 GUI 設計的目標是:
- 不需要寫代碼即可運行
- 操作流程簡單直觀
- 支持一鍵檢測與保存
6.2 界面功能説明
PyQt5 界面主要包括:
- 模型加載按鈕
- 圖片 / 視頻選擇按鈕
- 攝像頭開關
- 檢測結果顯示區域
- 日誌與狀態提示區域
多線程推理機制保證了 檢測過程中界面不卡頓。
七、系統部署與運行方式
7.1 一鍵運行
項目已完成完整打包,運行方式非常簡單:
python main.py
無需重新訓練即可體驗完整功能。
7.2 可擴展部署方向
該系統可進一步部署到:
- 車載嵌入式設備
- 智能駕駛輔助系統
- 安全監控終端
- 教學與科研實驗平台
八、項目總結與未來展望
本文完整介紹了一套 基於 YOLOv8 的疲勞駕駛識別系統,從算法原理、數據集構建、模型訓練到 GUI 工程落地,形成了完整閉環。
項目核心優勢總結:
- 🚗 面向真實駕駛場景,實用性強
- 🧠 行為級檢測,結果可解釋
- 💻 PyQt5 圖形界面,零代碼運行
- ⚡ YOLOv8 實時推理,性能穩定
- 📦 項目完整打包,開箱即用
後續可擴展方向:
- 引入時序模型(LSTM / Transformer)
- 增加分神、低頭、抽煙等行為
- 聯合多攝像頭多視角分析
- 與語音報警、CAN 總線聯動