国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Yolov5(v5.0) + pyqt5界面設(shè)計(jì)

這篇具有很好參考價(jià)值的文章主要介紹了Yolov5(v5.0) + pyqt5界面設(shè)計(jì)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.下載安裝pyqt5工具包以及配置ui界面開發(fā)環(huán)境

pip install PyQt5
pip install PyQt5-tools

2.點(diǎn)擊File->Settings->External Tools進(jìn)行工具添加,依次進(jìn)行Qt Designer、PyUIC環(huán)境配置.

yolov5 pyqt,qt,python,深度學(xué)習(xí),pytorch

?2.1 添加QtDesigner

yolov5 pyqt,qt,python,深度學(xué)習(xí),pytorch

?Qt Designer 是通過(guò)拖拽的方式放置控件,并實(shí)時(shí)查看控件效果進(jìn)行快速UI設(shè)計(jì)

位置 內(nèi)容
name 可以隨便命名,只要便于記憶就可以,本次采取通用命名:Qt Designer
Program designer.exe路徑,一般在python中.\Library\bin\designer.exe
Arguments 固定格式,直接復(fù)制也可:$FileDir$\$FileName$
Working directory 固定格式,直接復(fù)制也可:$FileDir$

2.2 添加PyUIC

yolov5 pyqt,qt,python,深度學(xué)習(xí),pytorch

?PyUIC主要是把Qt Designer生成的.ui文件換成.py文件

位置 內(nèi)容
name 可以隨便命名,只要便于記憶就可以,本次采取通用命名:PyUiC
Program python.exe路徑,一般在python安裝根目錄中
Arguments 固定格式,直接復(fù)制也可:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
Working directory 固定格式,直接復(fù)制也可:$FileDir$

3. QtDesigner建立圖形化窗口界面?

3.1 在根目錄下新建UI文件夾進(jìn)行UI文件的專門存儲(chǔ),點(diǎn)擊Tools->External Tools->Qt Designer進(jìn)行圖形界面創(chuàng)建.

yolov5 pyqt,qt,python,深度學(xué)習(xí),pytorch

?3.2 創(chuàng)建一個(gè)Main Window窗口

yolov5 pyqt,qt,python,深度學(xué)習(xí),pytorch

yolov5 pyqt,qt,python,深度學(xué)習(xí),pytorch

yolov5 pyqt,qt,python,深度學(xué)習(xí),pytorch

3.3 完成基本界面開發(fā)后,保存其為Detect.ui,放置在UI文件夾下,利用PyUic工具將其轉(zhuǎn)化為Detect.py文件。

yolov5 pyqt,qt,python,深度學(xué)習(xí),pytorch

yolov5 pyqt,qt,python,深度學(xué)習(xí),pytorch

轉(zhuǎn)換完成后,進(jìn)行相應(yīng)的槽函數(shù)的建立與修改,此處建議直接看我后面給出的demo。

4. demo

使用時(shí)只需將parser.add_argument中的'--weights'設(shè)為響應(yīng)權(quán)重即可。

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file '.\project.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!
import sys
import cv2
import argparse
import random
import torch
import numpy as np
import torch.backends.cudnn as cudnn

from PyQt5 import QtCore, QtGui, QtWidgets

from utils.torch_utils import select_device
from models.experimental import attempt_load
from utils.general import check_img_size, non_max_suppression, scale_coords
from utils.datasets import letterbox
from utils.plots import plot_one_box


