一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

看熱訊:QT部署YOLOV5 pyqt5搭建YOLOV5的檢測平臺

來源:CSDN 時間:2022-12-20 15:07:07

文章目錄

前言一、準備工作1、代碼下載2、環境安裝2.1、安裝PyQt52.2、安裝Qt Designer圖形界面開發工具2.3、pycharm配置 3、模型準備 二、界面展示1.界面大致如下 三、效果展示1、圖片效果展示如下:2、攝像頭或視頻檢測 四、整體代碼:總結

前言


(資料圖片)

這篇文章主要用來記錄用pyqt5搭建YOLOV5的檢測平臺,代碼是在yoloV5官方代碼上加了個qt模塊,目前可以支持GPU/CPU下pt/onnx推理。

一、準備工作

1、代碼下載

2、環境安裝

根據代碼中的requirements.txt進行環境搭建,前提是你已有Python環境

pip install -r requirements.txt

這里需要注意的是,pyqt5需要配置下環境,參考連接為:安裝pyqt5,步驟如下:

2.1、安裝PyQt5

pip install PyQt5

2.2、安裝Qt Designer圖形界面開發工具

pip install PyQt5-tools

安裝完成后,會在當前環境目錄下生成如下文件

2.3、pycharm配置

先配置Qt Designer 參數如下: Name:Qt Designer。方便記憶。實際可以任意取值。

Program:designer.exe程序絕對路徑。根據實際安裝路徑填寫,參考路徑為安裝的xxxx/Lib/sit-packages/qt5_applications\Qt\bin\designer.exe(其中xxxx為虛擬環境目錄下)。 Working directory: $ProjectFileDir$。固定取值。

配置PyUIC,該工具是用于將Qt Designer工具開發完成的.ui文件轉化為.py文件。配置打開路徑同Qt Designer。參數配置說明: Name:PyUIC。方便記憶。實際可以任意取值。 Program:python.exe程序絕對路徑。根據實際安裝路徑填寫。 Parameters:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py。固定取值。 Working directory: $FileDir$。固定取值。

3、模型準備

根據readme.md文件中的地址選擇對應的模型下載,如圖:

本文直接以yolov5s.pt進行示范

二、界面展示

1.界面大致如下

代碼如下(示例):

