Pyside6可視化界面
安裝Pyside6
激活之前的虛擬環境yolov5
在該環境的終端輸入以下命令
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyside6
輸入where python
找到當前使用的Python的路徑
找到該路徑下的designer.exe文件(/Lib/site-packages/PySide6/designer.exe),然后發送到桌面創建快捷方式
UI設計
- 打開designer
- 選擇Main Window
- 移除菜單欄
- 拖兩個label個一個line進來
- 拖兩個button進入,并進行命名
- 調整界面,填寫兩個label里面文件,將界面調小一些
- 居中對齊,同時勾選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文件
雙擊打不開的話,把文件拖到右邊就可以打開了
然后在【工具】選項卡下的【external tools】下,點擊【PyUic】(這個名稱是你剛才自己設計的)
如果生成了相同文件名的.py文件,即說明設置成功
編寫運行程序
創建模板文件base_ui.py
import sys
import torch
from PySide6.QtGui import QPixmap, QImage
from PySide6.QtWidgets import QMainWindow, QApplication, QFileDialogfrom main_window import Ui_MainWindow #main_windows是剛才生成的ui對用的Python文件名def convert2QImage(img):height, width, channel = img.shapereturn 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 QTimerfrom main_window import Ui_MainWindow # main_windows是剛才生成的ui對用的Python文件名def convert2QImage(img):height, width, channel = img.shapereturn 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 = Noneself.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
安裝Gradio
激活之前的虛擬環境yolov5
在該環境的終端輸入以下命令
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gradio
實現
新建gradio_demo.py
文件
輸入圖片、輸出圖片、預測函數
Gradio不支持實時檢測
import torch
import gradio as grmodel = 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.45def det_image(img, conf_thres, iou_thres):model.conf = conf_thresmodel.iou = iou_thresreturn 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參數,但是運行的時候會因為網絡原因,報出下面的錯誤,可以通過提示的網址下載對應文件,重命名后放到相應的目錄下,重新運行