yolo目标追踪

目录

前言:

目的:

背景:

一、视频追踪:

二、定义全局变量和函数:

三、创建主窗口:

四、添加组件到中间容器:

五、添加高级设置区域:

六、为模型选择下拉框添加事件处理:

定义设置模型的函数:

七、运行主事件循环:

总结:


import cv2
from ultralytics import YOLO
import tkinter as tk
from tkinter import filedialog
from tkinter import ttk
from tkinter import messagebox

# 初始化模型为 None
model = None

# 定义打开视频文件的函数
def open_video():
    video_path = filedialog.askopenfilename()  # 获取用户选择的视频文件路径
    if video_path:
        try:
            cap = cv2.VideoCapture(video_path)  # 尝试打开视频
            track_video(cap)  # 调用追踪视频函数
        except Exception as e:
            messagebox.showerror("错误", f"打开视频时出错:{e}")  # 显示错误消息框

# 定义追踪视频的函数
def track_video(cap):
    """
    追踪视频的函数

    1. 当视频捕获对象 cap 打开时,进入循环。
    2. 在循环中,读取视频的下一帧。
    3. 如果读取帧时发生异常,则显示详细的错误消息框并退出循环。
    4. 如果读取到帧,则使用 model.track 进行目标追踪,并获取追踪结果 results。
    5. 使用 results[0].plot() 绘制追踪结果。
    6. 在图像窗口中显示绘制后的追踪结果。
    7. 如果用户按下 'q' 键,则退出循环。
    8. 释放视频捕获对象 cap,并销毁所有窗口。
    """
    while cap.isOpened():  # 当视频捕获对象打开时
        try:
            ret, frame = cap.read()  # 读取下一帧
        except Exception as e:
            messagebox.showerror("错误", f"读取视频帧时出错:{e}")  # 显示读取帧错误消息框
            break

        if ret:
            if model:  # 确保有模型被选择
                try:
                    results = model.track(frame, persist=True)  # 进行目标追踪
                    annotated_frame = results[0].plot()  # 获取绘制后的追踪结果
                    cv2.imshow("YOLOv8 Tracking", annotated_frame)  # 显示追踪结果
                except Exception as ex:
                    messagebox.showerror("模型错误", f"模型应用时出错:{ex}")  # 显示模型应用错误消息框
            key = cv2.waitKey(1)  # 等待按键
            if key == ord('q'):  # 如果按下 'q' 键
                break
    cap.release()  # 释放视频捕获对象
    cv2.destroyAllWindows()  # 销毁所有窗口

# 创建主窗口
root = tk.Tk()
root.geometry("800x800")  # 设置更大的窗口尺寸

# 创建顶部栏
top_bar = ttk.Frame(root, relief=tk.RAISED, borderwidth=2)
top_bar.pack(fill=tk.X)

# 创建标题标签
title_label = ttk.Label(top_bar, text="高级 YOLOv8 目标追踪系统", font=("Helvetica", 32, "bold"))
title_label.pack(side=tk.LEFT, padx=50, pady=20)

# 创建中间容器
mid_container = ttk.PanedWindow(root, orient=tk.VERTICAL)
mid_container.pack(fill=tk.BOTH, expand=True)

# 上半部分框架
upper_frame = ttk.Frame(mid_container)
mid_container.add(upper_frame)

# 创建说明标签
instruction_label = ttk.Label(upper_frame, text="在此处精心选择要追踪的视频文件", font=("Helvetica", 20), wraplength=500)
instruction_label.pack(pady=20)

# 创建视频列表框
video_listbox = tk.Listbox(upper_frame, height=5, width=40)
video_listbox.pack(pady=15)

# 创建打开视频文件的按钮
open_button = ttk.Button(upper_frame, text="智能打开视频", command&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你的名字·

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

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

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

打赏作者

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

抵扣说明:

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

余额充值