class Ui_MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(Ui_MainWindow, self).__init__(parent)
        self.timer_video = QtCore.QTimer()
        self.setupUi(self)
        self.init_logo()
        self.init_slots()
        self.cap = cv2.VideoCapture()
        self.out = None
        # self.out = cv2.VideoWriter('prediction.avi', cv2.VideoWriter_fourcc(*'XVID'), 20.0, (640, 480))

        parser = argparse.ArgumentParser()
        parser.add_argument('--weights', nargs='+', type=str,
                            default='weights/best.pt', help='model.pt path(s)')
        # file/folder, 0 for webcam
        parser.add_argument('--source', type=str,
                            default='data/images', help='source')
        parser.add_argument('--img-size', type=int,
                            default=640, help='inference size (pixels)')
        parser.add_argument('--conf-thres', type=float,
                            default=0.25, help='object confidence threshold')
        parser.add_argument('--iou-thres', type=float,
                            default=0.45, help='IOU threshold for NMS')
        parser.add_argument('--device', default='',
                            help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
        parser.add_argument(
            '--view-img', action='store_true', help='display results')
        parser.add_argument('--save-txt', action='store_true',
                            help='save results to *.txt')
        parser.add_argument('--save-conf', action='store_true',
                            help='save confidences in --save-txt labels')
        parser.add_argument('--nosave', action='store_true',
                            help='do not save images/videos')
        parser.add_argument('--classes', nargs='+', type=int,
                            help='filter by class: --class 0, or --class 0 2 3')
        parser.add_argument(
            '--agnostic-nms', action='store_true', help='class-agnostic NMS')
        parser.add_argument('--augment', action='store_true',
                            help='augmented inference')
        parser.add_argument('--update', action='store_true',
                            help='update all models')
        parser.add_argument('--project', default='runs/detect',
                            help='save results to project/name')
        parser.add_argument('--name', default='exp',
                            help='save results to project/name')
        parser.add_argument('--exist-ok', action='store_true',
                            help='existing project/name ok, do not increment')
        self.opt = parser.parse_args()
        print(self.opt)

        source, weights, view_img, save_txt, imgsz = self.opt.source, self.opt.weights, self.opt.view_img, self.opt.save_txt, self.opt.img_size

        self.device = select_device(self.opt.device)
        self.half = self.device.type != 'cpu'  # half precision only supported on CUDA

        cudnn.benchmark = True

        # Load model
        self.model = attempt_load(
            weights, map_location=self.device)  # load FP32 model
        stride = int(self.model.stride.max())  # model stride
        self.imgsz = check_img_size(imgsz, s=stride)  # check img_size
        if self.half:
            self.model.half()  # to FP16

        # Get names and colors
        self.names = self.model.module.names if hasattr(
            self.model, 'module') else self.model.names
        self.colors = [[random.randint(0, 255)
                        for _ in range(3)] for _ in self.names]

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(20, 130, 112, 34))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(20, 220, 112, 34))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(20, 300, 112, 34))
        self.pushButton_3.setObjectName("pushButton_3")
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(160, 90, 611, 411))
        self.groupBox.setObjectName("groupBox")
        self.label = QtWidgets.QLabel(self.groupBox)
        self.label.setGeometry(QtCore.QRect(10, 40, 561, 331))
        self.label.setObjectName("label")
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(150, 10, 471, 51))
        self.textEdit.setObjectName("textEdit")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 30))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "演示系統(tǒng)"))
        self.pushButton.setText(_translate("MainWindow", "圖片檢測(cè)"))
        self.pushButton_2.setText(_translate("MainWindow", "攝像頭檢測(cè)"))
        self.pushButton_3.setText(_translate("MainWindow", "視頻檢測(cè)"))
        self.groupBox.setTitle(_translate("MainWindow", "檢測(cè)結(jié)果"))
        self.label.setText(_translate("MainWindow", "TextLabel"))
        self.textEdit.setHtml(_translate("MainWindow",
            "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
            "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
            "p, li { white-space: pre-wrap; }\n"
            "</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
            "<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:18pt; font-weight:600;\">演示系統(tǒng)</span></p></body></html>"))

    def init_slots(self):
        self.pushButton.clicked.connect(self.button_image_open)
        self.pushButton_3.clicked.connect(self.button_video_open)
        self.pushButton_2.clicked.connect(self.button_camera_open)
        self.timer_video.timeout.connect(self.show_video_frame)

    def init_logo(self):
        pix = QtGui.QPixmap('wechat.jpg')
        self.label.setScaledContents(True)
        self.label.setPixmap(pix)

    def button_image_open(self):
        print('button_image_open')
        name_list = []

        img_name, _ = QtWidgets.QFileDialog.getOpenFileName(
            self, "打開圖片", "", "*.jpg;;*.png;;All Files(*)")
        if not img_name:
            return

        img = cv2.imread(img_name)
        print(img_name)
        showimg = img
        with torch.no_grad():
            img = letterbox(img, new_shape=self.opt.img_size)[0]
            # Convert
            # BGR to RGB, to 3x416x416
            img = img[:, :, ::-1].transpose(2, 0, 1)
            img = np.ascontiguousarray(img)
            img = torch.from_numpy(img).to(self.device)
            img = img.half() if self.half else img.float()  # uint8 to fp16/32
            img /= 255.0  # 0 - 255 to 0.0 - 1.0
            if img.ndimension() == 3:
                img = img.unsqueeze(0)
            # Inference
            pred = self.model(img, augment=self.opt.augment)[0]
            # Apply NMS
            pred = non_max_suppression(pred, self.opt.conf_thres, self.opt.iou_thres, classes=self.opt.classes,
                                       agnostic=self.opt.agnostic_nms)
            print(pred)
            # Process detections
            for i, det in enumerate(pred):
                if det is not None and len(det):
                    # Rescale boxes from img_size to im0 size
                    det[:, :4] = scale_coords(
                        img.shape[2:], det[:, :4], showimg.shape).round()

                    for *xyxy, conf, cls in reversed(det):
                        label = '%s %.2f' % (self.names[int(cls)], conf)
                        name_list.append(self.names[int(cls)])
                        plot_one_box(xyxy, showimg, label=label,
                                     color=self.colors[int(cls)], line_thickness=2)

        cv2.imwrite('prediction.jpg', showimg)
        self.result = cv2.cvtColor(showimg, cv2.COLOR_BGR2BGRA)
        self.result = cv2.resize(
            self.result, (640, 480), interpolation=cv2.INTER_AREA)
        self.QtImg = QtGui.QImage(
            self.result.data, self.result.shape[1], self.result.shape[0], QtGui.QImage.Format_RGB32)
        self.label.setPixmap(QtGui.QPixmap.fromImage(self.QtImg))

    def button_video_open(self):
        video_name, _ = QtWidgets.QFileDialog.getOpenFileName(
            self, "打開視頻", "", "*.mp4;;*.avi;;All Files(*)")

        if not video_name:
            return

        flag = self.cap.open(video_name)
        if flag == False:
            QtWidgets.QMessageBox.warning(
                self, u"Warning", u"打開視頻失敗", buttons=QtWidgets.QMessageBox.Ok, defaultButton=QtWidgets.QMessageBox.Ok)
        else:
            self.out = cv2.VideoWriter('prediction.avi', cv2.VideoWriter_fourcc(
                *'MJPG'), 20, (int(self.cap.get(3)), int(self.cap.get(4))))
            self.timer_video.start(30)
            self.pushButton_3.setDisabled(True)
            self.pushButton.setDisabled(True)
            self.pushButton_2.setDisabled(True)

    def button_camera_open(self):
        if not self.timer_video.isActive():
            # 默認(rèn)使用第一個(gè)本地camera
            flag = self.cap.open(0)
            if flag == False:
                QtWidgets.QMessageBox.warning(
                    self, u"Warning", u"打開攝像頭失敗", buttons=QtWidgets.QMessageBox.Ok,
                    defaultButton=QtWidgets.QMessageBox.Ok)
            else:
                self.out = cv2.VideoWriter('prediction.avi', cv2.VideoWriter_fourcc(
                    *'MJPG'), 20, (int(self.cap.get(3)), int(self.cap.get(4))))
                self.timer_video.start(30)
                self.pushButton_3.setDisabled(True)
                self.pushButton.setDisabled(True)
                self.pushButton_2.setText(u"關(guān)閉攝像頭")
        else:
            self.timer_video.stop()
            self.cap.release()
            self.out.release()
            self.label.clear()
            self.init_logo()
            self.pushButton_3.setDisabled(False)
            self.pushButton.setDisabled(False)
            self.pushButton_2.setText(u"攝像頭檢測(cè)")

    def show_video_frame(self):
        name_list = []

        flag, img = self.cap.read()
        if img is not None:
            showimg = img
            with torch.no_grad():
                img = letterbox(img, new_shape=self.opt.img_size)[0]
                # Convert
                # BGR to RGB, to 3x416x416
                img = img[:, :, ::-1].transpose(2, 0, 1)
                img = np.ascontiguousarray(img)
                img = torch.from_numpy(img).to(self.device)
                img = img.half() if self.half else img.float()  # uint8 to fp16/32
                img /= 255.0  # 0 - 255 to 0.0 - 1.0
                if img.ndimension() == 3:
                    img = img.unsqueeze(0)
                # Inference
                pred = self.model(img, augment=self.opt.augment)[0]

                # Apply NMS
                pred = non_max_suppression(pred, self.opt.conf_thres, self.opt.iou_thres, classes=self.opt.classes,
                                           agnostic=self.opt.agnostic_nms)
                # Process detections
                for i, det in enumerate(pred):  # detections per image
                    if det is not None and len(det):
                        # Rescale boxes from img_size to im0 size
                        det[:, :4] = scale_coords(
                            img.shape[2:], det[:, :4], showimg.shape).round()
                        # Write results
                        for *xyxy, conf, cls in reversed(det):
                            label = '%s %.2f' % (self.names[int(cls)], conf)
                            name_list.append(self.names[int(cls)])
                            print(label)
                            plot_one_box(
                                xyxy, showimg, label=label, color=self.colors[int(cls)], line_thickness=2)

            self.out.write(showimg)
            show = cv2.resize(showimg, (640, 480))
            self.result = cv2.cvtColor(show, cv2.COLOR_BGR2RGB)
            showImage = QtGui.QImage(self.result.data, self.result.shape[1], self.result.shape[0],
                                     QtGui.QImage.Format_RGB888)
            self.label.setPixmap(QtGui.QPixmap.fromImage(showImage))

        else:
            self.timer_video.stop()
            self.cap.release()
            self.out.release()
            self.label.clear()
            self.pushButton_3.setDisabled(False)
            self.pushButton.setDisabled(False)
            self.pushButton_2.setDisabled(False)
            self.init_logo()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    ui = Ui_MainWindow()
    ui.show()
    sys.exit(app.exec_())

