使用pyqt5做一个简易yolov5图形界面

整个框架参考这篇博客:https://blog.csdn.net/weixin_46267823/article/details/130962860

在原基础上添加了模型选择预测结果修改交并比与置信度这几个功能,还加了多线程,避免因检测时导致主界面卡住。整个界面如下

检测效果如下

模型选择这个模块参考了:https://blog.csdn.net/weixin_41735859/article/details/120507779?spm=1001.2014.3001.5501

主要是能实时添加模型,不需要每次重新启动了。

因为我的数据集比较特殊,检测框太多容易遮挡看不清,因此做了预测结果模块。在做的时候碰到了因为多线程而显示不全甚至还可能出现程序崩溃的情况,参考了白月黑羽用信号机制解决。显示的文字颜色只有3种,在Main_detect.py中添加了下面这段代码。

# 自定义预测框颜色
def color_diy(labels):
    if labels.split(' ')[0] == 'mildew':
        color_1 = 'red'  # (255, 0, 0)
        color_2 = (0, 0, 255)
        return color_1, color_2
    elif labels.split(' ')[0] == 'bend':
        color_1 = 'blue'  # (0, 0, 255)
        color_2 = (255, 0, 0)
        return color_1, color_2
    elif labels.split(' ')[0] == 'damage':
        colors_1 = 'green'  # (0, 255, 0)
        colors_2 = (0, 255, 0)
        return colors_1, colors_2

原yolov5的detect.py中返回的是一个rgb的元组,而将内容打印在界面上的那部分代码貌似不能直接用rgb元组,故只好作罢。

交并比与置信度这个模块只需要将调整好的值传给Main_detect.py中的--iou-thres与--conf-thres两参数即可,我在这遇到的问题是,在预测结果模块中,已经将检测文件导入进了主界面文件中,如果再将主界面文件导入检测文件就会导致循环导入的错,我尝试过单独写一个文件或者类来存放这些值,但是python好像值的修改是单向的,而不是双向,也就是说ABC三个文件,B用来做一个值的中转站和初始化,值可以从B->A,B->C,但是不能A->B->C,A中的值修改后调用B中的方法把B中的值修改,最后C获得B中修改后的值,但结果却是C获得的值仍是B的初始值。所以最后选择将值保存到文件中,不得不说,这样做方便了很多,虽然速度慢了。

在做这个界面的时候也只懂点python,原本想着个毕设增加点工作量,论文多水几个字,顺便熟悉下python和了解下pyqt5,结果在论文和答辩中都没用上。。。

完整项目放github上了:

https://github.com/Sparthon/ui_yolov5.git

使用PyQt5创建一个简易计算器,可以分为以下几个步骤: 1. **导入所需库**: 首先需要导入PyQt5的一些核心模块,如`QtWidgets`用于界面设计,`uic`用于读取并解析UI文件。 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout ``` 2. **设计UI**: 使用`.ui`文件或者直接在代码中编写窗口布局。这里我们可以创建两个输入框、一个显示区域以及四个基本运算按钮。 ```python class Calculator(QWidget): def __init__(self): super().__init__() self.ui = uic.loadUi('calculator.ui', self) ``` 3. **设置事件处理函数**: 对于每个运算按钮,你需要绑定点击事件,获取输入框的数据,执行相应的计算,并更新显示结果。 ```python def button_click(numbers, operator): # 这里假设有一个全局变量result用于存储当前计算结果 global result result += str(numbers) + operator self.display.setText(result) # 模拟加法按钮点击事件 def add(): button_click(10, '+') # ...其他操作符的处理类似 ``` 4. **布局和显示窗口**: 创建窗口布局并将各个元素添加到窗口中,最后显示窗口。 ```python layout = QVBoxLayout() operator_buttons = ['+', '-', '*', '/'] for op in operator_buttons: btn = QPushButton(op) btn.clicked.connect(lambda _, op=op: button_click(None, op)) layout.addWidget(btn) # 输入框和结果显示区域 input_field = QLineEdit() display = QLabel("0") layout.addWidget(input_field) layout.addWidget(display) self.setLayout(layout) self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Calculator() sys.exit(app.exec_()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值