手把手教你完成YOLOv8 PyQt5和PySide6目标检测界面搭建,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

摘要

目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。YOLO系列模型由于其高效的检测速度和较高的准确率,成为目标检测任务的首选算法之一。本项目结合 YOLOv8 与 PyQt5 或者 PySide6,我推荐使用 PySide6,构建了一个图形化界面,便于用户进行目标检测的操作和展示,实现对图片、视频和摄像头的实时目标检测,不仅可以用于大论文的工作量展示,还可以作为毕业设计。支持目标检测、目标分割等模型进来检测。目前还更新了后台管理系统
✔️第五版代码,在第四版代码上新增管理员后台系统,后台管理系统功能有:管理员登录模块,用户管理模块,管理员个人中心模块等
在这里插入图片描述
在这里插入图片描述

✔️第四版代码,优化内容:美化界面、AI 问答界面、退出登录、界面保存登录状态、个人信息修改、密码修改、头像修改、注册界面新增上传头像等功能,前端界面代码和后端代码使用 PySide6 框架,界面如下:
在这里插入图片描述
在这里插入图片描述

✔️第三版代码,在第二版代码上,新增登录和注册功能,使用的是MySQL数据库,界面如下:

在这里插入图片描述
✔️第二版代码,优化界面版如下:
在这里插入图片描述

第一版代码,界面展示如下:
在这里插入图片描述


