通用Yolov8检测GUI,直接替换权重即可

本文介绍了如何利用Python、tkinter和OpenCV库开发一个用户友好的目标检测GUI,用户可以上传图片,展示检测结果。包括了模型加载、图像浏览、对象检测等关键步骤。
摘要由CSDN通过智能技术生成

前言

  本文将介绍如何使用 Python 和 tkinter 构建一个简单的目标检测 GUI,以便用户可以上传图像并查看检测结果。即插即用!非常好用!

准备工作

首先,需要安装必要的库:

  tkinter:用于创建 GUI
  cv2:OpenCV 库,用于图像处理
  PIL:Python Imaging Library,用于图像操作
  ultralytics:用于目标检测模型

完整代码

init(self, root)

def __init__(self, root):
        self.root = root
        self.root.title("检测 GUI")
        
        # 加载模型
        start_load_time = time.time()
        self.model = YOLO(r'D:\kehu\cheliang\ultralytics-main\CL\yolov8s.pt') ###这里填写自己的pt权重即可
        end_load_time = time.time()
        print(f"加载模型时间:{end_load_time - start_load_time:.2f}秒")

        self.create_widgets()

create_widgets(self)

def create_widgets(self):
        self.label = tk.Label(self.root, text="选择照片:")
        self.label.pack()

        self.image_path = tk.StringVar()
        self.image_entry = tk.Entry(self.root, textvariable=self.image_path, width=50)
        self.image_entry.pack()

        self.browse_button = tk.Button(self.root, text="上传", command=self.browse_image)
        self.browse_button.pack()

        self.detect_button = tk.Button(self.root, text="检测目标", command=self.detect_objects)
        self.detect_button.pack()

        self.canvas = tk.Canvas(self.root, width=640, height=480)
        self.canvas.pack()

browse_image

def browse_image(self):
        file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg *.jpeg *.png")])
        if file_path:
            self.image_path.set(file_path)
            self.display_image(file_path)


display_image

image = Image.open(image_path)
        image = image.resize((640, 480), Image.LANCZOS)  # 或者使用 resample=Image.LANCZOS
        self.photo = ImageTk.PhotoImage(image)
        self.canvas.create_image(0, 0, anchor=tk.NW, image=self.photo)


detect_objects

def detect_objects(self):
        start_inference_time = time.time()

        image_path = self.image_path.get()
        if not image_path:
            messagebox.showerror("Error", "Please select an image.")
            return

        results = self.model(image_path, save=True, conf=0.4, iou=0.4, imgsz=640, save_txt=True, device='cpu')

        end_inference_time = time.time()
        print(f"推理图片时间:{end_inference_time - start_inference_time:.2f}秒")

        image = cv2.imread(image_path)
        start_show_time =time.time()
        for result in results:
            boxes = result.boxes
            for box in boxes:
                xyxy = box.xyxy.squeeze().tolist()
                x1, y1, x2, y2 = map(int, xyxy)
                cls = int(box.cls)
                conf = float(box.conf)
                label = f"{result.names[cls]}, {conf:.2f}"
                cv2.rectangle(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
                cv2.putText(image, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0, 0, 255), 2)
        end_show_time =time.time()
        print(f"显示图片时间:{end_show_time - start_show_time:.2f}秒")
        start_save_time = time.time()
        result_image_path = r"result.jpg"
        cv2.imwrite(result_image_path, image)
        end_save_time = time.time()
        print(f"保存图片时间:{end_save_time - start_save_time:.2f}秒")

        self.display_image(result_image_path)
        messagebox.showinfo("检测完成", f"结果保存在 {result_image_path}\n用时:推理图片:{end_inference_time - start_inference_time:.2f}秒,保存图片:{end_save_time - start_save_time:.2f}秒")

完整代码下载链接

免费!免费!免费!通用Yolov8检测GUI,直接替换权重即可
在这里插入图片描述

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小张Tt

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

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

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

打赏作者

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

抵扣说明:

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

余额充值