小车PCB板视觉分拣软件

2024-01-21 17:10
文章标签 软件 pcb 视觉 分拣 小车

本文主要是介绍小车PCB板视觉分拣软件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小车PCB板视觉分拣软件

  • 前言
  • 赛题内容
  • 视觉算法
    • 算法选择
    • 算法实现过程
      • 读入Train并创建模板
      • 读入Test数据
      • 图像预处理与视觉分拣
    • 实际效果
      • 指定读入
      • 顺序读入
  • 其他
    • UI界面设计
    • 数据库
  • DEMO分享

前言

智能制造赛是中国机械工程学会主办的中国大学生机械工程创新创意大赛的一项专业赛事,每年举办一届。本科生组别中,下设四个赛项:工业网络组网与网络安全、生产系统集成与调试、数字孪生与仿真和生产系统分析与优化。
其中,生产系统分析与优化赛题是对生产过程中产生的数据进行处理与分析,通过图像识别、机器学习、人工智能算法等,实现机器视觉质量检测、设备故障预测等分析与优化。

赛题内容

2020年第三届智能制造赛本科组的生产系统分析与优化赛题,是针对流水产线上不同小车PCB板,编写相应视觉分拣程序,对test数据集进行分拣。
已知三种PCB板如下图所示,可以看到0号PCB拥有LED小灯、霍尔传感器、LED数显;1号PCB仅保留霍尔传感器;2号PCB仅保留LED数显。以此为特征,进行视觉算法的撰写。三种PCB板一览
在软件设计中,为方便用户理解,将0号PCB视为1,1号PCB视为2,2号PCB视为3。

视觉算法

算法选择

考虑到3类PCB小车视觉特征均较为明显,而给定的Train每种PCB只有40张数据集,使用神经网络的效果可能不佳。故选用了模板匹配。
train数据集
模板匹配指的是通过模板图像与测试图像之间的比较,找到测试图像上与模板图像相似的部分,这是通过计算模板图像与测试图像中目标的相似度来实现的,可以快速地在测试图像中定位出预定义的目标。匹配的主要思路是使用一个目标原型,根据它创建一个模板,在测试图像中搜索与该模板图像最相似的目标,并寻找与该模板的均值或方差最接近的区域。

算法实现过程

读入Train并创建模板

使用os模块读入train文件,并划定相应区域作为模板,不同种类的小车PCB模板区域需要手动给定值进行截取。

# 保存每一张训练和测试图片的完整路径
train_0 = 'DATA\\Train\\0\\'
train_1 = 'DATA\\Train\\1\\'
train_2 = 'DATA\\Train\\2\\'
train_t = 'DATA\\Test\\'# 定义列表
filenames_0 = []
filenames_1 = []
filenames_2 = []
filenames_t = []
abs_t = []
images = []
tests = []
templates = []
j = 0
# 读入Train中0号小车并提取模板
for (dirpath_0, dirnames_0, filenames_0) in os.walk(train_0):pass
for file in filenames_0:  # 每次只处理一张图片file_path = train_0 + file  # 这张图片的完整路径,file_path是一个str类型的数img = cv2.imread(file_path, flags=1)img = cv2.medianBlur(img, 5)images.append(img)template = img[320:500, 150:300]# cv2.imshow('a',cut) 此处是维护设计,主要为了查看读入图片是否正确及图像处理的结果# cv2.waitKey(0)cv2.imwrite('DATA\\Template\\0\\' + str(j) + '.jpg', template)templates.append(template)j += 1
# 读入Train中1号小车并提取模板
for (dirpath_1, dirnames_1, filenames_1) in os.walk(train_1):pass
for file in filenames_1:file_path = train_1 + fileimg = cv2.imread(file_path, flags=1)img = cv2.medianBlur(img, 5)images.append(img)template = img[140:320, 150:300]cv2.imwrite('DATA\\Template\\1\\' + str(j) + '.jpg', template)templates.append(template)j += 1
# 读入Train中2号小车并提取模板
for (dirpath_2, dirnames_2, filenames_2) in os.walk(train_2):pass
for file in filenames_2:file_path = train_2 + fileimg = cv2.imread(file_path, flags=1)img = cv2.medianBlur(img, 5)images.append(img)template = img[260:510, 500:650]# cv2.imshow('a',cut)# cv2.waitKey(0)cv2.imwrite('DATA\\Template\\2\\' + str(j) + '.jpg', template)templates.append(template)j += 1

读入Test数据

继续使用os模块读入test数据。

# 读入Test数据
for (dirpath_t, dirnames_t, filenames_t) in os.walk(train_t):pass
for file in filenames_t:file_path = train_t + fileabs = os.path.abspath(file_path)abs_t.append(abs)test = cv2.imread(file_path, flags=1)test = cv2.medianBlur(test, 5)tests.append(test)
# print(len(tests))  # 此处是维护设计,以证明test库中数据均读入程序

图像预处理与视觉分拣

