基于YOLOv8深度学习的驾驶员行为检测系统

基于深度学习YOLOv8+Pyqt5的驾驶员行为检测识别系统
(完整源码源文件+已标注的数据集+训练好的模型)
识别分类:“睁眼”,“闭眼”,“香烟”,“电话”,“安全带”

Python + PyQt5可视化界面

可对图片,视频,摄像头进行识别

在这里插入图片描述

构建一个基于YOLOv8的驾驶员行为检测系统,可以用于识别驾驶员的行为,比如打电话、未系安全带、抽烟等不安全行为。以下是一个简单的指南,包括环境配置、模型训练(或使用预训练模型)、以及如何结合PyQt5创建用户界面来实现该系统。

环境准备

首先,确保你的环境中安装了必要的库:

pip install ultralytics opencv-python pyqt5 numpy matplotlib

数据集与模型

对于特定于驾驶员行为的数据集,你可能需要自己收集并标注数据,或者寻找公开可用的相关数据集。假设你已经有了一个适用于YOLOv8格式的数据集,下面将介绍如何利用YOLOv8进行训练和预测。

模型训练(可选)

如果你已经有了一定规模的标记数据集,你可以使用YOLOv8进行训练。以下是基本命令示例:

yolo task=detect mode=train model=yolov8n.pt data=path/to/your/driver_behavior.yaml epochs=100 imgsz=640

请确保driver_behavior.yaml文件正确配置了训练和验证数据路径、类别数量及名称。

创建GUI应用程序

接下来,我们将创建一个简单的PyQt5 GUI应用,它允许用户上传图片,并使用YOLOv8模型检测驾驶员的行为。
在这里插入图片描述

示例代码:GUI 应用程序主窗口
import sys
import cv2
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QFileDialog, QVBoxLayout, QWidget
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtCore import Qt
from ultralytics import YOLO


class DriverBehaviorApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("驾驶员行为检测系统 - YOLOv8")
        self.setGeometry(100, 100, 800, 600)

        # 加载YOLOv8模型
        self.model = YOLO('best.pt')  # 替换为你的模型路径

        self.initUI()

    def initUI(self):
        layout = QVBoxLayout()

        self.image_label = QLabel(self)
        self.image_label.setAlignment(Qt.AlignCenter)
        self.image_label.setStyleSheet("border: 1px solid black;")
        self.image_label.setFixedSize(760, 500)
        layout.addWidget(self.image_label)

        upload_button = QPushButton("上传图片", self)
        upload_button.clicked.connect(self.upload_image)
        layout.addWidget(upload_button)

        self.setLayout(layout)

        container = QWidget()
        container.setLayout(layout)
        self.setCentralWidget(container)

    def upload_image(self):
        file_name, _ = QFileDialog.getOpenFileName(self, "选择图片", "", "Image Files (*.png *.jpg *.jpeg)")
        if file_name:
            self.detect_and_show(file_name)

    def detect_and_show(self, image_path):
        results = self.model(image_path)
        annotated_frame = results[0].plot()  # 获取绘制了边界框的图像

        # 将图像转换为QPixmap显示
        rgb_image = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)
        h, w, ch = rgb_image.shape
        bytes_per_line = ch * w
        qt_image = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888)
        pixmap = QPixmap.fromImage(qt_image).scaled(
            self.image_label.width(), self.image_label.height(), Qt.KeepAspectRatio
        )
        self.image_label.setPixmap(pixmap)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = DriverBehaviorApp()
    window.show()
    sys.exit(app.exec_())

实时视频检测(可选功能)

如果你想实现从摄像头获取实时视频流并进行行为检测,可以在上述代码中添加如下方法,并在界面上增加相应的按钮来启动和停止视频捕捉。

def start_camera(self):
    cap = cv2.VideoCapture(0)
    while True:
        ret, frame = cap.read()
        if not ret:
            break

        results = self.model(frame)
        annotated_frame = results[0].plot()

        cv2.imshow("Real-time Detection", annotated_frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

然后,在GUI初始化部分添加一个按钮来触发这个方法。

总结

通过上述步骤,我们创建了一个基本的驾驶员行为检测系统,它可以对上传的图片进行分析,并使用YOLOv8模型检测其中的驾驶员行为。此外,还提供了扩展到实时视频检测的功能。根据具体需求,你可以进一步优化和扩展这个系统,例如加入更多种类的行为识别、提高检测精度、优化性能等。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