創建一個基于YOLOv8+PyQt界面的駕駛員疲勞駕駛檢測系統 實現對駕駛員疲勞狀態的打哈欠檢測,頭部下垂 疲勞眼睛檢測識別

如何使用Yolov8創建一個基于YOLOv8的駕駛員疲勞駕駛檢測系統

文章目錄

      • 1. 數據集準備
      • 2. 安裝依賴
      • 3. 創建PyQt界面
      • 4. 模型訓練
      • 1. 數據集準備
      • 2. 模型訓練
        • 數據集配置文件 (`data.yaml`)
        • 訓練腳本 (`train.py`)
      • 3. PyQt界面開發
        • 主程序 (`MainProgram.py`)
      • 4. 運行項目
      • 5. 關鍵代碼解釋
        • 數據集配置文件 (`data.yaml`)
        • 訓練腳本 (`train.py`)
        • 主程序 (`MainProgram.py`)

在這里插入圖片描述
1

在這里插入圖片描述

疲勞駕駛檢測數據集。yolo標簽。標簽類別序號為0,1,2,3。注意編號從0開始計數,共4類。在這里插入圖片描述

創建一個基于YOLOv8的駕駛員疲勞駕駛檢測系統,并且帶有PyQt界面,我們可以按照以下步驟進行。請注意,由于YOLOv8在撰寫此回答時并不是一個實際發布的模型版本,我們將基于YOLOv5的流程和假設YOLOv8有類似的API進行說明。請根據實際情況調整代碼以適配YOLOv8的具體實現。

文章及代碼僅供參考。

文章目錄

      • 1. 數據集準備
      • 2. 安裝依賴
      • 3. 創建PyQt界面
      • 4. 模型訓練
      • 1. 數據集準備
      • 2. 模型訓練
        • 數據集配置文件 (`data.yaml`)
        • 訓練腳本 (`train.py`)
      • 3. PyQt界面開發
        • 主程序 (`MainProgram.py`)
      • 4. 運行項目
      • 5. 關鍵代碼解釋
        • 數據集配置文件 (`data.yaml`)
        • 訓練腳本 (`train.py`)
        • 主程序 (`MainProgram.py`)

1. 數據集準備

首先,確保你的數據集已經準備好,并按照YOLO格式標注(即每行代表一個對象,格式為class_id x_center y_center width height,所有值均為相對值)。對于疲勞駕駛檢測,假設我們有4種類別:

  • 0: 疲勞的眼睛
  • 1: 打哈欠
  • 2: 頭部下垂
  • 3: 正常狀態

2. 安裝依賴

安裝必要的依賴庫:

pip install torch torchvision torchaudio
git clone https://github.com/ultralytics/yolov5  # 假設YOLOv8有相似的倉庫結構
cd yolov5
pip install -r requirements.txt

3. 創建PyQt界面

創建一個簡單的PyQt界面用于展示檢測結果、選擇圖片或視頻文件以及啟動攝像頭實時檢測。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton, QFileDialog
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtCore import QTimer
import cv2
import torch
from ultralytics import YOLO  # 假設YOLOv8使用類似接口class MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Driver Fatigue Detection")self.setGeometry(100, 100, 640, 480)self.initUI()self.model = YOLO('yolov8n.pt')  # 使用適合的預訓練模型或自定義模型def initUI(self):self.image_label = QLabel(self)self.layout = QVBoxLayout()self.layout.addWidget(self.image_label)self.detect_image_button = QPushButton("Detect Image", self)self.detect_image_button.clicked.connect(self.detect_image)self.layout.addWidget(self.detect_image_button)self.detect_video_button = QPushButton("Detect Video", self)self.detect_video_button.clicked.connect(self.detect_video)self.layout.addWidget(self.detect_video_button)self.camera_button = QPushButton("Camera", self)self.camera_button.clicked.connect(self.start_camera)self.layout.addWidget(self.camera_button)central_widget = QWidget()central_widget.setLayout(self.layout)self.setCentralWidget(central_widget)def detect_image(self):file_path, _ = QFileDialog.getOpenFileName(self, "Select Image", "", "Images (*.png *.xpm *.jpg *.bmp)")if file_path:img = cv2.imread(file_path)results = self.model(img)annotated_img = results[0].plot()self.show_image(annotated_img)def detect_video(self):file_path, _ = QFileDialog.getOpenFileName(self, "Select Video", "", "Videos (*.mp4 *.avi *.mov)")if file_path:cap = cv2.VideoCapture(file_path)while True:ret, frame = cap.read()if not ret: breakresults = self.model(frame)annotated_frame = results[0].plot()self.show_image(annotated_frame)if cv2.waitKey(1) & 0xFF == ord('q'): breakcap.release()def start_camera(self):self.cap = cv2.VideoCapture(0)self.timer = QTimer(self)self.timer.timeout.connect(self.update_frame)self.timer.start(30)def update_frame(self):ret, frame = self.cap.read()if ret:results = self.model(frame)annotated_frame = results[0].plot()self.show_image(annotated_frame)def show_image(self, img):h, w, ch = img.shapebytes_per_line = ch * wqimg = QImage(img.data, w, h, bytes_per_line, QImage.Format_BGR888)pixmap = QPixmap.fromImage(qimg)self.image_label.setPixmap(pixmap)if __name__ == "__main__":app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())