对于目标检测图片使用中值模糊对其进行处理,以对椒盐噪声有很好的抑制作用。主要逻辑思路为:假定类型type为0,遍历先前读入的所有模板总计120张,进行模板匹配操作,采用的匹配方式cv2.TM_SQDIFF_NORMED,其特点为匹配值越接近0,匹配程度越高。经测试,设置匹配阈值为0.08。若相匹配,则检测模板下标位,以确定PCB板种类。

global j, type, min_valtarget = cv2.imread(path, flags=1)target = cv2.medianBlur(target, 5)j = 0type = 0for j in range(120):Template = templates[j]theight, twidth = Template.shape[:2]result = cv2.matchTemplate(target, Template, cv2.TM_SQDIFF_NORMED)min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)if min_val <= 0.08:cy2qt2(self, Template)cv2.rectangle(target, min_loc, (min_loc[0] + twidth, min_loc[1] + theight), (255, 255, 225), 2)cy2qt1(self, target)if j <= 39:type = 1breakelif j <= 79:type = 2breakelse:type = 3breakif j == 120:self.label_3.setText("未找到模板,无法匹配")type = 0

实际效果

根据工业上的需要,将分拣功能划分为指定读入和顺序读入(自动和半自动)。

指定读入

在指定读入模式下,用户可以通过搜索,选定存储在test文件夹中的PCB板图片,也可通过选取文件,手动指定图片进行视觉分拣操作。软件后台会记录匹配值、适配模板、识别名、识别时间、识别类型及图像路径并反映至用户UI。
指定读入模式

顺序读入

在顺序读入模式中,用户可以选择全自动模式,输入test中开始与终止图片号(默认全域),点选快速开始进行全自动分拣。
亦可以选择半自动模式,输入test中开始图片号(默认全域),点选开始进行半自动分拣,可以手动切换上一张、下一张,并对图片进行收藏操作。软件后台会记录匹配值、适配模板、识别名、识别时间、识别类型及图像路径并反映至用户UI。
顺序读入模式

其他

UI界面设计

使用pyqt5进行UI设计,可在pycharm中安装工具 QTdesigner进行辅助设计。
QT designer界面

数据库

使用了sqlite数据库,创建DB文件后,在代码中对DB进行连接并修改,用以存储用户名、密码及软件识别分拣结果等内容。如图所示为软件UI中连接数据库,并查看过往识别分拣记录。
历史记录

DEMO分享

资源上传了一个DEMO供大家学习交流,界面相较于完全版有简化,但保留视觉分拣的核心功能。
https://download.csdn.net/download/qq_47842513/86341714

这篇关于小车PCB板视觉分拣软件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/630243

相关文章

Ubuntu 怎么启用 Universe 和 Multiverse 软件源?

《Ubuntu怎么启用Universe和Multiverse软件源?》在Ubuntu中,软件源是用于获取和安装软件的服务器,通过设置和管理软件源,您可以确保系统能够从可靠的来源获取最新的软件... Ubuntu 是一款广受认可且声誉良好的开源操作系统,允许用户通过其庞大的软件包来定制和增强计算体验。这些软件

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank&nbsp;正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money

PDF 软件如何帮助您编辑、转换和保护文件。

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的 PDF 文档软件需求。 不同的 PDF 文档软件程序可以具有不同的功能,因此在决定哪个是最适合您的 PDF 软件之前,请花点时间评估您的

计算机视觉工程师所需的基本技能

一、编程技能 熟练掌握编程语言 Python:在计算机视觉领域广泛应用,有丰富的库如 OpenCV、TensorFlow、PyTorch 等,方便进行算法实现和模型开发。 C++:运行效率高,适用于对性能要求严格的计算机视觉应用。 数据结构与算法 掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、搜索、动态规划等),能够优化代码性能,提高算法效率。 二、数学基础

梳理2024年,螺丝钉们爱用的3款剪辑软件

这年头,视频到处都是,就跟天上的星星一样数不清。不管你是公司里的新面孔,还是职场上的老狐狸,学会怎么剪视频,就好比找到了赢的秘诀。不管是给上司汇报工作,展示你的产品,还是自己搞点小视频记录生活,只要是剪辑得漂亮,肯定能一下子吸引大家的目光,让人记得你。咱们今天就来侃侃现在超火的三款视频剪辑工具,尤其是PR剪辑,你肯定听说过,这货在剪辑界可是大名鼎鼎,用它剪视频,既专业又麻利。 NO1. 福昕轻松

秒变高手:玩转CentOS 7软件更换的方法大全

在 CentOS 7 中更换软件源可以通过以下步骤完成。更换源可以加快软件包的下载速度,特别是当默认源速度较慢时。以下是详细步骤: 前言 为了帮助您解决在使用CentOS 7安装不了软件速度慢的问题,我们推出了这份由浪浪云赞助的教程——“CentOS7如何更换软件源加快下载速度”。 浪浪云,以他们卓越的弹性计算、云存储和网络服务受到广泛好评,他们的支持和帮助使得我们可以将最前沿的技术知识分