Pyside6可視化界面
安裝Pyside6
激活之前的虛擬環(huán)境yolov5
在該環(huán)境的終端輸入以下命令
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyside6
輸入where python
找到當(dāng)前使用的Python的路徑
找到該路徑下的designer.exe文件(/Lib/site-packages/PySide6/designer.exe),然后發(fā)送到桌面創(chuàng)建快捷方式
UI設(shè)計(jì)
- 打開designer
- 選擇Main Window
- 移除菜單欄
- 拖兩個(gè)label個(gè)一個(gè)line進(jìn)來
- 拖兩個(gè)button進(jìn)入,并進(jìn)行命名
- 調(diào)整界面,填寫兩個(gè)label里面文件,將界面調(diào)小一些
- 居中對齊,同時(shí)勾選scaledContents
- 元素名稱更改
- Ctrl+S保存,保存到上一部分訓(xùn)練數(shù)據(jù)集的文件內(nèi)
設(shè)置Pyside6-uic 工具
- 在當(dāng)前虛擬環(huán)境的Python路徑下,打開
Scripts
文件夾夾,找到pyside6-uic.exe
,記住當(dāng)前路徑
- 創(chuàng)建工具
名稱:PyUic(可自己定義)
程序:E:\kaifa\Anaconda3\envs\yolov5\Scripts\pyside6-uic.exe
實(shí)參:$FileName$ -o $FileNameWithoutExtension$.py
工作目錄: $FileDir$
- 使用該工具
先在pycharm中打開剛才生成的ui文件
雙擊打不開的話,把文件拖到右邊就可以打開了
然后在【工具】選項(xiàng)卡下的【external tools】下,點(diǎn)擊【PyUic】(這個(gè)名稱是你剛才自己設(shè)計(jì)的)
如果生成了相同文件名的.py文件,即說明設(shè)置成功
編寫運(yùn)行程序
創(chuàng)建模板文件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()
編譯運(yùn)行,彈出窗口說明成功
編寫內(nèi)部具體功能的代碼
講解視頻: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() # 綁定槽函數(shù)
def image_pred(self, file_path): # 圖片檢測
results = self.model(file_path)
image = results.render()[0]
return convert2QImage(image)
def open_image(self): # 打開圖片
print("點(diǎn)擊了檢測圖片按鈕")
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("點(diǎn)擊了檢測視頻!")
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): # 綁定槽函數(shù)
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
安裝Gradio
激活之前的虛擬環(huán)境yolov5
在該環(huán)境的終端輸入以下命令
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gradio
實(shí)現(xiàn)
新建gradio_demo.py
文件
輸入圖片、輸出圖片、預(yù)測函數(shù)
Gradio不支持實(shí)時(shí)檢測
import torch
import gradio as gr
model = torch.hub.load("./", "custom", path="runs/train/exp/weights/best.pt", source="local")
title = "基于Gradio的YOLOv5演示項(xiàng)目"
desc = "這是一個(gè)基于Gradio的YOLOv5演示項(xiàng)目,非常簡潔,非常方便!"
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)
如果想發(fā)布到網(wǎng)上,設(shè)置share=True參數(shù),但是運(yùn)行的時(shí)候會(huì)因?yàn)榫W(wǎng)絡(luò)原因,報(bào)出下面的錯(cuò)誤,可以通過提示的網(wǎng)址下載對應(yīng)文件,重命名后放到相應(yīng)的目錄下,重新運(yùn)行文章來源:http://www.zghlxwxcb.cn/news/detail-645810.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-645810.html
到了這里,關(guān)于YOLOv5可視化界面的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!