4. 模型訓練

如果你需要重新訓練模型,可以參考前面提供的關于YOLOv5訓練的示例代碼進行調整。記得修改data.yaml文件中的類別數量和名稱以匹配你的數據集。

為了創建一個基于YOLOv8的駕駛員疲勞駕駛檢測系統,并且帶有PyQt界面,我們需要詳細說明模型訓練和界面開發的步驟。以下是詳細的代碼和解釋。

1. 數據集準備

確保你的數據集已經準備好,并按照YOLO格式標注(即每行代表一個對象,格式為class_id x_center y_center width height,所有值均為相對值)。對于疲勞駕駛檢測,假設我們有4種類別:

  • 0: 疲勞的眼睛
  • 1: 打哈欠
  • 2: 頭部下垂
  • 3: 正常狀態

2. 模型訓練

數據集配置文件 (data.yaml)
train: ./images/train
val: ./images/val
test: ./images/testnc: 4  # number of classes
names: ['open_eye', 'yawn', 'head_down', 'normal']
訓練腳本 (train.py)
import torch
from ultralytics import YOLO# Load the model
model = YOLO('yolov8n.yaml')  # or yolov8s, yolov8x, custom# Train the model
results = model.train(data='path/to/data.yaml',epochs=100,imgsz=640,batch=16,name='driver_fatigue'
)

3. PyQt界面開發

創建一個簡單的PyQt界面用于展示檢測結果、選擇圖片或視頻文件以及啟動攝像頭實時檢測。

主程序 (MainProgram.py)
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton, QFileDialog
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtCore import QTimer
import cv2
import torch
from ultralytics import YOLOclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("Driver Fatigue Detection")self.setGeometry(100, 100, 640, 480)self.initUI()self.model = YOLO('runs/train/driver_fatigue/weights/best.pt')def initUI(self):self.image_label = QLabel(self)self.layout = QVBoxLayout()self.layout.addWidget(self.image_label)self.detect_image_button = QPushButton("Detect Image", self)self.detect_image_button.clicked.connect(self.detect_image)self.layout.addWidget(self.detect_image_button)self.detect_video_button = QPushButton("Detect Video", self)self.detect_video_button.clicked.connect(self.detect_video)self.layout.addWidget(self.detect_video_button)self.camera_button = QPushButton("Camera", self)self.camera_button.clicked.connect(self.start_camera)self.layout.addWidget(self.camera_button)central_widget = QWidget()central_widget.setLayout(self.layout)self.setCentralWidget(central_widget)def detect_image(self):file_path, _ = QFileDialog.getOpenFileName(self, "Select Image", "", "Images (*.png *.xpm *.jpg *.bmp)")if file_path:img = cv2.imread(file_path)results = self.model(img)annotated_img = results[0].plot()self.show_image(annotated_img)def detect_video(self):file_path, _ = QFileDialog.getOpenFileName(self, "Select Video", "", "Videos (*.mp4 *.avi *.mov)")if file_path:cap = cv2.VideoCapture(file_path)while True:ret, frame = cap.read()if not ret: breakresults = self.model(frame)annotated_frame = results[0].plot()self.show_image(annotated_frame)if cv2.waitKey(1) & 0xFF == ord('q'): breakcap.release()def start_camera(self):self.cap = cv2.VideoCapture(0)self.timer = QTimer(self)self.timer.timeout.connect(self.update_frame)self.timer.start(30)def update_frame(self):ret, frame = self.cap.read()if ret:results = self.model(frame)annotated_frame = results[0].plot()self.show_image(annotated_frame)def show_image(self, img):h, w, ch = img.shapebytes_per_line = ch * wqimg = QImage(img.data, w, h, bytes_per_line, QImage.Format_BGR888)pixmap = QPixmap.fromImage(qimg)self.image_label.setPixmap(pixmap)if __name__ == "__main__":app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())

