整个框架参考这篇博客: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上了: