一、项目背景
本项目旨在创建一个综合性的视频处理工具,融合了目标检测、姿态估计和视频分割等多种计算机视觉技术。通过提供直观的用户界面,使用户能够轻松地对视频进行处理和分析,满足在监控、视频内容创作、科研等领域对视频深入理解和处理的需求。
二、项目目的
目的在于创建一个基于 PyQt5 的图形用户界面(GUI)应用程序,能够方便地打开视频文件,并提供了三种主要的处理功能:追踪、姿态估计和分割。用户可以通过界面上的按钮选择所需的操作,并从预定义的模型选项中选择合适的模型进行处理。整个应用旨在为用户提供一个直观、易用的视频处理工具,使其能够在一个界面中完成多种与计算机视觉相关的任务,而无需复杂的命令行操作或专业知识。同时,通过实时显示处理后的视频帧,让用户能够直观地看到处理效果。
三、代码概述
这段代码主要使用了 Python 的多个库和模块,包括 os
、sys
、cv2
用于处理文件和图像操作,PyQt5
用于构建图形用户界面(GUI),以及 ultralytics
中的 YOLO
模型进行目标检测等任务。
四、关键代码解析
1.模型选项的定义:
这部分定义了不同任务所对应的模型路径,为后续根据用户选择加载模型提供了基础。
# 定义模型选择的选项
model_options = {
"检测模型": "yolov8n.pt",
"姿态估计模型": "yolov8n-pose.pt",
"分割模型": "yolov8n-seg.pt"
2.MainWindow
类的构造函数:
这里完成了主窗口的初始化工作,包括窗口属性设置、布局安排、按钮创建以及与各种操作对应的事件关联
class MainWindow(QMainWindow):
def __init__(self):
3.打开视频的相关办法:
def open_video(self):
"""
打开视频文件的方法
- 弹出文件选择对话框,获取用户选择的视频文件路径
- 如果未选择文件,弹出错误提示框并返回
- 尝试使用 OpenCV 打开选择的视频文件
- 如果打开成功,启用相关操作按钮,并调用显示视频的方法
- 如果打开失败,弹出错误提示框
"""
video_path, _ = QFileDialog.getOpenFileName(self, "选择视频文件", "", "Video Files (*.mp4 *.avi)")
if not video_path:
QMessageBox.warning(self, "错误", "未选择视频文件")
return
try:
self.cap = cv2.VideoCapture(video_path)
self.start_tracking_button.setEnabled(True)
self.start_estimation_button.setEnabled(True)
self.start_segmentation_button.setEnabled(True)
self.show_video()
except:
QMessageBox.warning(self, "错误", "视频文件错误")
4.各种任务的开始和执行方法:
def start_tracking(self):
"""
开始追踪的方法
- 如果视频捕获对象存在
- 设置追踪标志为 `True`,禁用开始追踪按钮,启用结束追踪按钮
- 根据选择的模型选项获取模型路径并加载模型
- 调用追踪视频的方法
"""
if self.cap is not None:
self.is_tracking = True
self.start_tracking_button.setEnabled(False)
self.stop_tracking_button.setEnabled(True)
selected_option = self.model_combobox.currentText()
model_path = model_options[selected_option]
# 加载模型
self.model = YOLO(model_path, task='track')
self.track_video(self.cap)