工业产品缺陷检测系统(YOLOv5s+PyQT5)
- 前言🎈
- 最终实现效果图💡
- 打开图片
- 检测效果展示
- 界面介绍🤞
- 部分代码展示🌹
- 总结🏆
前言🎈
在之前写过一个web端的检测页面,然后最近写了一个工业产品缺陷检测系统,这次的是电脑可以打开的软件形式的,该项目由YOLOv5s和PyQT5完成。简单记录一下,页面没有很绚丽,但是实现了基本的检测功能,简单易懂!
最终实现效果图💡
还是先看效果图吧,简简单单展示一下
打开图片
检测效果展示
此处使用的权重文件为YOLOv5s微调训练之后得到的!
界面介绍🤞
设计了四个按钮,分别是 打开、检测模型选择、检测、退出系统
- 打开: 选择图片,在代码中已经限制了只能选择图片,比如jpg、png等格式的图片
- 检测模型选择: 此处设计了一个下拉框,可以选择自己想使用的检测模型,比如自己改进的模型或原始模型等等。
- 检测: 该按钮即在选择好模型时,点击即可开始检测。
- 退出系统: 不必解释哈哈懂得都懂
其中, 标题、图标都可以根据自己的需要进行修改。左侧的为原始图片,右侧为检测后的图片。
中下方有一个文本框,显示文件路径、检测结果、文件保存路径信息。
部分代码展示🌹
UI代码
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self) # 初始化UI
# 连接按钮的槽函数
self.pushButtonExit_2.clicked.connect(self.detect)
self.pushButtonExit.clicked.connect(self.exit_system)
self.ChooseFile.clicked.connect(self.choose_file)
#设置图片自适应大小
self.image_label = QLabel(self)
self.label_o_image.setScaledContents(True)
self.label_new_image.setScaledContents(True)
self.label_o_image.setStyleSheet("border: 1px solid black")
self.label_new_image.setStyleSheet("border: 1px solid black")
#设置textBrower中字体大小
self.textBrowser.setStyleSheet("font-size: 14px")
#设置背景透明
#self.setWindowOpacity(0.95)
模型代码
def parse_opt():
parser = argparse.ArgumentParser()
'''
weights:训练的权重
source:测试数据,可以是图片/视频路径,也可以是'0'(电脑自带摄像头),也可以是rtsp等视频流
img-size:网络输入图片大小
conf-thres:置信度阈值
iou-thres:做nms的iou阈值device:设置设备
view-img:是否展元的图片/视频,默认False
save-txt:是否将预音上标以txt文件形式保存,默认False
save-conf:是否将预测的框坐标以txt文件形式保存,默认False
save-dir:网络预测之后的图片/视频的保存路径
classes:设置只保留某一部分类别,形如0或者0 2 3
agnostic-nms:进行nms是否也去除不同类别之间的框,默认False
augment:推理的时候进行多尺度,翻转等操作(TTA)推理
update: 如果为True,则对所有模型进行strip_optimizer操作,去除pt文件中的优化器等信息,默认为False
'''
filepath = "D:\QT-yolov5\yolov5s\data\images\patches_277.jpg"
parser.add_argument('--weights', nargs='+', type=str, default='D:\\QT-yolov5\\yolov5s\\best.pt',
help='model path or triton URL')
parser.add_argument('--source', type=str, default=filepath, help='file/dir/URL/glob/screen/0(webcam)')
parser.add_argument('--data', type=str, default='D:\QT-yolov5\yolov5s\data\neu.yaml',
help='(optional) dataset.yaml path')
parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640],
help='inference size h,w')
parser.add_argument('--conf-thres', type=float, default=0.25, help='confidence threshold')
parser.add_argument('--iou-thres', type=float, default=0.45, help='NMS IoU threshold')
parser.add_argument('--max-det', type=int, default=1000, help='maximum detections per image')
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='show 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('--save-crop', action='store_true', help='save cropped prediction boxes')
parser.add_argument('--nosave', action='store_true', help='do not save images/videos')
parser.add_argument('--classes', nargs='+', type=int,
help='filter by class: --classes 0, or --classes 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('--visualize', action='store_true', help='visualize features')
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')
opt = parser.parse_args()
opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1 # expand
print_args(vars(opt))
return opt
def main2(opt):
check_requirements(exclude=('tensorboard', 'thop'))
r_speed,r_path, det =run(**vars(opt))
return r_speed, r_path, det
if __name__ == "__main__":
opt = parse_opt()
main2(opt)
总结🏆
感觉整体还是可以的,虽然写的工业产品缺陷检测系统,但是大家可以根据自己的需要修改权重文件对其他东西进行检测。 代码也比较容易理解,在此基础上增加其他功能也是较为简单的。
- 如果对该系统感兴趣,可以加qq:1208175466,只需一杯奶茶钱(6.6)😁,源代码全部给你哦🤞
- 挣点辛苦钱,非常感谢大家的支持🌹