4. 運行項目

  1. 安裝依賴

    pip install torch torchvision torchaudio
    git clone https://github.com/ultralytics/yolov5  # 假設YOLOv8有相似的倉庫結構
    cd yolov5
    pip install -r requirements.txt
    
  2. 運行訓練腳本

    python train.py
    
  3. 運行主程序

    python MainProgram.py
    

5. 關鍵代碼解釋

數據集配置文件 (data.yaml)
  • train, val, test: 數據集路徑。
  • nc: 類別數量。
  • names: 類別名稱。
訓練腳本 (train.py)
  • YOLO('yolov8n.yaml'): 加載YOLOv8模型。
  • model.train(): 開始訓練模型。
主程序 (MainProgram.py)
  • YOLO('runs/train/driver_fatigue/weights/best.pt'): 加載訓練好的模型。
  • detect_image(), detect_video(), start_camera(): 分別處理圖像、視頻和攝像頭檢測。
  • show_image(): 顯示檢測結果。

通過以上步驟,tongxue 你就構建一個完整的駕駛員疲勞駕駛檢測系統,并帶有PyQt界面進行交互。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87216.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87216.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87216.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用FFmpeg將YUV編碼為H.264并封裝為MP4,通過api接口實現

YUV數據來源 攝像頭直接采集的原始視頻流通常為YUV格式(如YUV420),尤其是安防攝像頭和網絡攝像頭智能手機、平板電腦的攝像頭通過硬件接口視頻會議軟件(如Zoom、騰訊會議)從攝像頭捕獲YUV幀,進行預處理&am…

tcpdump工具交叉編譯

本文默認系統已經安裝了交叉工具鏈環境。 下載相關版本源碼 涉及tcpdump源碼,以及tcpdump編譯過程依賴的pcap庫源碼。 網站:http://www.tcpdump.org/release wget http://www.tcpdump.org/release/libpcap-1.8.1.tar.gz wget http://www.tcpdump.org/r…

神經網絡中torch.nn的使用

卷積層 通過卷積核(濾波器)在輸入數據上滑動,卷積層能夠自動檢測和提取局部特征,如邊緣、紋理、顏色等。不同的卷積核可以捕捉不同類型的特征。 nn.conv2d() in_channels:輸入的通道數,彩色圖片一般為3通道 out_c…

在MATLAB中使用GPU加速計算及多GPU配置

文章目錄 在MATLAB中使用GPU加速計算及多GPU配置一、基本GPU加速使用1. 檢查GPU可用性2. 將數據傳輸到GPU3. 執行GPU計算 二、多GPU配置與使用1. 選擇特定GPU設備2. 并行計算工具箱中的多GPU支持3. 數據并行處理(適用于深度學習) 三、高級技巧1. 異步計算…

【unitrix】 4.12 通用2D仿射變換矩陣(matrix/types.rs)

一、源碼 這段代碼定義了一個通用的2D仿射變換矩陣結構,可用于表示二維空間中的各種線性變換。 /// 通用2D仿射變換矩陣(元素僅需實現Copy trait) /// /// 該矩陣可用于表示二維空間中的任意仿射變換,支持以下應用場景&#xff…

android RecyclerView隱藏整個Item后,該Item還占位留白問題

前言 android RecyclerView隱藏整個Item后,該Item還占位留白問題 思考了利用隱藏和現實來控制item 結果實現不了方案 解決方案 要依據 model 的第三個參數(布爾值)決定是否保留數據,可以通過 ?filter 高階函數結合 ?空安全操作符? 實…

地圖瓦片介紹與地圖瓦片編程下載