class Ui_Form(QtWidgets.QWidget):    def setupUi(self, Form):        Form.setObjectName("Form")        Form.resize(1130, 730)        self.stride=64        #檢測結果展示區        self.label2 = QtWidgets.QLabel(Form)        self.label2.setGeometry(QtCore.QRect(650, 410, 300, 300))        self.label2.setAlignment(QtCore.Qt.AlignCenter)        self.label2.setStyleSheet("border: 1px solid black;")        self.label2.setObjectName("label2")        #圖片或視頻路徑選擇        self.pushButton = QtWidgets.QPushButton(Form)        self.pushButton.setGeometry(QtCore.QRect(50, 310, 160, 30))        self.pushButton.setStyleSheet("font: 15pt \"宋體\";\n""border:1px solid black;\n""background-color:#e1e1e1;")        self.pushButton.setChecked(False)  # 設置開始時的狀態為未選中        self.pushButton.clicked.connect(lambda :self.select_file())        self.pushButton.setObjectName("pushButton")  #圖片選擇按鈕        #模式選擇        self.comboBox = QtWidgets.QComboBox(Form)        self.comboBox.setGeometry(QtCore.QRect(50, 260, 160, 30))        self.comboBox.setStyleSheet("font: 15pt \"宋體\";\n""border:1px solid black;\n""background-color:#e1e1e1;")        self.comboBox.setPlaceholderText("")        self.comboBox.setObjectName("comboBox")        self.comboBox.addItem("")        self.comboBox.addItem("")        self.comboBox.addItem("")        self.comboBox.addItem("")        self.comboBox.currentIndexChanged.connect(lambda :self.select_mode())        #開始檢測按鈕        self.pushButton_2 = QtWidgets.QPushButton(Form)        self.pushButton_2.setGeometry(QtCore.QRect(190, 610, 100, 70))        self.pushButton_2.setStyleSheet("font: 15pt \"宋體\";\n""border:1px solid black;\n""background-color:#e1e1e1;")        self.pushButton_2.setObjectName("pushButton_2")        self.pushButton_2.setChecked(False)        self.pushButton_2.clicked.connect(lambda :self.vim_show())        self.pushButton_3 = QtWidgets.QPushButton(Form)        self.pushButton_3.setGeometry(QtCore.QRect(50, 210, 160, 30))        self.pushButton_3.setStyleSheet("font: 15pt \"宋體\";\n""border:1px solid black;\n""background-color:#e1e1e1;")        self.pushButton_3.setObjectName("pushButton_3")        self.pushButton_3.setChecked(False) # 設置開始時的狀態為未選中        self.pushButton_3.clicked.connect(lambda :self.select_modelfile())        self.pushButton_7 = QtWidgets.QPushButton(Form)        self.pushButton_7.setGeometry(QtCore.QRect(50, 550, 160, 30))        self.pushButton_7.setStyleSheet("font: 15pt \"宋體\";\n"                                        "border:1px solid black;\n"                                        "background-color:#e1e1e1;")        self.pushButton_7.setObjectName("pushButton_7")        self.lineEdit_2=QtWidgets.QLineEdit(Form)        self.lineEdit_2.setGeometry(QtCore.QRect(230, 550, 220, 30))        self.lineEdit_2.setStyleSheet("border: 1px solid black;")        self.lineEdit_2.setObjectName("lineEdit_2")        self.label1=QtWidgets.QLabel(Form)        self.label1.setGeometry(QtCore.QRect(650, 100, 300, 300))        self.label2.setAlignment(QtCore.Qt.AlignCenter)        self.label1.setStyleSheet("border: 1px solid black;")        self.label1.setObjectName("label1")        self.textEdit = QtWidgets.QTextEdit(Form)        self.textEdit.setGeometry(QtCore.QRect(600, 100, 40, 300))        self.textEdit.setLayoutDirection(QtCore.Qt.LeftToRight)        self.textEdit.setStyleSheet("border: 1px solid black;\n""font: 15pt \"宋體\";")        self.textEdit.setObjectName("textEdit")        self.textEdit_2 = QtWidgets.QTextEdit(Form)        self.textEdit_2.setGeometry(QtCore.QRect(600, 410, 40, 300))        self.textEdit_2.setStyleSheet("border: 1px solid black;\n""font: 15pt \"宋體\";")        self.textEdit_2.setAlignment(QtCore.Qt.AlignHCenter)        self.textEdit_2.setObjectName("textEdit_2")        self.tableWidget = QtWidgets.QTableWidget(Form)        self.tableWidget.setGeometry(QtCore.QRect(230, 370, 221, 170))        self.tableWidget.setStyleSheet("font: 15pt \"宋體\";\n""")        self.tableWidget.setObjectName("tableWidget")        self.tableWidget.setColumnCount(1)        self.tableWidget.setRowCount(4)        item = QtWidgets.QTableWidgetItem()        self.tableWidget.setVerticalHeaderItem(0, item)        item = QtWidgets.QTableWidgetItem()        self.tableWidget.setVerticalHeaderItem(1, item)        item = QtWidgets.QTableWidgetItem()        self.tableWidget.setVerticalHeaderItem(2, item)        item = QtWidgets.QTableWidgetItem()        self.tableWidget.setVerticalHeaderItem(3, item)        item = QtWidgets.QTableWidgetItem()        self.tableWidget.setHorizontalHeaderItem(0, item)        self.tableWidget.horizontalHeader().setDefaultSectionSize(100)        self.tableWidget.horizontalHeader().setMinimumSectionSize(100)        self.tableWidget.verticalHeader().setDefaultSectionSize(30)        self.lineEdit_3 = QtWidgets.QLineEdit(Form)        self.lineEdit_3.setGeometry(QtCore.QRect(230, 210, 220, 30))        self.lineEdit_3.setStyleSheet("border: 1px solid black;")        self.lineEdit_3.setObjectName("lineEdit_3")        self.lineEdit_4 = QtWidgets.QLineEdit(Form)        self.lineEdit_4.setGeometry(QtCore.QRect(230, 260, 220, 30))        self.lineEdit_4.setStyleSheet("border: 1px solid black;")        self.lineEdit_4.setObjectName("lineEdit_4")        self.widget_3 = QtWidgets.QWidget(Form)        self.widget_3.setGeometry(QtCore.QRect(20, 30, 460, 690))        self.widget_3.setStyleSheet("border : 1px solid black;")        self.widget_3.setObjectName("widget_3")        self.lineEdit_5 = QtWidgets.QLineEdit(self.widget_3)        self.lineEdit_5.setGeometry(QtCore.QRect(90, 20, 261, 51))        self.lineEdit_5.setStyleSheet("font: 16pt \"宋體\";")        self.lineEdit_5.setAlignment(QtCore.Qt.AlignCenter)        self.lineEdit_5.setObjectName("lineEdit_5")        self.lineEdit_7 = QtWidgets.QLineEdit(self.widget_3)        self.lineEdit_7.setGeometry(QtCore.QRect(210, 280, 220, 30))        self.lineEdit_7.setStyleSheet("border: 1px solid black;")        self.lineEdit_7.setObjectName("lineEdit_7")        self.pushButton_4 = QtWidgets.QPushButton(self.widget_3)        self.pushButton_4.setGeometry(QtCore.QRect(30, 410, 160, 61))        self.pushButton_4.setStyleSheet("font: 15pt \"宋體\";\n""background-color:#e1e1e1;")        self.pushButton_4.setObjectName("pushButton_4")        #參數確認按鈕        self.pushButton_5 = QtWidgets.QPushButton(Form)        self.pushButton_5.setGeometry(QtCore.QRect(50, 610, 100, 70))        self.pushButton_5.setStyleSheet("font: 15pt \"宋體\";\n""border:1px solid black;\n""background-color:#e1e1e1;")        self.pushButton_5.setObjectName("pushButton_5")        self.pushButton_5.setChecked(False)        self.pushButton_5.clicked.connect(lambda: self.param_show())        #結束檢測按鈕        self.pushButton_6 = QtWidgets.QPushButton(Form)        self.pushButton_6.setGeometry(QtCore.QRect(330, 610, 100, 70))        self.pushButton_6.setStyleSheet("font: 15pt \"宋體\";\n"                                        "border:1px solid black;\n"                                        "background-color:#e1e1e1;")        self.pushButton_6.setObjectName("pushButton_6")        self.pushButton_6.setChecked(False)        self.pushButton_6.clicked.connect(lambda: self.end_detect())        self.lineEdit_8 = QtWidgets.QLineEdit(self.widget_3)        self.lineEdit_8.setGeometry(QtCore.QRect(210, 120, 220, 30))        self.lineEdit_8.setStyleSheet("border: 1px solid black;")        self.lineEdit_8.setObjectName("lineEdit_8")        self.comboBox_2 = QtWidgets.QComboBox(self.widget_3)        self.comboBox_2.setGeometry(QtCore.QRect(30, 120, 160, 30))        self.comboBox_2.setStyleSheet("font: 15pt \"宋體\";\n""background-color:#e1e1e1;")        self.comboBox_2.setPlaceholderText("")        self.comboBox_2.setObjectName("comboBox_2")        self.comboBox_2.currentIndexChanged.connect(lambda : self.select_device())        self.comboBox_2.addItem("")        self.comboBox_2.addItem("")        self.comboBox_2.addItem("")        self.lineEdit_5.raise_()        self.lineEdit_7.raise_()        self.lineEdit_8.raise_()        self.comboBox_2.raise_()        self.pushButton_4.raise_()        self.widget_4 = QtWidgets.QWidget(Form)        self.widget_4.setGeometry(QtCore.QRect(530, 30, 510, 690))        self.widget_4.setStyleSheet("border:1px solid black;")        self.widget_4.setObjectName("widget_4")        self.lineEdit_6 = QtWidgets.QLineEdit(self.widget_4)        self.lineEdit_6.setGeometry(QtCore.QRect(70, 10, 350, 50))        self.lineEdit_6.setStyleSheet("font: 16pt \"宋體\";")        self.lineEdit_6.setAlignment(QtCore.Qt.AlignCenter)        self.lineEdit_6.setObjectName("lineEdit_6")        self.widget_4.raise_()        self.widget_3.raise_()        self.label2.raise_()        self.pushButton.raise_()        self.comboBox.raise_()        self.pushButton_3.raise_()        self.label1.raise_()        self.textEdit.raise_()        self.textEdit_2.raise_()        self.tableWidget.raise_()        self.lineEdit_3.raise_()        self.lineEdit_4.raise_()        self.pushButton_2.raise_()        self.pushButton_5.raise_()        self.pushButton_6.raise_()        self.pushButton_7.raise_()        self.lineEdit_2.raise_()        self.retranslateUi(Form)        QtCore.QMetaObject.connectSlotsByName(Form)    def retranslateUi(self, Form):        _translate = QtCore.QCoreApplication.translate        Form.setWindowTitle(_translate("Form", "YOLOV5檢測"))        self.pushButton.setText(_translate("Form", "選擇文件"))        self.pushButton_7.setText(_translate("Form", "是否結束"))        self.comboBox.setItemText(0, _translate("Form", "檢測方式"))        self.comboBox.setItemText(1, _translate("Form", "圖片檢測"))        self.comboBox.setItemText(2, _translate("Form", "視頻檢測"))        self.comboBox.setItemText(3, _translate("Form", "攝像頭檢測"))        self.pushButton_2.setText(_translate("Form", "開始檢測"))        self.pushButton_5.setText(_translate("Form", "確定"))        self.pushButton_6.setText(_translate("Form", "結束程序"))        self.pushButton_3.setText(_translate("Form", "模型路徑"))        self.textEdit.setText(_translate("Form", "\n原\n始\n圖\n片\n/\n視\n頻"))        self.textEdit_2.setText(_translate("Form", "\n\n\n測\n試\n結\n果"))        item = self.tableWidget.verticalHeaderItem(0)        item.setText(_translate("Form", "imgsize"))        item = self.tableWidget.verticalHeaderItem(1)        item.setText(_translate("Form", "conf"))        item = self.tableWidget.verticalHeaderItem(2)        item.setText(_translate("Form", "iou"))        item = self.tableWidget.verticalHeaderItem(3)        item.setText(_translate("Form", "dnn"))        item = self.tableWidget.horizontalHeaderItem(0)        item.setText(_translate("Form", "數值"))        self.tableWidget.setItem(0,0,QtWidgets.QTableWidgetItem("640")) #圖片大小默認值        self.tableWidget.setItem(0,1,QtWidgets.QTableWidgetItem("0.25")) #置信度閾值默認值        self.tableWidget.setItem(0,2,QtWidgets.QTableWidgetItem("0.45")) #IOU閾值默認值        self.tableWidget.setItem(0,3,QtWidgets.QTableWidgetItem("False")) #IOU閾值默認值        self.lineEdit_3.setPlaceholderText(_translate("Form", "模型的路徑"))        self.lineEdit_4.setPlaceholderText(_translate("Form", "圖片或視頻檢測及攝像頭檢測"))        self.lineEdit_5.setText(_translate("Form", "參數設置及可視化"))        self.lineEdit_7.setPlaceholderText(_translate("Form", "圖片或視頻路徑"))        self.pushButton_4.setText(_translate("Form", "其他參數"))        self.lineEdit_8.setPlaceholderText(_translate("Form", "運行設備(CPU或GPU)"))        self.comboBox_2.setItemText(0, _translate("Form", "設備選擇"))        self.comboBox_2.setItemText(1, _translate("Form", "CPU"))        self.comboBox_2.setItemText(2, _translate("Form", "GPU"))        self.lineEdit_6.setText(_translate("Form", "圖片及測試結果可視化"))        self.lineEdit_2.setPlaceholderText(_translate("Form", "是否關閉視頻或者攝像頭"))

