视觉检测缺陷——YOLOv5+Deepsort+Pyqt5应用于流水线产品计数及错漏反检测问题

一、背景

        在工厂里面,流水线上产品经常出现“错漏反”的问题或者产品外观出现瑕疵。(错:指的是产品零件、产品型号、包装配件等装错、放错等问题;漏:指的是漏放产品、漏放配件等问题;反:通常指的是产品零件装反、标贴贴反等问题)。为了防范以上问题,流水线上通常都要安排质检岗位,人工检查产品质量,但是人并不能保持百分百的精神专注,将问题产品百分百拦截下来,特别是流水线产能比较高时,如每小时都要检查上千个产品,质检员工就容易出现疲劳,这时问题产品可能就会漏检并流出市场,引发客户投诉。为此可借助计算机视觉,辅助质检岗位检查问题产品,减少问题产品的流出。

视觉检测缺陷——YOLOv5+Deepsort+Pyqt5应用于流水线产品计数及错漏反检测问题_第1张图片

    网图,侵删  

        本篇博客内容主要是对漏放产品问题进行检测。因为被检产品的体积较小且流水线产能较高,员工偶尔会漏放产品,直接出厂一个空包装盒给客户从而导客诉。所以为减少此类问题,采用YOLOv5+Deepsort方案对漏放产品进行检测与计数,用Pyqt5进行开发图形界面。采用400万像素的USB摄像头进行实时拍摄,外加一个USB喇叭通过警报音提醒员工产品出现了漏放,效果图如下(关键信息打了马赛克),当检测到None时,即发现了有产品漏放,程序就会通过警报声报警,经验证检测效果还不错。

视觉检测缺陷——YOLOv5+Deepsort+Pyqt5应用于流水线产品计数及错漏反检测问题_第2张图片

 二、开发过程

1、YOLOv5模型训练

关于YOLOv5模型的使用与训练过程在这就不展开了,网上有很多的教程。在github上下载ultralytics/yolov5的代码后,第一步的是采集图像数据,使用labelimg标注图片,将图片标注分为4类:“a.已包装好的彩盒”,b.“放了产品但未包装的纸托”,“c.漏放产品的纸托”,“d.漏放产品说明书的纸托”,其中c、d类才是重点。分类完毕后进行训练,设置了300epochs,batch 16 ,用CPU进行训练,大致24h便可训练出模型。

2、整合deepsort代码

将deepsort代码整合到YOLOv5中,以实现目标检测与流水计数。Deepsort的了解与如何整合到YOLOv5,推荐点击下方两个链接进行了解。计算机视觉流水计数可用来统计单位时间内的大概产能,为什么说是大概呢,因为视频计数的识别准确度不是100%,总会有些统计失误,但用来得到整体数量是没什么问题的。

DeepSort论文学习_cdknight_happy的专栏-CSDN博客_deepsort

用 YOLO v5+DeepSORT,打造实时多目标跟踪模型

3、pyqt5开发图形界面

 使用的QtDesigner设计整体的界面,网上教程也挺多,在这也不展开。视觉检测缺陷——YOLOv5+Deepsort+Pyqt5应用于流水线产品计数及错漏反检测问题_第3张图片

 4、高级设置项介绍

Yolov5的代码有以下参数要设置,为了提高识别准确度以及方便设置,将一些参数的设置开放出来

   parser = argparse.ArgumentParser()
        parser.add_argument('--deep_sort_weights', type=str,
                            default='deep_sort_pytorch/deep_sort/deep/checkpoint/ckpt.t7', help='ckpt.t7 path')
        parser.add_argument("--config_deepsort", type=str, default="deep_sort_pytorch/configs/deep_sort.yaml")
        parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)')
        parser.add_argument('--source', type=str, default='data/images', help='source')  # file/folder, 0 for self.webcam
        parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')
        parser.add_argument('--conf-thres', type=float, default=GlobalSetting.detectThrehold, help='object confidence threshold')  # 置信度阈值
        parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')  # 做nms的iou阈值
        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='display results')  # 是否展示预测之后的图片/视频 默认false
        parser.add_argument('--save-txt', action='store_true',
                            help='save results to *.txt')  # 是否将预测的框坐标以txt文件形式保存 默认false
        parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')
        parser.add_argument('--classes', nargs='+', type=int,
                            help='filter by class: --class 0, or --class 0 2 3')  # 设置只保留一部分类别,形如0 2 3
        parser.add_argument('--agnostic-nms', action='store_true',
                            help='class-agnostic NMS')  # 进行nms是否也去除不同类别之间的框,默认false
        parser.add_argument('--augment', action='store_true', help='augmented inference')  # 推理的时候进行多尺度,翻转等操作(TTA)推理
        parser.add_argument('--update', action='store_true',
                            help='update all models')  # 如果为True,则对所有模型进行strip_optimizer操作,去除pt文件中的优化器等信息
        parser.add_argument('--project', default='runs/detect', help='save results to project/name')
        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')

1、设置检测阈值

视觉检测缺陷——YOLOv5+Deepsort+Pyqt5应用于流水线产品计数及错漏反检测问题_第4张图片

2、设置数据源是来自摄像头还是视频文件

 视觉检测缺陷——YOLOv5+Deepsort+Pyqt5应用于流水线产品计数及错漏反检测问题_第5张图片视觉检测缺陷——YOLOv5+Deepsort+Pyqt5应用于流水线产品计数及错漏反检测问题_第6张图片

3、设置检测目标检测到多少帧后才判断为真,此设置项是为了减少误判报警的次数

视觉检测缺陷——YOLOv5+Deepsort+Pyqt5应用于流水线产品计数及错漏反检测问题_第7张图片

4、设置检测边缘,第一张效果图中,检测图像是是有个红框的,如果检测到的目标坐标中心在红框内,检测才有效,红框的大小由下方设置。为什么要有这个设置项呢?因为经过实战验证后,发现图像边缘部分的目标检测误报率比较高,因为边缘部分的彩盒都是显露一部分,对于这部分,目标类别不是特别明显,人眼也经常无法判断是属于哪一类,程序当然也会判断不出。所以为了减少误判率,特别加了这个红框限制。

 视觉检测缺陷——YOLOv5+Deepsort+Pyqt5应用于流水线产品计数及错漏反检测问题_第8张图片

 三、小结

 暂时介绍到这里,后续有时间再讲关键代码讲解贴上来。

你可能感兴趣的:(计算机视觉,目标检测,pytorch,深度学习,目标跟踪)