前沿 地圖瓦片指將一定范圍內的地圖按照一定的尺寸和格式,按縮放級別或者比例尺,切成若干行和列的正方形柵格圖片,對切片后的正方形柵格圖片被形象的稱為瓦片[。瓦片通常應用于B/S軟件架構下,瀏覽器從服務器獲取地圖數據&#xf…

手機屏亮點缺陷修復及相關液晶線路激光修復原理

摘要 手機屏亮點缺陷嚴重影響顯示品質,液晶線路短路、電壓異常是導致亮點的關鍵因素。激光修復技術憑借高能量密度與精準操控性,可有效修復液晶線路故障,消除亮點缺陷。本文分析亮點缺陷成因,深入探究液晶線路激光修復原理、工藝…

MySQL數據一鍵同步至ClickHouse數據庫

隨著數據量的爆炸式增長和業務場景的多樣化,傳統數據庫系統如MySQL雖然穩定可靠,但在海量數據分析場景下逐漸顯露出性能瓶頸。這時,ClickHouse憑借其列式存儲架構和卓越的OLAP(在線分析處理)能力脫穎而出,成…

Android中Compose常用組件以及布局使用方法

一、基礎控件詳解 1. Text - 文本控件 Text(text "Hello Compose", // 必填,顯示文本color Color.Blue, // 文字顏色fontSize 24.sp, // 字體大小(注意使用.sp單位)fontStyle FontStyle.Italic, // 字體樣式&…

SCI一區黑翅鳶優化算法+三模型光伏功率預測對比!BKA-CNN-GRU、CNN-GRU、GRU三模型多變量時間序列預測

SCI一區黑翅鳶優化算法三模型光伏功率預測對比!BKA-CNN-GRU、CNN-GRU、GRU三模型多變量時間序列預測 目錄 SCI一區黑翅鳶優化算法三模型光伏功率預測對比!BKA-CNN-GRU、CNN-GRU、GRU三模型多變量時間序列預測效果一覽基本介紹程序設計參考資料 效果一覽 …

創客匠人視角:創始人 IP 打造為何成為知識變現的核心競爭力

在互聯網流量成本高企的當下,知識變現行業正經歷從 “產品競爭” 到 “IP 競爭” 的范式遷移。創客匠人 CEO 老蔣指出,創始人 IP 已成為企業突破增長瓶頸的關鍵支點 —— 美特斯邦威創始人周成建首次直播即創下 1500 萬元成交額,印證了創始人…

類圖+案例+代碼詳解:軟件設計模式----生成器模式(建造者模式)

生成器模式(建造者模式) 把復雜對象的建造過程和表示分離,讓同樣的建造過程可以創建不同的表示。 假設你去快餐店買漢堡,漢堡由面包、肉餅、蔬菜、醬料等部分組成。 建造者模式的角色類比: 產品(Product…

UI前端與數字孿生融合探索:為智慧物流提供可視化解決方案

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在全球供應鏈數字化轉型的浪潮中,智慧物流正從概念走向落地 —— 據 MarketsandMa…

遠程辦公與協作新趨勢:從遠程桌面、VDI到邊緣計算,打造高效、安全的混合辦公環境

一、引言 隨著數字化轉型的加速,越來越多的企業開始采用遠程辦公和混合辦公模式,以提升員工的靈活性和企業的敏捷性。然而,異地辦公也帶來了諸如桌面環境不一致、安全風險增加、溝通協作效率降低等諸多挑戰。因此,如何打造一致、…

算法總結篇:二叉樹

二叉樹解題整體框架: 1、確定當前題型是做高度還是深度還是搜索樹還是其他 高度(從下往上,求根深度、高度等): 使用后序遍歷會更加簡單,遞歸方法一般需要返回值返回上級,讓上級對返回值進行判斷…

【Elasticsearch】most_fields、best_fields、cross_fields 的區別與用法

most_fields、best_fields、cross_fields 的區別與用法 1.核心區別概述2.詳細解析與用法2.1 best_fields(最佳字段匹配)2.2 most_fields(多字段匹配)2.3 cross_fields(跨字段匹配) 3.對比案例3.1 使用 best…

力扣網C語言編程題:在數組中查找目標值位置之暴力解法

一. 簡介 本文記錄一下力扣網上涉及數組的問題:排序數組中查找目標值的位置。主要以C語言實現。 二. 力扣網C語言編程題:在數組中查找目標值位置 題目:在排序數組中查找元素的第一個和最后一個位置 給你一個按照非遞減順序排列的整數數組 …

OSCP - Proving Grounds - tre

主要知識點 突破邊界的方法比較多樣觀察pspy64的檢測結果 具體步驟 依舊nmap掃描開始,開放了80,8082,22端口 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-16 03:39 UTC Nmap scan report for 192.168.56.84 Host is up (0.00083s latency). Not shown: 65532 c…

【Mars3d】支持的basemaps數組與layers數組的坐標系列舉

問題場景: basemap 是epsg4326的。,layer 圖層是 epsg 4450的。可以在一個頁面中展示嗎? 回復: 可以不同坐標系疊加,但layer 圖層是 epsg 4450的只支持arcgis動態服務,其他情況的不支持 wmts只支持3個坐標…