基于YOLOv8+pyqt5实现的过马路玩手机打电话检测告警系统源码(GUI界面+数据集+模型+评估曲线+部署说明) 检测斑马线、玩手机、打电话、行人、车辆、其他。简易的GUI界面,含有训练好的模型、评估指标曲线、数据集、详细部署操作文档,有问题可以私信留言。 以下内容为项目部署详细过程说明 1、项目代码分为两部分 main_gui_codeultralytics,其中main_gui_code代码包含GUI界面代码+训练好的模型+YOLOv8推理逻辑融合GUI的代码,也就是说这部分可以打GUI界面,加载模型图片、视频、视频流 进行测试。ultralytics则为YOLOv8源代码,可用来训练各种模型,当然也可以用来测试,输出结果,只不过不带GUI界面。故我们使用ultralytics来训练模型,然后拷贝模型到main_gui_code中, 进行GUI界面测试。 2、搭建环境 安装anaconda pycharm windows系统、mac系统、Linux系统都适配 在anaconda中新建一个新的envs虚拟空间(可以参考博客来),命令窗口执行:conda create -n YOLOv8-GUI python==3.8 创建完YOLOv8-GUI虚拟空间后,命令窗口执行:source activate YOLOv8-GUI 激活虚拟空间 然后就在YOLOv8-GUI虚拟空间内安装requirements.txt中的所有安装包,命令窗口执行:pip install -r requirements.txt 使用清华源安装更快 3、打GUI推理测试 当以上步骤顺利完成后,环境已经搭建完毕,下面我们尝试打GUI界面进行测试 pycharm中打整个项目,导入配置anaconda安装的YOLOv8-GUI虚拟环境(参考博客) 运行main_jiemian.py即可成功打界面,模型文件放在main_gui_code/models/文件夹,后缀为.pt。可以存放多个模型,可通过界面来选择要使用的模型 点击选择模型按钮选择pt模型,然后点击选择路径按钮,选择待测图片者视频,后点击始检测按钮,始推理测试并显示画框及得分值 4、训练模型过程 进入到\ultralytics\ultralytics\yolo\v8\detect\文件夹下,datasets即为我们准备好的数据集,训练其他模型同理。 data文件夹下的cross_line.yaml文件为数据集配置文件,博文有介绍https://blog.csdn.net/DeepLearning_?spm=1011.2415.3001.5343 train.py中208行,修改为的data = cfg.data or './cross_line.yaml' # or yolo.ClassificationDataset("mnist") 207行修改自己使用的预训练模型 若自己有显卡,修改211行,如我有四张显卡,即改成args = dict(model=model, data=data, device=”0,1,2,3“) 以上配置完成后运行train.py始训练模型,训练完毕后会在runs/detect/文件夹下生成train*文件夹,里面包含模型评估指标等 5、无GUI推理测试 训练好模型,打predict.py,修改87行,model = cfg.model or 'yolov8n.pt',把yolov8n.pt换成我们刚才训练完生成的模型路径,待测试的图片者视频存放于ultralytics\ultralytics\assets文件夹, 运行predict.py即可,检测结果会在runs/detect/train文件夹下生成。 【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。
### 关于 PyQt5YOLOv8 集成的教程 #### 使用PyQt5构建YOLOv8应用程序的关键要素 在开发结合PyQt5YOLOv8的应用程序时,主要关注点在于如何有效地将深度学习模型嵌入图形用户界面(GUI),从而实现图像视频流中的目标检测功能。此过程涉及多个方面的工作,包括但不限于环境配置、模型加载、推理执行以及结果显示。 #### 创建项目框架 为了启动这样一个项目,建议先搭建基本的文件夹结构来组织源代码其他资源。通常情况下,会有一个`main.py`作为入口脚本负责初始化GUI并管理各个组件之间的交互逻辑;另外还需要创建专门用于存放预训练权重文件(`weights`)、配置参数(`config`)等静态资源的子目录[^2]。 ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget from PyQt5.QtGui import QPixmap import torch from models.experimental import attempt_load from utils.general import non_max_suppression class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("YOLOv8 Object Detection with PyQt5") layout = QVBoxLayout() self.image_label = QLabel(self) layout.addWidget(self.image_label) button = QPushButton('Load Image', self) button.clicked.connect(self.load_image) layout.addWidget(button) container = QWidget() container.setLayout(layout) self.setCentralWidget(container) app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 上述代码片段展示了如何利用PyQt5库建立简单的窗口布局,并定义了一个按钮控件用于触发后续操作——即加载待处理图片。值得注意的是,在实际部署过程中还需引入其他必要的依赖项,比如OpenCV用于读取输入数据,而torchvision则有助于简化模型预测流程[^1]。 #### 加载YOLOv8模型 对于特定版本的YOLO系列网络而言,官方提供了多种方式获取对应的权值档案。这里假设已经下载好所需的`.pt`格式文件,则可以通过调用`attempt_load()`函数完成实例化工作: ```python device = 'cuda' if torch.cuda.is_available() else 'cpu' model_path = './weights/yolov8.pt' # Load model model = attempt_load(model_path, map_location=device).eval().half() stride = int(model.stride.max()) # Model stride imgsz = check_img_size(640, s=stride) # Check image size names = model.module.names if hasattr(model, 'module') else model.names # Get class names colors = [[random.randint(0, 255) for _ in range(3)] for _ in names] def detect(image): img = letterbox(image, new_shape=imgsz)[0] img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, HWC to CHW img = np.ascontiguousarray(img) img = torch.from_numpy(img).to(device) img = img.half() if half else img.float() # uint8 to fp16/32 img /= 255.0 # Normalize 0 - 255 to 0.0 - 1.0 pred = model(img.unsqueeze(0), augment=False)[0] det = non_max_suppression(pred, conf_thres=0.25, iou_thres=0.45, classes=None, agnostic=False) return det ``` 这段示例说明了怎样准备输入样本并通过调用已加载完毕的对象来进行前向传播计算得到终的结果列表。其中包含了对原始像素矩阵的一些常规变换步骤,确保其符合预期规格以便顺利传递给神经网络层进行解析[^3]。 #### 显示检测结果 一旦获得了由模型产生的边界框坐标集合之后,就可以进一步绘制这些信息覆盖到原图之上形成直观的效果呈现。这一步骤往往借助PIL/Pillow这类第三方工具包辅助完成,因为它们能够方便地操纵位图对象及其属性设置。 ```python from PIL import ImageDraw, ImageFont def draw_boxes(image, detections): im = Image.fromarray(cv2.cvtColor(image.copy(), cv2.COLOR_BGR2RGB)) draw = ImageDraw.Draw(im) font = ImageFont.truetype('./arial.ttf', size=round(0.7 * (im.size[1]/30))) for detection in reversed(detections): label = f'{names[int(detection[-1])]} {detection[4]:.2f}' plot_one_box(draw, tuple(detection[:4]), label=label, color=tuple(colors[int(detection[-1])])) result = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR) return result def update_display(pixmap): window.image_label.setPixmap(pixmap.scaled(window.image_label.width(), window.image_label.height())) ``` 通过以上方法可以实现在界面上动态更新显示经过标注后的视觉反馈画面。每当有新的分析任务完成后都会自动刷新视窗内的内容以反映新状态变化情况[^4]。
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挂科边缘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值