三、效果展示

1、圖片效果展示如下:

2、攝像頭或視頻檢測

四、整體代碼:

若界面太大或太小,就自己添加些代碼,將界面自適應電腦,或者手動修改代碼33行。

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file "det.ui"## Created by: PyQt5 UI code generator 5.15.4## WARNING: Any manual changes made to this file will be lost when pyuic5 is# run again.  Do not edit this file unless you know what you are doing.import sysimport osroot_path=os.path.abspath(os.path.join(os.path.dirname(__file__),".."))sys.path.append(root_path)from PyQt5 import QtCore, QtGui, QtWidgetsimport torchimport cv2from PIL import Image,ImageQtimport numpy as npfrom utils.general import non_max_suppressionfrom utils.general import check_img_size,scale_coordsfrom utils.augmentations import letterboximport osfrom pathlib import Pathfrom utils.plots import Annotator,colorsfrom models.experimental import attempt_loadclass Ui_Form(QtWidgets.QWidget):    def setupUi(self, Form):        Form.setObjectName("Form")        Form.resize(1130, 730)        self.stride=64        #檢測結果展示區        self.label2 = QtWidgets.QLabel(Form)        self.label2.setGeometry(QtCore.QRect(650, 410, 300, 300))        self.label2.setAlignment(QtCore.Qt.AlignCenter)        self.label2.setStyleSheet("border: 1px solid black;")        self.label2.setObjectName("label2")        #圖片或視頻路徑選擇        self.pushButton = QtWidgets.QPushButton(Form)        self.pushButton.setGeometry(QtCore.QRect(50, 310, 160, 30))        self.pushButton.setStyleSheet("font: 15pt \"宋體\";\n""border:1px solid black;\n""background-color:#e1e1e1;")        self.pushButton.setChecked(False)  # 設置開始時的狀態為未選中        self.pushButton.clicked.connect(lambda :self.select_file())        self.pushButton.setObjectName("pushButton")  #圖片選擇按鈕        #模式選擇        self.comboBox = QtWidgets.QComboBox(Form)        self.comboBox.setGeometry(QtCore.QRect(50, 260, 160, 30))        self.comboBox.setStyleSheet("font: 15pt \"宋體\";\n""border:1px solid black;\n""background-color:#e1e1e1;")        self.comboBox.setPlaceholderText("")        self.comboBox.setObjectName("comboBox")        self.comboBox.addItem("")        self.comboBox.addItem("")        self.comboBox.addItem("")        self.comboBox.addItem("")        self.comboBox.currentIndexChanged.connect(lambda :self.select_mode())        #開始檢測按鈕        self.pushButton_2 = QtWidgets.QPushButton(Form)        self.pushButton_2.setGeometry(QtCore.QRect(190, 610, 100, 70))        self.pushButton_2.setStyleSheet("font: 15pt \"宋體\";\n""border:1px solid black;\n""background-color:#e1e1e1;")        self.pushButton_2.setObjectName("pushButton_2")        self.pushButton_2.setChecked(False)        self.pushButton_2.clicked.connect(lambda :self.vim_show())        self.pushButton_3 = QtWidgets.QPushButton(Form)        self.pushButton_3.setGeometry(QtCore.QRect(50, 210, 160, 30))        self.pushButton_3.setStyleSheet("font: 15pt \"宋體\";\n""border:1px solid black;\n""background-color:#e1e1e1;")        self.pushButton_3.setObjectName("pushButton_3")        self.pushButton_3.setChecked(False) # 設置開始時的狀態為未選中        self.pushButton_3.clicked.connect(lambda :self.select_modelfile())        self.pushButton_7 = QtWidgets.QPushButton(Form)        self.pushButton_7.setGeometry(QtCore.QRect(50, 550, 160, 30))        self.pushButton_7.setStyleSheet("font: 15pt \"宋體\";\n"                                        "border:1px solid black;\n"                                        "background-color:#e1e1e1;")        self.pushButton_7.setObjectName("pushButton_7")        self.lineEdit_2=QtWidgets.QLineEdit(Form)        self.lineEdit_2.setGeometry(QtCore.QRect(230, 550, 220, 30))        self.lineEdit_2.setStyleSheet("border: 1px solid black;")        self.lineEdit_2.setObjectName("lineEdit_2")        self.label1=QtWidgets.QLabel(Form)        self.label1.setGeometry(QtCore.QRect(650, 100, 300, 300))        self.label2.setAlignment(QtCore.Qt.AlignCenter)        self.label1.setStyleSheet("border: 1px solid black;")        self.label1.setObjectName("label1")        self.textEdit = QtWidgets.QTextEdit(Form)        self.textEdit.setGeometry(QtCore.QRect(600, 100, 40, 300))        self.textEdit.setLayoutDirection(QtCore.Qt.LeftToRight)        self.textEdit.setStyleSheet("border: 1px solid black;\n""font: 15pt \"宋體\";")        self.textEdit.setObjectName("textEdit")        self.textEdit_2 = QtWidgets.QTextEdit(Form)        self.textEdit_2.setGeometry(QtCore.QRect(600, 410, 40, 300))        self.textEdit_2.setStyleSheet("border: 1px solid black;\n""font: 15pt \"宋體\";")        self.textEdit_2.setAlignment(QtCore.Qt.AlignHCenter)        self.textEdit_2.setObjectName("textEdit_2")        self.tableWidget = QtWidgets.QTableWidget(Form)        self.tableWidget.setGeometry(QtCore.QRect(230, 370, 221, 170))        self.tableWidget.setStyleSheet("font: 15pt \"宋體\";\n""")        self.tableWidget.setObjectName("tableWidget")        self.tableWidget.setColumnCount(1)        self.tableWidget.setRowCount(4)        item = QtWidgets.QTableWidgetItem()        self.tableWidget.setVerticalHeaderItem(0, item)        item = QtWidgets.QTableWidgetItem()        self.tableWidget.setVerticalHeaderItem(1, item)        item = QtWidgets.QTableWidgetItem()        self.tableWidget.setVerticalHeaderItem(2, item)        item = QtWidgets.QTableWidgetItem()        self.tableWidget.setVerticalHeaderItem(3, item)        item = QtWidgets.QTableWidgetItem()        self.tableWidget.setHorizontalHeaderItem(0, item)        self.tableWidget.horizontalHeader().setDefaultSectionSize(100)        self.tableWidget.horizontalHeader().setMinimumSectionSize(100)        self.tableWidget.verticalHeader().setDefaultSectionSize(30)        self.lineEdit_3 = QtWidgets.QLineEdit(Form)        self.lineEdit_3.setGeometry(QtCore.QRect(230, 210, 220, 30))        self.lineEdit_3.setStyleSheet("border: 1px solid black;")        self.lineEdit_3.setObjectName("lineEdit_3")        self.lineEdit_4 = QtWidgets.QLineEdit(Form)        self.lineEdit_4.setGeometry(QtCore.QRect(230, 260, 220, 30))        self.lineEdit_4.setStyleSheet("border: 1px solid black;")        self.lineEdit_4.setObjectName("lineEdit_4")        self.widget_3 = QtWidgets.QWidget(Form)        self.widget_3.setGeometry(QtCore.QRect(20, 30, 460, 690))        self.widget_3.setStyleSheet("border : 1px solid black;")        self.widget_3.setObjectName("widget_3")        self.lineEdit_5 = QtWidgets.QLineEdit(self.widget_3)        self.lineEdit_5.setGeometry(QtCore.QRect(90, 20, 261, 51))        self.lineEdit_5.setStyleSheet("font: 16pt \"宋體\";")        self.lineEdit_5.setAlignment(QtCore.Qt.AlignCenter)        self.lineEdit_5.setObjectName("lineEdit_5")        self.lineEdit_7 = QtWidgets.QLineEdit(self.widget_3)        self.lineEdit_7.setGeometry(QtCore.QRect(210, 280, 220, 30))        self.lineEdit_7.setStyleSheet("border: 1px solid black;")        self.lineEdit_7.setObjectName("lineEdit_7")        self.pushButton_4 = QtWidgets.QPushButton(self.widget_3)        self.pushButton_4.setGeometry(QtCore.QRect(30, 410, 160, 61))        self.pushButton_4.setStyleSheet("font: 15pt \"宋體\";\n""background-color:#e1e1e1;")        self.pushButton_4.setObjectName("pushButton_4")        #參數確認按鈕        self.pushButton_5 = QtWidgets.QPushButton(Form)        self.pushButton_5.setGeometry(QtCore.QRect(50, 610, 100, 70))        self.pushButton_5.setStyleSheet("font: 15pt \"宋體\";\n""border:1px solid black;\n""background-color:#e1e1e1;")        self.pushButton_5.setObjectName("pushButton_5")        self.pushButton_5.setChecked(False)        self.pushButton_5.clicked.connect(lambda: self.param_show())        #結束檢測按鈕        self.pushButton_6 = QtWidgets.QPushButton(Form)        self.pushButton_6.setGeometry(QtCore.QRect(330, 610, 100, 70))        self.pushButton_6.setStyleSheet("font: 15pt \"宋體\";\n"                                        "border:1px solid black;\n"                                        "background-color:#e1e1e1;")        self.pushButton_6.setObjectName("pushButton_6")        self.pushButton_6.setChecked(False)        self.pushButton_6.clicked.connect(lambda: self.end_detect())        self.lineEdit_8 = QtWidgets.QLineEdit(self.widget_3)        self.lineEdit_8.setGeometry(QtCore.QRect(210, 120, 220, 30))        self.lineEdit_8.setStyleSheet("border: 1px solid black;")        self.lineEdit_8.setObjectName("lineEdit_8")        self.comboBox_2 = QtWidgets.QComboBox(self.widget_3)        self.comboBox_2.setGeometry(QtCore.QRect(30, 120, 160, 30))        self.comboBox_2.setStyleSheet("font: 15pt \"宋體\";\n""background-color:#e1e1e1;")        self.comboBox_2.setPlaceholderText("")        self.comboBox_2.setObjectName("comboBox_2")        self.comboBox_2.currentIndexChanged.connect(lambda : self.select_device())        self.comboBox_2.addItem("")        self.comboBox_2.addItem("")        self.comboBox_2.addItem("")        self.lineEdit_5.raise_()        self.lineEdit_7.raise_()        self.lineEdit_8.raise_()        self.comboBox_2.raise_()        self.pushButton_4.raise_()        self.widget_4 = QtWidgets.QWidget(Form)        self.widget_4.setGeometry(QtCore.QRect(530, 30, 510, 690))        self.widget_4.setStyleSheet("border:1px solid black;")        self.widget_4.setObjectName("widget_4")        self.lineEdit_6 = QtWidgets.QLineEdit(self.widget_4)        self.lineEdit_6.setGeometry(QtCore.QRect(70, 10, 350, 50))        self.lineEdit_6.setStyleSheet("font: 16pt \"宋體\";")        self.lineEdit_6.setAlignment(QtCore.Qt.AlignCenter)        self.lineEdit_6.setObjectName("lineEdit_6")        self.widget_4.raise_()        self.widget_3.raise_()        self.label2.raise_()        self.pushButton.raise_()        self.comboBox.raise_()        self.pushButton_3.raise_()        self.label1.raise_()        self.textEdit.raise_()        self.textEdit_2.raise_()        self.tableWidget.raise_()        self.lineEdit_3.raise_()        self.lineEdit_4.raise_()        self.pushButton_2.raise_()        self.pushButton_5.raise_()        self.pushButton_6.raise_()        self.pushButton_7.raise_()        self.lineEdit_2.raise_()        self.retranslateUi(Form)        QtCore.QMetaObject.connectSlotsByName(Form)    def retranslateUi(self, Form):        _translate = QtCore.QCoreApplication.translate        Form.setWindowTitle(_translate("Form", "YOLOV5檢測"))        self.pushButton.setText(_translate("Form", "選擇文件"))        self.pushButton_7.setText(_translate("Form", "是否結束"))        self.comboBox.setItemText(0, _translate("Form", "檢測方式"))        self.comboBox.setItemText(1, _translate("Form", "圖片檢測"))        self.comboBox.setItemText(2, _translate("Form", "視頻檢測"))        self.comboBox.setItemText(3, _translate("Form", "攝像頭檢測"))        self.pushButton_2.setText(_translate("Form", "開始檢測"))        self.pushButton_5.setText(_translate("Form", "確定"))        self.pushButton_6.setText(_translate("Form", "結束程序"))        self.pushButton_3.setText(_translate("Form", "模型路徑"))        self.textEdit.setText(_translate("Form", "\n原\n始\n圖\n片\n/\n視\n頻"))        self.textEdit_2.setText(_translate("Form", "\n\n\n測\n試\n結\n果"))        item = self.tableWidget.verticalHeaderItem(0)        item.setText(_translate("Form", "imgsize"))        item = self.tableWidget.verticalHeaderItem(1)        item.setText(_translate("Form", "conf"))        item = self.tableWidget.verticalHeaderItem(2)        item.setText(_translate("Form", "iou"))        item = self.tableWidget.verticalHeaderItem(3)        item.setText(_translate("Form", "dnn"))        item = self.tableWidget.horizontalHeaderItem(0)        item.setText(_translate("Form", "數值"))        self.tableWidget.setItem(0,0,QtWidgets.QTableWidgetItem("640")) #圖片大小默認值        self.tableWidget.setItem(0,1,QtWidgets.QTableWidgetItem("0.25")) #置信度閾值默認值        self.tableWidget.setItem(0,2,QtWidgets.QTableWidgetItem("0.45")) #IOU閾值默認值        self.tableWidget.setItem(0,3,QtWidgets.QTableWidgetItem("False")) #IOU閾值默認值        self.lineEdit_3.setPlaceholderText(_translate("Form", "模型的路徑"))        self.lineEdit_4.setPlaceholderText(_translate("Form", "圖片或視頻檢測及攝像頭檢測"))        self.lineEdit_5.setText(_translate("Form", "參數設置及可視化"))        self.lineEdit_7.setPlaceholderText(_translate("Form", "圖片或視頻路徑"))        self.pushButton_4.setText(_translate("Form", "其他參數"))        self.lineEdit_8.setPlaceholderText(_translate("Form", "運行設備(CPU或GPU)"))        self.comboBox_2.setItemText(0, _translate("Form", "設備選擇"))        self.comboBox_2.setItemText(1, _translate("Form", "CPU"))        self.comboBox_2.setItemText(2, _translate("Form", "GPU"))        self.lineEdit_6.setText(_translate("Form", "圖片及測試結果可視化"))        self.lineEdit_2.setPlaceholderText(_translate("Form", "是否關閉視頻或者攝像頭"))    #選擇圖片或視頻路徑    def select_file(self):        file,_=QtWidgets.QFileDialog.getOpenFileName(None,"選擇文件",os.getcwd(),"All Files(*.jpg;*.png;*.jpeg;*.mp4;*.flv;*.avi;);;Text Files (*.txt)")        self.lineEdit_7.setText(file)    #選擇模型路徑    def select_modelfile(self):        file,_=QtWidgets.QFileDialog.getOpenFileName(None,"選擇文件",os.getcwd(),"All Files(*.pt;*.onnx;*.pth);;")        self.lineEdit_3.setText(file)    #設備選擇    def select_device(self):        device=self.comboBox_2.currentText() #獲取下拉框的信息        self.lineEdit_8.setText(device)    #模式選擇    def select_mode(self):        mode=self.comboBox.currentText()        self.lineEdit_4.setText(mode)    #模型初始化    def param_show(self):        device = torch.device("cpu" if self.lineEdit_8.text()=="CPU" else "cuda") #設備        modelpath = self.lineEdit_3.text() #模型路徑        self.suffix = Path(modelpath).suffix[1:]        if self.suffix == "pt":            self.flag=True            self.model = attempt_load(modelpath if isinstance(modelpath, list) else modelpath,                                 map_location=device)            self.stride = int(self.model.stride.max())  # model stride            self.names = self.model.module.names if hasattr(self.model, "module") else self.model.names  # get class names            if self.lineEdit_8.text() == "GPU":                self.model.half()        elif self.suffix == "onnx":            self.dnn = False            self.flag=False            if self.dnn:                # check_requirements(("opencv-python>=4.5.4",))                self.model = cv2.dnn.readNetFromONNX(modelpath)            else:                # check_requirements(("onnx", "onnxruntime-gpu" if torch.has_cuda else "onnxruntime"))                import onnxruntime                self.model = onnxruntime.InferenceSession(modelpath, None)        # 后兩項分別為按鈕(以|隔開,共有7種按鈕類型,見示例后)、默認按鈕(省略則默認為第一個按鈕)        msg=QtWidgets.QMessageBox(QtWidgets.QMessageBox.Warning,"消息框", "模型初始化完成,請開始檢測")        msg.exec_()    #檢測    def vim_show(self):        filepath=self.lineEdit_7.text() #文件路徑        detect_mode=self.lineEdit_4.text()#檢測模式        imgsize = int(self.tableWidget.item(0, 0).text())  # 圖片尺寸        conf_thres = float(self.tableWidget.item(1, 0).text())  # 置信度閾值        iou_thres = float(self.tableWidget.item(2, 0).text())  # iou閾值        device = self.lineEdit_8.text()  # 設備        if detect_mode=="圖片檢測":            #opencv讀圖展示            origin_img=cv2.imread(filepath)            if origin_img.shape[0] > origin_img.shape[1]:  # h>w                orgin_img1 = cv2.resize(origin_img, (int(origin_img.shape[1] * (300 / origin_img.shape[0])-1), 300),                                 cv2.INTER_LINEAR)            else:  # w>=h                orgin_img1 = cv2.resize(origin_img, (300, int(origin_img.shape[0] * (300 / origin_img.shape[1]))-1),                                 cv2.INTER_LINEAR)            #圖片預處理            input_img=self.process_img(origin_img,device,imgsize)            #推理            result=self.process_inference(origin_img,input_img,conf_thres,iou_thres)            #結果展示            if result.shape[0] > result.shape[1]:  # h>w                img1 = cv2.resize(result, (int(result.shape[1] * (300 / result.shape[0]))-1, 300),                                 cv2.INTER_LINEAR)            else:  # w>=h                img1 = cv2.resize(result, (300, int(result.shape[0] * (300 / result.shape[1]))-1),                                 cv2.INTER_LINEAR)            #原圖展示            rgb_img = cv2.cvtColor(orgin_img1, cv2.COLOR_BGR2RGB)            qimg = QtGui.QImage(rgb_img.data, rgb_img.shape[1], rgb_img.shape[0], QtGui.QImage.Format_RGB888)            self.label1.setPixmap(QtGui.QPixmap.fromImage(qimg))            #結果展示            rgb_img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)            qimg1 = QtGui.QImage(rgb_img1.data, rgb_img1.shape[1], rgb_img1.shape[0], QtGui.QImage.Format_RGB888)            self.label2.setPixmap(QtGui.QPixmap.fromImage(qimg1))        elif detect_mode=="視頻檢測":            cap = cv2.VideoCapture(filepath)            count = 1            while cap.isOpened():                if count % 2 == 0:                    ret, frame = cap.read()                    if ret:                        if frame.shape[0] > frame.shape[1]:  # h>w                            img = cv2.resize(frame, (int(frame.shape[1] * (300 / frame.shape[0])), 300),                                             cv2.INTER_LINEAR)                        else:  # w>=h                            img = cv2.resize(frame, (300, int(frame.shape[0] * (300 / frame.shape[1]))),                                             cv2.INTER_LINEAR)                        input_img = self.process_img(frame, device, imgsize)                        result = self.process_inference(frame, input_img, conf_thres, iou_thres)                        if result.shape[0] > result.shape[1]:  # h>w                            img1 = cv2.resize(result, (int(result.shape[1] * (300 / result.shape[0])) - 1, 300),                                              cv2.INTER_LINEAR)                        else:  # h<=w 1="" 2="=" 300="" img1="cv2.resize(result," -="" img="cv2.cvtColor(img," qimg="QtGui.QImage(img.data," rgb1="cv2.cvtColor(img1," qimg1="QtGui.QImage(rgb1.data," else:="" break="" count="" self.cap="cv2.VideoCapture(0)" while="" true:="" if="" 0:="" frame="self.cap.read()" ret:=""> frame.shape[1]:  # h>w                            img = cv2.resize(frame, (int(frame.shape[1] * (300 / frame.shape[0])), 300),                                             cv2.INTER_LINEAR)                        else:  # w>=h                            img = cv2.resize(frame, (300, int(frame.shape[0] * (300 / frame.shape[1]))),                                             cv2.INTER_LINEAR)                        input_img=self.process_img(frame,device,imgsize)                        result=self.process_inference(frame,input_img,conf_thres,iou_thres)                        if result.shape[0]>result.shape[1]: #h>w                            img1=cv2.resize(result,(int(result.shape[1]*(300/result.shape[0]))-1,300),cv2.INTER_LINEAR)                        else: #h<=w                            img1=cv2.resize(result,(300,int(result.shape[0]*(300/result.shape[1]))-1),                                            cv2.INTER_LINEAR)                        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)                        cv2.waitKey(1)                        qimg = QtGui.QImage(img.data, img.shape[1], img.shape[0], QtGui.QImage.Format_RGB888)                        self.label1.setPixmap(QtGui.QPixmap.fromImage(qimg))                        #結果展示                        rgb1=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)                        qimg1=QtGui.QImage(rgb1.data,rgb1.shape[1],rgb1.shape[0],QtGui.QImage.Format_RGB888)                        self.label2.setPixmap(QtGui.QPixmap.fromImage(qimg1))                    #復位                    count=1                    if self.lineEdit_2.text()=="是":                        break                else:                    count += 1            self.cap.release()            cv2.destroyAllWindows()    #退出程序    def end_detect(self):       sys.exit(1)    #圖片處理    def process_img(self,org_img,device,imgsize):        """        Args:            org_img: 原圖            device: 設備            imgsize: 圖片尺寸        Returns:        """        # 查看圖片尺寸是否能別stride整除        imgsz = check_img_size(imgsize, s=self.stride)        # resize_padding        img = letterbox(org_img, imgsz, self.stride, auto=self.flag)[0]        img = img.transpose((2, 0, 1))[::-1]  # HWC to CHW, BGR to RGB        img = np.ascontiguousarray(img)        if self.suffix == "onnx":            img = img.astype("float32")        else:            img = torch.from_numpy(img).to(device.lower())            # 設置是否為半精度測試            if device == "GPU":                img = img.half()            else:                img=img.float()        img /= 255.0  # 歸一化        if len(img.shape) == 3:            img = img[None]        return img    #推理進程    def process_inference(self,org_img,img,conf_thres,iou_thres):        """        Args:            org_img: 原圖            img: 縮放后的圖            conf_thres: 置信度閾值            iou_thres: IOU閾值        Returns:        """        if self.suffix == "pt":            pred = self.model(img)[0]        elif self.suffix == "onnx":            if self.dnn:                self.model.setInput(img)                pred = torch.tensor(self.model.forward())            else:                pred = torch.tensor(self.model.run([self.model.get_outputs()[0].name], {self.model.get_inputs()[0].name: img}))        pred = non_max_suppression(pred, conf_thres, iou_thres, classes=None, agnostic=False, max_det=1000)        dt, seen = [0.0, 0.0, 0.0], 0        for i, det in enumerate(pred):            seen += 1            im0 = org_img.copy()            # 繪制預測框            annotator = Annotator(im0, line_width=3, example=str(1))            # 檢測到目標時            if len(det):                det[:, :4] = scale_coords(img.shape[2:], det[:, :4], im0.shape).round()                # 寫結果                for *xyxy, conf, cls in reversed(det):                    c = int(cls)                    # label = f"{conf:.2f}"                    label = f"{self.names[c]} {conf:.2f}"                    annotator.box_label(xyxy, label, color=colors(c, True))            im0 = annotator.result()            # cv2.imwrite(save_path + os.sep + Path(img_path).name, im0)        return im0if __name__ == "__main__":    import sys    QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)  # 解決了Qtdesigner設計的界面與實際運行界面不一致的問題    app = QtWidgets.QApplication(sys.argv)    widget = QtWidgets.QWidget()    ui = Ui_Form()    ui.setupUi(widget)    widget.show()    sys.exit(app.exec_())