yolov5 pyqt,qt,python,深度學(xué)習(xí),pytorch

5.添加背景圖片

將demo中最后一段代碼改為如下,其中background-image為背景圖片地址。

if __name__ == '__main__':
    stylesheet = """
            Ui_MainWindow {
                background-image: url("4K.jpg");
                background-repeat: no-repeat;
                background-position: center;
            }
        """
    app = QtWidgets.QApplication(sys.argv)
    app.setStyleSheet(stylesheet)
    ui = Ui_MainWindow()
    ui.show()
    sys.exit(app.exec_())

yolov5 pyqt,qt,python,深度學(xué)習(xí),pytorch

?

6.reference

http://t.csdn.cn/ZVtSKhttp://t.csdn.cn/ZVtSKPyQt5系列教程(三)利用QtDesigner設(shè)計(jì)UI界面 - 迷途小書童的Note迷途小書童的Note (xugaoxiang.com)https://xugaoxiang.com/2019/12/04/pyqt5-3-qtdesigner/?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-852325.html

到了這里,關(guān)于Yolov5(v5.0) + pyqt5界面設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用PYQT5設(shè)計(jì)登錄界面并實(shí)現(xiàn)界面跳轉(zhuǎn)

    使用PYQT5設(shè)計(jì)登錄界面并實(shí)現(xiàn)界面跳轉(zhuǎn)

    目錄 ? 1 UI登錄界面的布局 2 UI登錄界面布局對(duì)應(yīng)的代碼 3 登錄界面和界面跳轉(zhuǎn)完整代碼 4 跳轉(zhuǎn)界面代碼函數(shù)和優(yōu)化界面代碼 5 最終效果 ? ? ? ?其中, 歡迎使用 XXXX 軟件管理員密碼 使用的是左邊功能的 label 類、 登錄 使用的是左邊功能的 Push Button 類、 管理員和密碼的輸入

    2024年02月02日
    瀏覽(21)
  • 實(shí)習(xí)記錄(5)——PyQT5界面設(shè)計(jì)及交互

    實(shí)習(xí)記錄(5)——PyQT5界面設(shè)計(jì)及交互

    首先按照甲方PPT上給的界面做了,在寫內(nèi)部邏輯的時(shí)候發(fā)現(xiàn)有不少問(wèn)題,沒(méi)考慮到使用者的感受,甚至我覺(jué)得根本用不了。于是我和小哥討論了一下之后,我按照我的想法做了一個(gè)新的頁(yè)面出來(lái),能實(shí)現(xiàn)需求的同時(shí),讓使用的人體驗(yàn)更好也更直觀。 昨天安裝成功了PyQT5,今天

    2023年04月24日
    瀏覽(20)
  • PyQt5下界面設(shè)計(jì), 無(wú)邊框加陰影界面, 鼠標(biāo)左鍵移動(dòng)事件

    PyQt5下界面設(shè)計(jì), 無(wú)邊框加陰影界面, 鼠標(biāo)左鍵移動(dòng)事件

    ????????本人小白, 網(wǎng)羅各個(gè)網(wǎng)頁(yè)與資源學(xué)習(xí)總結(jié)的內(nèi)容, 設(shè)置界面無(wú)邊框且留有陰影, 且鼠標(biāo)左鍵可以拖動(dòng)界面的方法. ? ? ? ? 首先我們尋找一個(gè)模板進(jìn)行學(xué)習(xí)演示, 例如騰訊會(huì)議的界面: ? ? ? ? 本人會(huì)仿照這個(gè)界面進(jìn)行演示說(shuō)明, 包括各種樣式(你看到就是賺到) ? ? ?

    2023年04月09日
    瀏覽(59)
  • PyQt5桌面應(yīng)用開發(fā)(21):界面設(shè)計(jì)結(jié)果自動(dòng)測(cè)試(二)

    PyQt5桌面應(yīng)用開發(fā)(21):界面設(shè)計(jì)結(jié)果自動(dòng)測(cè)試(二)

    PyQt5桌面應(yīng)用開發(fā)(1):需求分析 PyQt5桌面應(yīng)用開發(fā)(2):事件循環(huán) PyQt5桌面應(yīng)用開發(fā)(3):并行設(shè)計(jì) PyQt5桌面應(yīng)用開發(fā)(4):界面設(shè)計(jì) PyQt5桌面應(yīng)用開發(fā)(5):對(duì)話框 PyQt5桌面應(yīng)用開發(fā)(6):文件對(duì)話框 PyQt5桌面應(yīng)用開發(fā)(7):文本編輯+語(yǔ)法高亮與行號(hào) PyQt5桌面應(yīng)用開

    2024年02月09日
    瀏覽(48)
  • YOLOV5 + PYQT5單目測(cè)距(四)

    YOLOV5 + PYQT5單目測(cè)距(四)

    系統(tǒng):win 10 YOLO版本:yolov5 5.0 拍攝視頻設(shè)備:安卓手機(jī) 電腦顯卡:NVIDIA 2080Ti(CPU也可以跑,GPU只是起到加速推理效果) 詳見(jiàn)文章 YOLOV5 + 單目測(cè)距(python) 首先安裝一下pyqt5 接著再pycharm設(shè)置里配置一下 添加下面兩個(gè)工具: 工具1:Qt Designer 工具2:PyUIC 實(shí)驗(yàn)采用的是一個(gè)博主

    2024年02月08日
    瀏覽(24)
  • PyQt5 | 手把手教你YOLOv5添加PyQt頁(yè)面

    PyQt5 | 手把手教你YOLOv5添加PyQt頁(yè)面

    演示視頻:YOLOv5/v7添加 PyQT5 頁(yè)面 我的畢業(yè)有救了 !嗶哩嗶哩

    2024年02月01日
    瀏覽(21)
  • 人臉識(shí)別系統(tǒng)OpenCV+dlib+python(含數(shù)據(jù)庫(kù))Pyqt5界面設(shè)計(jì) 項(xiàng)目源碼 畢業(yè)設(shè)計(jì)

    人臉識(shí)別系統(tǒng)OpenCV+dlib+python(含數(shù)據(jù)庫(kù))Pyqt5界面設(shè)計(jì) 項(xiàng)目源碼 畢業(yè)設(shè)計(jì)

    Python語(yǔ)言、dlib、OpenCV、Pyqt5界面設(shè)計(jì)、sqlite3數(shù)據(jù)庫(kù) ? ? ?本系統(tǒng)使用dlib作為人臉識(shí)別工具,dlib提供一個(gè)方法可將人臉圖片數(shù)據(jù)映射到128維度的空間向量,如果兩張圖片來(lái)源于同一個(gè)人,那么兩個(gè)圖片所映射的空間向量距離就很近,否則就會(huì)很遠(yuǎn)。因此,可以通過(guò)提取圖片并

    2024年02月05日
    瀏覽(20)
  • Pycharm中成功配置PyQt5(External Tools),設(shè)計(jì)好界面直接生成python代碼

    Pycharm中成功配置PyQt5(External Tools),設(shè)計(jì)好界面直接生成python代碼

    在Pycharm中設(shè)置好Python環(huán)境,點(diǎn)擊File-Settings-Project-Python Interpreter ?設(shè)置好后退出,點(diǎn)擊窗口下的Terminal,輸入 ?同樣的方法安裝PyQt5-tools: 點(diǎn)擊File-Settings-Tools-External Tools,點(diǎn)擊+號(hào) ? ?需要配置三個(gè)tools ,分別是 QtDesigner、PyUICS、Pyrcc,其中QtDesigner是qt 設(shè)計(jì)師,PyUics是把UI界面轉(zhuǎn)

    2024年02月11日
    瀏覽(20)
  • 基于yolov5的pyqt5目標(biāo)檢測(cè)圖形上位機(jī)工具【附工程代碼】

    基于yolov5的pyqt5目標(biāo)檢測(cè)圖形上位機(jī)工具【附工程代碼】

    【后附工程代碼】這是一個(gè)集成yolov5算法的目標(biāo)檢測(cè)的上位機(jī)軟件,主要涉及的界面: B站視頻演示 1. 用戶登入 2.用戶注冊(cè) 3. 忘記密碼(暫未開發(fā)) 特別說(shuō)明:這里的用戶登入有倆種方式,主要是使用mysql數(shù)據(jù)庫(kù)。 若需要使用自己的數(shù)據(jù)庫(kù),記得將以下的信息改未自己的對(duì)

    2024年02月03日
    瀏覽(23)
  • 使用PyQt簡(jiǎn)單實(shí)現(xiàn)YOLOv5交互界面

    使用PyQt簡(jiǎn)單實(shí)現(xiàn)YOLOv5交互界面

    可在過(guò)往博客查看,YOLO原理,以及具體訓(xùn)練過(guò)程 , 這篇文章是繼續(xù)完善YOLO模型的使用,即將控制臺(tái)cmd交互的YOLO5模型實(shí)現(xiàn)為交互界面可視化操作。我們前期已經(jīng)搭建了一個(gè)QT框架,現(xiàn)在只要將具體函數(shù)與QT框架進(jìn)行綁定即可。 個(gè)人建議直接將整個(gè)ui文件放置在YOLO5文件夾下,

    2024年02月08日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包