PyQT显示Yolo处理结果——以Yolov8为例

1.教程:YOLO数据处理 界面程序 - 白月黑羽 (byhy.net)

YOLO+PyQt 图形界面程序_哔哩哔哩_bilibili

与上文相似,只是对pyside2中部分代码进行修改,适应PyQt6标准,详情可见白月黑羽教程

导包

from PyQt6 import QtWidgets, QtCore, QtGui
import cv2, os, time
from threading import Thread, Lock
import sys

os.environ['YOLO_VERBOSE'] = 'False'
from ultralytics import YOLO

定义主窗口实类

构造初始方法

    def __init__(self):
        super().__init__()
        self.setupUI()# 定义UI界面,

        self.camBtn.clicked.connect(self.startCamera)
        self.stopBtn.clicked.connect(self.stop)# 链接按钮与功能

        self.timer_camera = QtCore.QTimer()
        self.timer_camera.timeout.connect(self.show_camera)# 摄像头定时器初始化

        self.model = YOLO('yolov8n.pt')# 此处加载yolo模型,如果感觉太大可以用s.tiny

        self.frameToAnalyze = [] #用于存储从摄像头捕获到的待处理图像帧
        self.frameLock = Lock()  # 用于线程安全访问帧列表

        self.stopProcessing = False # 用于控制分析线程的运行状态

        self.analysis_thread = Thread(target=self.frameAnalyzeThreadFunc, daemon=True)
        self.analysis_thread.start()

构建UI的函数不再赘述,和PyQt构建UI界面并调取摄像头一文中一致

startCamera和stop同上

    def frameAnalyzeThreadFunc(self):# 用于后台处理从摄像头捕获的图像帧
        while not self.stopProcessing:
            with self.frameLock:
                if not self.frameToAnalyze:
                    time.sleep(0.01)
                    continue

                frame = self.frameToAnalyze.pop(0)# 先进先出处理帧

            try:
                results = self.model(frame)[0]
                img = results.plot(line_width=1)

                qImage = QtGui.QImage(img.data, img.shape[1], img.shape[0], QtGui.QImage.Format.Format_RGB888)
                self.label_treated.setPixmap(QtGui.QPixmap.fromImage(qImage))
            except Exception as e:
                print(f"Error processing frame: {e}")

            time.sleep(0.1)# 此处也可以不休眠,要保证你的设备有对应的推理速度
    def stop(self):
        self.timer_camera.stop()
        if hasattr(self, 'cap'):
            self.cap.release()

        self.label_ori_video.clear()
        self.label_treated.clear()

        with self.frameLock:
            self.frameToAnalyze.clear()

    def closeEvent(self, event):
        self.stopProcessing = True
        if self.analysis_thread.is_alive():
            self.analysis_thread.join()
        self.stop()
        event.accept()

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于YOLOv8+pyqt5实现的过马路玩手机打电话检测告警系统源码(GUI界面+数据集+模型+评估曲线+部署说明) 检测斑马线、玩手机、打电话、行人、车辆、其他。简易的GUI界面,含有训练好的模型、评估指标曲线、数据集、详细部署操作文档,有问题可以私信留言。 以下内容为项目部署详细过程和说明 1、项目代码分为两部分 main_gui_code和ultralytics,其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.py208行,修改为的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、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值