基于YOLOv8的行人车辆识别系统,附代码

具体介绍:
软件:Pycharm+Anaconda
环境:python=3.9 opencv PyQt5 torch1.9

文件:环境、UI、模型训练文件,环境配置文档,测试图片视频,训练、测试及界面代码。
功能:基于深度学习的行人车辆检测计数系统,pyqt界面。能检测图像、视频并保存结果,展示目标位置、置信度等信息。可检测目标数目,支持摄像头实时检测、展示、记录与保存,能切换目标查看位置,提供数据集和训练代码用于重新训练。
在这里插入图片描述

基于YOLOv8的行人车辆识别系统可以高效地从图像或视频中检测出行人和车辆。下面将提供一个完整的指南,包括如何设置环境、加载模型以及使用YOLOv8进行行人和车辆的识别,并结合PyQt5创建一个简单的用户界面用于展示检测结果。

环境准备

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

pip install ultralytics opencv-python pyqt5 numpy matplotlib

加载模型并进行预测

接下来,我们将创建一个简单的应用程序,允许用户上传图片,并使用YOLOv8模型来检测行人和车辆。
在这里插入图片描述

示例代码:行人车辆识别系统
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 PedestrianVehicleDetectionApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("行人车辆识别系统 - YOLOv8")
        self.setGeometry(100, 100, 800, 600)

        # 加载YOLOv8模型
        self.model = YOLO('yolov8n.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 = PedestrianVehicleDetectionApp()
    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初始化部分添加一个按钮来触发这个方法:

camera_button = QPushButton("开启摄像头检测", self)
camera_button.clicked.connect(self.start_camera)
layout.addWidget(camera_button)

总结

通过上述步骤,我们创建了一个基本的行人车辆识别系统,它可以对上传的图片进行分析,并使用YOLOv8模型检测其中的行人和车辆。此外,还提供了扩展到实时视频检测的功能。根据具体需求,你可以进一步优化和扩展这个系统,例如加入更多种类的对象识别、提高检测精度、优化性能等。这对于智能交通系统、安防监控等领域具有重要意义。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