Pyside6 ビジュアル インターフェイス
Pyside6 をインストールする
以前の仮想環境をアクティブ化するyolov5
この環境のターミナルで以下のコマンドを入力します。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyside6
where python
現在使用している Python を見つけるためのパスを入力します
このパス (/Lib/site-packages/PySide6/designer.exe) で design.exe ファイルを見つけ、デスクトップに送信してショートカットを作成します。
UIデザイン
- オープンデザイナー
- メインウィンドウを選択
- メニューバーを削除する
- 2 つのラベルと線をドラッグします。
- 2 つのボタンをそれらにドラッグし、名前を付けます
- インターフェイスを調整し、2 つのラベルにファイルを入力し、インターフェイスを小さくします
- 中央に揃えてscaledContentsにチェックを入れる
- 要素名の変更
- Ctrl+S 保存、前のトレーニング データ セットのファイルに保存
Pyside6-uic ツールをセットアップする
- 現在の仮想環境の Python パスで
Scripts
フォルダーを開いて見つけ、pyside6-uic.exe
現在のパスを覚えておきます
- ツールの作成
名称:PyUic(可自己定义)
程序:E:\kaifa\Anaconda3\envs\yolov5\Scripts\pyside6-uic.exe
实参:$FileName$ -o $FileNameWithoutExtension$.py
工作目录: $FileDir$
- このツールを使用してください
まず、pycharmで生成されたばかりのuiファイルを開きます
ダブルクリックしても開けない場合は、ファイルを右にドラッグして開きます。
次に、[ツール] タブの [外部ツール] で [PyUic] をクリックします (この名前は今あなたがデザインしたものです)
同じファイル名の .py ファイルが生成されれば設定成功です。
実行可能なプログラムを作成する
テンプレートファイル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 から対応するファイルをダウンロードし、名前を変更し、対応するファイルに配置できます。ディレクトリに移動し、再度実行します。