總結

以上就是本篇文章的全部內容,歡迎評論區指正錯誤,也可加入QQ群:995760755交流。

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四
中日韩美女免费视频网址在线观看 | 亚洲一二三级电影| 国产亚洲欧美一区二区| 欧美女人交a| 亚洲欧美一区二区精品久久久| 狠狠色伊人亚洲综合网站色| 亚洲国产精品女人久久久| 久久久亚洲综合| 国产一区二区三区最好精华液 | 欧美在线免费一级片| 欧美久久影院| 亚洲欧洲一区二区天堂久久| 蜜桃av噜噜一区二区三区| 国产亚洲一级高清| 久久九九热免费视频| 狠狠干综合网| 日韩一级在线观看| 欧美激情视频在线播放| 国产亚洲精品bv在线观看| 亚洲午夜在线观看视频在线| 欧美激情第三页| 亚洲免费观看高清完整版在线观看熊 | 麻豆成人av| 尤物九九久久国产精品的分类| 欧美高清在线视频观看不卡| 一区二区三区视频观看| 国产区精品在线观看| 欧美精品一区二区高清在线观看| 亚洲麻豆国产自偷在线| 国内精品模特av私拍在线观看| 久久性色av| 亚洲欧美日韩天堂| 亚洲人成网站999久久久综合| 欧美肉体xxxx裸体137大胆| 欧美国产日产韩国视频| 久久精品国产999大香线蕉| 国产精品久久久久久久久久免费 | 国产精品一区二区三区久久| 性欧美video另类hd性玩具| 一区二区激情小说| 国产精品日韩欧美| 久久久久久亚洲精品不卡4k岛国| 国产日韩专区在线| 国产精品国产精品| 欧美夜福利tv在线| 欧美亚洲一区二区三区| 国产伦精品一区二区三区视频黑人| 亚洲色无码播放| 亚洲高清自拍| 亚洲激情视频网| 亚洲精品国产精品国自产在线 | 欧美三级特黄| 久久成人在线| 国产精品久久久久一区二区三区| 日韩视频精品在线| 男人的天堂亚洲在线| 国外成人在线| 性欧美在线看片a免费观看| 免费视频一区| 91久久午夜| 久久精品网址| 亚洲电影免费观看高清完整版| 欧美在线高清| 国产亚洲一区精品| 欧美大香线蕉线伊人久久国产精品| 亚洲国产婷婷香蕉久久久久久| 久久影院午夜论| 亚洲国产精品一区二区尤物区| 欧美精品国产一区| 99在线精品视频| 国产精品毛片高清在线完整版 | 欧美日韩国产美女| 亚洲激情中文1区| 欧美久色视频| 亚洲欧美激情诱惑| 影音先锋久久久| 欧美精品综合| 欧美一区二区精品久久911| 亚洲二区精品| 欧美日韩成人在线视频| 久久超碰97人人做人人爱| 亚洲精品午夜| 极品av少妇一区二区| 欧美揉bbbbb揉bbbbb| 久久午夜色播影院免费高清| 亚洲美女黄色片| 国产综合色产在线精品| 欧美性大战久久久久久久蜜臀| 欧美在线免费视屏| 在线中文字幕一区| 一区二区三区www| 亚洲国产成人久久综合| 国产精品资源| 国产婷婷97碰碰久久人人蜜臀| 欧美日韩在线视频观看| 欧美日韩另类国产亚洲欧美一级| 久久久噜噜噜久久久| 亚洲欧美成人综合| 亚洲一区国产精品| 亚洲精选视频免费看| 亚洲国产视频a| 亚洲精品国产精品国自产在线 | 欧美大片国产精品| 久久精品成人欧美大片古装| 日韩一区二区精品在线观看| 在线看片一区| 亚洲激情小视频| 99在线精品观看| 亚洲精品久久久一区二区三区| 亚洲精品韩国| 日韩视频在线观看国产| 亚洲日本乱码在线观看| 亚洲精品久久久久久久久久久久 | 国产精品v日韩精品| 欧美日韩在线播放| 好看不卡的中文字幕| 亚洲欧洲在线免费| 午夜影院日韩| 免费试看一区| 欧美日韩亚洲一区二| 亚洲精品国产精品国产自| 亚洲国产专区校园欧美| 日韩视频免费观看高清完整版| 欧美一级专区| 欧美日韩一区成人| 国产精品护士白丝一区av| 国产一区二区三区在线观看精品| 亚洲欧洲精品一区二区精品久久久| 久久精品成人欧美大片古装| 欧美一级专区| 欧美午夜精品理论片a级大开眼界| 国产精品美女午夜av| 一区二区av在线| 亚洲午夜国产成人av电影男同| 亚洲欧美日韩国产精品 | 国产精品日韩精品欧美在线| 一区二区三区自拍| 欧美伊人久久久久久久久影院| 欧美日韩中文字幕综合视频| 亚洲精品国产精品乱码不99按摩 | 国产午夜精品在线| 亚洲蜜桃精久久久久久久| 久久久国产成人精品| 国产亚洲一区在线| 中文亚洲视频在线| 亚洲精品综合精品自拍| 久久国产精品亚洲va麻豆| 欧美日韩一区二区三区在线| 最新亚洲电影| 欧美日韩精品免费| 国产欧美日韩三级| 性欧美暴力猛交另类hd| 在线观看福利一区| 免费成人高清在线视频| 亚洲一区二区在线| 国产亚洲在线| 国产乱码精品| 欧美1区2区视频| 久久大综合网| 亚洲视频在线一区| 国产资源精品在线观看| 欧美日本中文| 夜夜狂射影院欧美极品| 尤物99国产成人精品视频| 欧美日韩你懂的| 亚洲三级免费| 亚洲黄色天堂| 国产一区视频网站| 欧美韩日亚洲| 欧美国产第一页| 欧美影视一区| 欧美一级免费视频| 亚洲视频欧美视频| 夜夜嗨av一区二区三区四区| 欧美精品国产精品| 国产精品视频一二| 亚洲精品小视频在线观看| 国产精品免费网站| 亚洲欧美国产不卡| 国产真实精品久久二三区| 久久频这里精品99香蕉| 亚洲国产导航| 欧美天堂亚洲电影院在线观看| 亚洲图片欧洲图片日韩av| 亚洲激情电影中文字幕| 欧美日韩免费一区| 先锋资源久久| 亚洲午夜未删减在线观看| 激情久久一区| 欧美激情91| 校园春色国产精品| 国产精品亚洲一区| 亚洲黄网站黄| 在线天堂一区av电影| 欧美日韩三级电影在线| 欧美日韩一区成人| 国产精品红桃| 欧美极品一区| 最新亚洲视频| 欧美精品激情在线观看|