目录
一、运行结果页面展示
二、核心功能概览
1、智能检测引擎
基于YOLOv8深度学习框架训练的专业灭火器检测模型
支持CPU推理,兼容多种视频格式(MP4/AVI/MOV)
实时显示检测框与置信度(可手动关闭)
2、专业数据看板
模型验证指标展示(mAP@50、精确率、召回率等)
实时处理统计(FPS、检测数、处理进度等)
3、智能保存系统
自动保存模式:默认存储至预设工程目录(带时间戳命名)
手动保存模式:可自定义保存路径与视频格式(MP4/AVI)
智能编码器选择:自动匹配文件扩展名选择最佳编码方案
三、使用说明
1、自定义路径:
# 修改检测系统名称
# 修改模型路径
# 修改默认保存地址
2、点击【导入视频】选择待检测视频文件(支持拖放)
3、通过复选框选择是否:
显示检测置信度(默认开启)
自动保存结果(默认开启)
4、点击【开始检测】启动处理流程————————————————————————————————————————
可选操作:
点击【暂停】临时中断处理
点击【保存结果】手动指定存储路径
处理完成后:
自动保存模式下结果存至D:/AAAAdata/.../predict/
控制台输出最终保存路径
四、完整代码
# 导入 Tkinter 库并重命名为 TK(用于创建GUI界面)
import tkinter as tk
# 从 Tkinter 导入 ttk 组件(提供现代风格控件)和文件对话框(用于文件选择)
from tkinter import ttk, filedialog
# 导入 OpenCV 库(用于视频捕获、处理和保存)
import cv2
# 从 PIL 导入图像处理模块(用于在Tkinter显示图像)
from PIL import Image, ImageTk
# 导入 threading 模块(实现多线程防止界面冻结)
import threading
# 导入 time 模块(用于时间计算和生成时间戳)
import time
# 从 ultralytics 导入 YOLO 模型(目标检测核心算法)
from ultralytics import YOLO
# 导入 numpy 库(数值计算,OpenCV处理需要)
import numpy as np
# 导入 os 模块(处理文件路径和目录操作)
import os
class FireExtinguisherDetectorApp:
def __init__(self, root):
"""初始化应用程序主类"""
self.root = root
self.root.title("灭火器检测系统 - 增强版") # 设置窗口标题
# ================= 模型加载部分 =================
self.model = YOLO(r"E:\weights\best.pt") # 加载训练好的YOLOv8模型
self.val_metrics = self.load_validation_metrics() # 加载模型验证指标
# =============== 视频处理相关变量 ================
self.video_path = "" # 当前处理的视频文件路径
self.cap = None # OpenCV视频捕获对象
self.is_playing = False # 视频播放状态标志
self.is_paused = False # 视频暂停状态标志
self.delay = 10 # 视频帧显示延迟(毫秒)
# ================ 统计相关变量 =================
self.total_frames = 0 # 视频总帧数
self.total_detections = 0 # 累计检测到的灭火器总数
self.frame_count = 0 # 已处理帧数计数器
self.start_time = 0 # 检测开始时间戳
self.fps = 0 # 实时计算的处理帧率
# =============== 显示控制相关变量 ===============
self.show_conf = tk.BooleanVar(value=True) # 是否显示置信度的控制变量
self.save_enabled = tk.BooleanVar(value=True) # 是否启用自动保存的控制变量
self.save_path = None # 用户指定的保存路径
self.video_writer = None # OpenCV视频写入对象
self.default_save_dir = "D:/AAAAdata/extinguisher2025python/runs/detect/predict/" # 默认保存目录
# ================ 界面初始化 ==================
self.create_widgets() # 创建GUI组件
self.update_metrics_display()