目标检测:YOLOv8 + PySide6 可视化界面设计步骤

1. 安装PySide6

# 安装pyqt5
pip install PySide6

2. 具体实现

2.1 设计界面

        使用PySide6中自带的工具设计UI界面,并通过插件将.ui文件转换为.py文件(这样才可以进行顺利展示)。

2.2 YOLOv8权重预测

        编写交互文件,绑定检测事件,通过使用YOLOv8模型权重进行预测,得到结果并渲染到UI界面。

3. 使用gradio部署

3.1 在本地安装gradio

pip install gradio

3.2 在项目中创建app.py

# 1.案例
import gradio as gr

def greet(name):
    return "Hello" + name + "!"

iface = gr.Interface(dn=greet, inputs="text", outputs="text")
iface.launch()

# 2. import gradio as gr
from PIL import Image
from ultralytics import YOLO

def predict_image(img):
    # 转换PIL图像为RGB
    if img.mode != "RGB":
        img = img.convert('RGB')

    # 使用YOLOv8模型进行预测
    model = YOLO('runs/detect/train853/weights/best.pt')
    results = model.predict(source=img, conf=0.25)
    im_array = results[0].plot()

    # 转换结果为PIL图像并返回
    pil_img = Image.fromarray(im_array[..., ::-1])
    return pil_img

# 创建Gradio界面
iface = gr.Interface(
    fn=predict_image,
    inputs=gr.Image(type='pil'),
    outputs='image',
    examples=["./image/T0001_XM_20110807100242_01.jpg"],
    title="Real-Time Object Detection with YOLOv8",
    description="Upload an image to detect objects using Yolov8"
)

# 启动界面
iface.launch()

3.3 解决:ImportError: cannot import name 'soft_unicode' from 'markupsafe' (C:\ProgramData\Anaconda3\lib\site-packages\markupsafe\__init__.py)

# 原来
Name: MarkupSafe
Version: 2.1.3

# 降低MarkupSafe版本
python -m pip install markupsafe==2.0.1

3.4 ImportError: Pandas requires version '3.0.0' or newer of 'jinja2' (version '2.11.2' currently installed).

# 升级pandas版本
原有版本:2.0.3
升级版本:2.1.4

# 升级jinjia2版本
原有版本:2.11.2
升级最新版本:3.1.2

python -m pip install jinja2==3.1.2

3.5 注意:需要将训练好的模型部署为中间格式,因此安装onnx

pip install onnxruntime-gpu

# 验证安装成功
import onnxruntime

print(onnxruntime.get_device())

3.6 pytroch转onnx模型

yolo export model=./yolov8n.pt format=onnx

# 或者
from ultralytics import YOLO
# 载入模型
model = YOLO("./yolov8n.pt")
# 导出模型
model.export(format='onnx')

3.7 验证onnx模型导出成功

import onnx

# 读取onnx模型
onnx_model = onnx.load('./yolov8n.onnx')

# 检查模型格式是否正确
onnx.checker.check_model(onnx_model)
print("无报错,转换成功")

3.8 使用Netron可视化onnx模型结构

3.9 使用onnxsim优化onnx模型

3.10 onnx模型推理预测:和.pth原生模型预测完全相同,只需要把model参数换成.onnx模型即可。

# 单张图像
yolo predict pose model=./yolov8n.onnx source=image/train01.jpg

# 视频
yolo predict pose model=./yolov8n.onnx source=videos/train02.mp4

# 摄像头
yolo predict pose model=./yolov8n.onnx source=0 show verbose=False


# 或者使用Python API
from ultralytics import YOLO
model = YOLO('./yolov8n.onnx', task='pose')

# 预测图像
results = model.predict('images/train01.jpg', task='pose', save=True)

3.11 ONNX Runtime推理预测-单张图像

import cv2
import numpy as np 
from PTL import Image

import onnxruntime

import torch

# 有GPU
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')

# 创建onnx runtime的InferenceSession
session = onnxruntime.InferenceSession("./yolov8n.onnx", None)

 3.12 在实际应用中,可能涉及到对模型的调参优化,找到最优的超参数

 yolov8提供了两种不同方式的超参数调优方式(两种方式都存在错误,在github上也有相应的解决,但是并不能帮助到我,后续会进行修改)

1. 使用原有的方法tune()

注意:目前遇到的问题是:UnboundLocalError: local variable 'ckpt_file' referenced before assignment

2. 使用ray tune的方式

注意:目前遇到的问题是:core_worker.cc:201: Failed to register worker 01000000ffffffffffffffffffffffffffffffffffffffffffffffff to Raylet. IOError: [RayletClient] Unable to register worker with raylet. Unknown error

  • 13
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值