YOLOv5 ビジュアル インターフェイス

Pyside6 ビジュアル インターフェイス

Pyside6 をインストールする

以前の仮想環境をアクティブ化するyolov5

この環境のターミナルで以下のコマンドを入力します。

画像-20230804130702828

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyside6

画像-20230804130800817

where python現在使用している Python を見つけるためのパスを入力します

画像-20230804130822697

このパス (/Lib/site-packages/PySide6/designer.exe) で design.exe ファイルを見つけ、デスクトップに送信してショートカットを作成します。

画像-20230804131040967

UIデザイン

  1. オープンデザイナー
  2. メインウィンドウを選択

画像-20230804135928424

  1. メニューバーを削除する

画像-20230804140001249

  1. 2 つのラベルと線をドラッグします。

画像-20230804140218860

  1. 2 つのボタンをそれらにドラッグし、名前を付けます

画像-20230804140548127

  1. インターフェイスを調整し、2 つのラベルにファイルを入力し、インターフェイスを小さくします

画像-20230804140817179

  1. 中央に揃えてscaledContentsにチェックを入れる

画像-20230804140925757

  1. 要素名の変更

画像-20230804141119743

  1. Ctrl+S 保存、前のトレーニング データ セットのファイルに保存

画像-20230804141230616

Pyside6-uic ツールをセットアップする

  1. 現在の仮想環境の Python パスでScriptsフォルダーを開いて見つけ、pyside6-uic.exe現在のパスを覚えておきます

画像-20230804133419243

  1. ツールの作成

画像-20230804133534319

名称:PyUic(可自己定义)
程序:E:\kaifa\Anaconda3\envs\yolov5\Scripts\pyside6-uic.exe
实参:$FileName$ -o $FileNameWithoutExtension$.py
工作目录: $FileDir$
  1. このツールを使用してください

まず、pycharmで生成されたばかりのuiファイルを開きます

ダブルクリックしても開けない場合は、ファイルを右にドラッグして開きます。

画像-20230804141619914

次に、[ツール] タブの [外部ツール] で [PyUic] をクリックします (この名前は今あなたがデザインしたものです)

画像-20230804133624645

同じファイル名の .py ファイルが生成されれば設定成功です。

画像-20230804141836515

実行可能なプログラムを作成する

テンプレートファイルbase_ui.pyを作成する

import sys
import torch
from PySide6.QtGui import QPixmap, QImage
from PySide6.QtWidgets import QMainWindow, QApplication, QFileDialog

from main_window import Ui_MainWindow #main_windows是刚才生成的ui对用的Python文件名

def convert2QImage(img):
    height, width, channel = img.shape
    return QImage(img, width, height, width * channel, QImage.Format_RGB888)

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)

if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    app.exec()

コンパイルして実行すると、ポップアップ ウィンドウに成功が表示されます。

内部固有の関数のコードを作成する

説明ビデオ: YOLOv5 Pyside6 ビジュアル インターフェイス

import sys
import cv2
import torch
from PySide6.QtGui import QPixmap, QImage
from PySide6.QtWidgets import QMainWindow, QApplication, QFileDialog
from PySide6.QtCore import QTimer

from main_window import Ui_MainWindow  # main_windows是刚才生成的ui对用的Python文件名


def convert2QImage(img):
    height, width, channel = img.shape
    return QImage(img, width, height, width * channel, QImage.Format_RGB888)


class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        self.model = torch.hub.load("./", "custom", path="runs/train/exp/weights/best.pt", source="local")
        self.video = None
        self.timer = QTimer()
        self.timer.setInterval(1)
        self.bind_slots()  # 绑定槽函数

    def image_pred(self, file_path): # 图片检测
        results = self.model(file_path) 
        image = results.render()[0]
        return convert2QImage(image)

    def open_image(self): # 打开图片
        print("点击了检测图片按钮")
        self.timer.stop()  # 停止视频检测
        file_path = QFileDialog.getOpenFileName(self, dir="./data02/images/train", filter="*.jpg;*.png;*.jpeg")
        if file_path[0]:
            file_path = file_path[0]
            qimage = self.image_pred(file_path)
            self.input.setPixmap(QPixmap(file_path))
            self.output.setPixmap(QPixmap.fromImage(qimage))

    def video_pred(self):  # 视频检测
        ret, frame = self.video.read()
        if not ret:
            self.timer.stop()
        else:
            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            self.input.setPixmap(QPixmap.fromImage(convert2QImage(frame)))
            results = self.model(frame)
            image = results.render()[0]
            self.output.setPixmap(QPixmap.fromImage(convert2QImage(image)))

    def open_video(self):  # 打开视频
        print("点击了检测视频!")
        file_path = QFileDialog.getOpenFileName(self, dir="./data02", filter="*.mp4")
        if file_path[0]:
            file_path = file_path[0]
            self.video = cv2.VideoCapture(file_path)
            self.timer.start()

    def bind_slots(self):  # 绑定槽函数
        self.det_image.clicked.connect(self.open_image)
        self.det_video.clicked.connect(self.open_video)
        self.timer.timeout.connect(self.video_pred)


if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    app.exec()

Gradio は Web GUI を構築します

インストールグラジオ

以前の仮想環境をアクティブ化するyolov5

この環境のターミナルで以下のコマンドを入力します。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gradio

成し遂げる

新しいgradio_demo.pyファイルを作成する

入力画像、出力画像、予測機能

Gradio はリアルタイム検出をサポートしていません

import torch
import gradio as gr

model = torch.hub.load("./", "custom", path="runs/train/exp/weights/best.pt", source="local")

title = "基于Gradio的YOLOv5演示项目"

desc = "这是一个基于Gradio的YOLOv5演示项目,非常简洁,非常方便!"

base_conf, base_iou = 0.25, 0.45


def det_image(img, conf_thres, iou_thres):
    model.conf = conf_thres
    model.iou = iou_thres
    return model(img).render()[0]


gr.Interface(
    inputs=["image", gr.Slider(minimum=0, maximum=1, value=base_conf), gr.Slider(minimum=0, maximum=1, value=base_iou)],
    outputs=["image"],
    fn=det_image,
    title=title,
    description=desc,
    live=True,
    examples=[["./data02/images/train/30.jpg", base_conf, base_iou],
              ["./data02/images/train/60.jpg", 0.3, base_iou]]
).launch(share=True)

インターネットに公開する場合は、share=True パラメータを設定しますが、実行時に、ネットワーク上の理由により次のエラーが報告されます。プロンプトが表示された URL から対応するファイルをダウンロードし、名前を変更し、対応するファイルに配置できます。ディレクトリに移動し、再度実行します。

画像-20230804221752389

おすすめ

転載: blog.csdn.net/qq_61228493/article/details/132207890