博客 / 詳情

返回

基於 YOLOv8 的駕駛員疲勞狀態識別系統實戰(含完整源碼與可視化界面)

基於 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_close
  • yawn

可根據實際需求繼續擴展:

  • eye_open
  • phone_use
  • head_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 總線聯動
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.