окрестности
- виндовс 10 64 бит
- gtx 1050Ti
- yolov5 5.0 + pytorch1.7 + cu110
- pyqt5
предисловие
Некоторые друзья спрашивают, можешь ли ты дать мнеyolov5
делатьGUI
интерфейс, такой как использованиеpyqt5
Рамка? В этой статье давайте реализуем это.Не много ерунды, давайте сначала посмотрим на рендеры.
Элементы интерфейса очень просты, 2 функциональные кнопки, соответствующие обнаружению изображения и видео, 1 область отображения изображения, показывающая результат обнаружения цели изображения или видео.
Установка базовой среды
Здесь мы используемyolov5
Последний релиз версии 5.0, установка зависимых библиотек в этой статье описываться не будет, вы можете обратиться кYOLOv5 выпускает версию 5.0
Следующая установкаpyqt5
, используйте следующую команду
pip install pyqt5 pyqt5-tools
Дизайн пользовательского интерфейса
Дизайн интерфейсной части с использованиемpyqt5
Встроенный инструмент графического дизайнаdesigner
, преимущество простое и удобное в использовании, что вы видите, то и получаете. Создается после завершения проектированияui
Файл можно легко преобразовать всего одной командойpython
код.
первый открытыйdesigner.exe
,СоздайтеMain Window
В интерфейсе есть 2 кнопки и текстовое поле (используйте текстовое поле для отображения изображения), соответствующиеpyqt5
средний даpush button
иlabel
, слеваwidget box
Найдите и перетащите в среднюю рабочую область, свойства элемента можно изменить справа
2 кнопки, расположенные с использованием вертикальной компоновки
Компоновка кнопок и текстовое поле с использованием горизонтальной компоновки
Для того, чтобы адаптировать компоновку, то есть при увеличении или уменьшении размера окна пропорция элементов интерфейса все равно сохраняется, можно щелкнуть правой кнопкой мыши в пустом месте и выбрать Макет --> Горизонтальная компоновка
Свойства макета, те же, которые должны быть изменены соответствующим образом
Скорректированный интерфейс
Наконец, сохраните и сгенерируйте.ui
файл, затем черезpyqt5
Предоставленный инструмент преобразования будетui
файл преобразован вpython
Код выглядит следующим образом
pyuic5.bat -o main.py untitled.ui
сгенерированный кодmain.py
такое, что
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '.\untitled.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setSizeConstraint(QtWidgets.QLayout.SetNoConstraint)
self.horizontalLayout.setObjectName("horizontalLayout")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setContentsMargins(-1, -1, 0, -1)
self.verticalLayout.setSpacing(80)
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton_img = QtWidgets.QPushButton(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.MinimumExpanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pushButton_img.sizePolicy().hasHeightForWidth())
self.pushButton_img.setSizePolicy(sizePolicy)
self.pushButton_img.setMinimumSize(QtCore.QSize(150, 100))
self.pushButton_img.setMaximumSize(QtCore.QSize(150, 100))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(12)
self.pushButton_img.setFont(font)
self.pushButton_img.setObjectName("pushButton_img")
self.verticalLayout.addWidget(self.pushButton_img, 0, QtCore.Qt.AlignHCenter)
self.pushButton_video = QtWidgets.QPushButton(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.pushButton_video.sizePolicy().hasHeightForWidth())
self.pushButton_video.setSizePolicy(sizePolicy)
self.pushButton_video.setMinimumSize(QtCore.QSize(150, 100))
self.pushButton_video.setMaximumSize(QtCore.QSize(150, 100))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(12)
self.pushButton_video.setFont(font)
self.pushButton_video.setObjectName("pushButton_video")
self.verticalLayout.addWidget(self.pushButton_video, 0, QtCore.Qt.AlignHCenter)
self.verticalLayout.setStretch(0, 1)
self.verticalLayout.setStretch(1, 1)
self.horizontalLayout.addLayout(self.verticalLayout)
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.horizontalLayout.setStretch(0, 1)
self.horizontalLayout.setStretch(1, 3)
self.horizontalLayout_2.addLayout(self.horizontalLayout)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
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", "PyQt5+YOLOv5示例"))
self.pushButton_img.setText(_translate("MainWindow", "图片检测"))
self.pushButton_video.setText(_translate("MainWindow", "视频检测"))
self.label.setText(_translate("MainWindow", "TextLabel"))
Интеграция YOLOv5 и PyQt5
с вышеуказаннымmain.py
код интерфейса, мы можем добавить его на основеyolov5
Обнаруженный код тоже. Грубо говоря,yolov5
серединаdetect.py
Соответствующий код в .
-
Добавить запись программы
PyQt5
идиоматический способ написанияif __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) ui = Ui_MainWindow() ui.show() sys.exit(app.exec_())
-
существует
Ui_MainWindow
Добавить конструктор в класс__init__
Здесь в основном вызовы нескольких методов, включая построение интерфейса, инициализацию функции слота, инициализацию таймера и инициализацию модели.
-
Обнаружение изображения
выбор изображения и
yolov5
Обнаружение помещается в метод, после обнаружения в текстовом поле отображается картинка с рамкой обнаружения. -
Обнаружение видео
Выбор видео и обнаружение видео двумя способами (оба
slot
), когда выбрано видео, запускается таймер, а затем запускается метод обнаружения видео
загрузка кода
положить проект вgithub
начальство,GitHub.com/Фэнтези/…, сочтите это полезным, пожалуйста, дайтеstar
.