YOLOv8无人机可视化界面开发

仅需在源码中添加一个py文件,就可实现无人机图像视频的可视化检测
 

所需环境:YOLO适配环境,安装PYQT5工具
 

安装pyqt5

进入终端进入环境输入
 

pip install PyQt5

再安装pyqt5的适配工具
 

pip install pyqt5-tools

安装成功后,再YOLOv8项目中,新建一个pyqt.py文件
将下面内容进行复制粘贴进去
 

import sys
import cv2
import numpy as np
import torch
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QLabel,
                             QScrollArea, QFileDialog, QMessageBox, QHBoxLayout,
                             QAction, QToolBar, QPushButton, QProgressBar,
                             QComboBox, QVBoxLayout, QSlider)
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtCore import Qt, QThread, pyqtSignal, pyqtSlot,QTimer
from ultralytics import YOLO


class VideoThread(QThread):
    change_pixmap_signal = pyqtSignal(np.ndarray)
    finished_signal = pyqtSignal()
    progress_updated = pyqtSignal(int)

    def __init__(self, model, video_path, save_path=None, device='cpu',iou=0.7):
        super().__init__()
        self.model = model
        self.video_path = video_path
        self.save_path = save_path
        self.device = device
        self.iou = iou
        self._run_flag = True
        self._pause_flag = False
        self.total_frames = 0

    def run(self):
        cap = cv2.VideoCapture(self.video_path)
        if not cap.isOpened():
            self.finished_signal.emit()
            return

        self.total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
        frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
        fps = cap.get(cv2.CAP_PROP_FPS)

        self.progress_updated.emit(0)

        if self.save_path:
            fourcc = cv2.VideoWriter_fourcc(*'mp4v')
            self.out = cv2.VideoWriter(self.save_path, fourcc, fps,
                                       (frame_width, frame_height))

        current_frame = 0
        while self._run_flag and cap.isOpened():
            if not self._pause_flag:
                ret, frame = cap.read()
                if not ret:
                    break

                current_frame += 1
                progress = int((current_frame / self.total_frames) * 100) if self.total_frames > 0 else 0
                self.progress_updated.emit(progress)

                # 使用指定设备进行预测
                results = self.model.predict(frame, device=self.device,iou=self.iou)
                annotated_frame = results[0].plot()

                self.change_pixmap_signal.emit(annotated_frame)

                if self.save_path:
                    self.out.write(annotated_frame)

        cap.release()
        if self.save_path:
            self.out.release()
        self.finished_signal.emit()

    def pause(self):

你可能感兴趣的:(目标检测,YOLO,python,开发语言)