简介:面向半导体制造与机器视觉初学者的芯片缺陷检测视觉算法资源包,围绕轮廓跟踪、模板匹配、深度学习等核心方法,完整展示从图像采集、预处理、二值化、倾斜校正、腐蚀膨胀到引脚参数显示与缺陷判别的检测流程。压缩包共88个文件,容量约133.26MB,以png/jpg图像样本、sample数据、mp4操作演示、docx实验报告以及cpp/sln等VS工程代码为主,通过实验数据、检测结果和源码的分目录组织,便于按模块对照复盘。已有1375人学习,适合课程设计、竞赛备赛或企业预研。资源内包含多组待检测图像及对应的灰度化、二值化、腐蚀膨胀、倾斜校正和引脚参数显示结果,可直接观察每一步处理对缺陷判定的影响;演示视频和实验报告则分别辅助快速上手软件操作、理解轮廓跟踪与模板匹配的参数调试思路。对于希望搭建芯片缺陷检测原型或验证视觉算法的开发者,是一份能同时覆盖原理与代码实现的学习素材。
1. 项目背后要啃的硬骨头:芯片缺陷检测为什么必须交给视觉算法
芯片制造和封装测试行业的老师傅们应该都清楚,出货前的缺陷检测从来不是一道“可选项”,而是决定批次良率和客户口碑的生死线。崩角、划伤、脏污、引脚偏移、连锡、表面气泡,这些缺陷一旦漏到终端客户手里,轻则退货赔款,重则影响整个供应商评级。过去十几年,这道工序主要靠人工在显微镜下完成,但人工目检的瓶颈非常明确:连续盯几小时后漏检率直线上升,不同检验员对同一缺陷的判定尺度也不一致,新员工培训一个多月才能独立上岗。在产量爬坡的旺季,招不到足够的检验员直接卡住出货节奏。
我最近在处理一个“视觉算法-芯片缺陷检测”的项目包时,核心任务就是把这套人工目检流程替换成机器视觉方案。项目面对的产品形态主要是封装后的芯片颗粒和模块,检测工序位于封装测试的后道环节。这套系统的价值在于:视觉算法可以做到逐颗检测、判定标准统一、检测结果可追溯,还能把缺陷分布数据回传给前道工艺做良率改进。对工厂来说,这不仅是省人的问题,更关键的是把质量判定从“主观经验”变成“可量化的数据资产”。
很多人一提芯片缺陷检测,第一反应就是“用深度学习做一个分类,把好芯片和坏芯片分开”。但真正做过产线落地的人都知道,这事远没那么简单。缺陷检测面临的第一个硬约束是数据极度不平衡:一批芯片里良品占比可能超过99%,缺陷样本少得可怜,有些罕见缺陷甚至几个月才出现几次。第二个硬约束是漏检与误检的权衡:漏检一颗缺陷芯片出货,可能引发客户投诉甚至批量退换货;误检一颗良品,则造成物料浪费和复判成本。这两个问题不解决,算法精度再高也上不了产线。
所以在展开技术细节之前,需要先把整个检测系统的需求边界理清楚。以我手里这批项目为例,需求可以拆成四个维度:
| 需求维度 | 具体指标 | 对算法的含义 |
|---|---|---|
| 缺陷检出率 | 常见缺陷≥99.5%,关键结构性缺陷100% | 对崩角、连锡等关键缺陷不允许漏检 |
| 误检率 | 误检率≤0.3% | 每天上十万颗芯片,0.3%也需要复判人力 |
| 检测节拍 | 单颗耗时≤50ms | 必须满足产线节拍,算法不能拖后腿 |
| 缺陷分类能力 | 区分崩角、划伤、脏污、水渍等类型 | 为后道工艺反馈提供依据 |
这类项目最怕的就是拿着AI模型空谈准确率。准确率99.9%听起来很好,但如果缺陷样本只占0.1%,把全部缺陷都漏掉,准确率依然可以跑到99.9%——这就是典型的“哑巴模型”。所以做芯片缺陷检测,第一步不是急着写代码,而是先把评价指标定义清楚:必须按缺陷类型统计召回率,必须把误检和漏检的成本分别量化,必须把检测节拍作为硬性验收指标。这些前期工作,决定后续技术路线怎么选。
2. 解压项目包后,完整的视觉检测主流程是怎么串起来的
拿到“视觉算法-芯片缺陷检测.zip”之后,第一步不是跑模型,而是先把这个包的目录结构理清。一个规范的视觉检测项目,代码组织通常能直接反映出技术路线。我手上这份解压后大概是这样的结构:
vision_chip_defect/ ├── configs/ # 参数配置,包括相机参数、检测阈值、模型路径 ├── data/ │ ├── raw_images/ # 原始采集图像 │ ├── annotations/ # 标注文件,格式可能是mask或json │ └── augmented/ # 增强后的样本 ├── src/ │ ├── acquisition/ # 图像采集与相机SDK封装 │ ├── preprocessing/ # 灰度化、去噪、图像校正、ROI裁剪 │ ├── alignment/ # 芯片定位与模板匹配 │ ├── detection/ # 缺陷检测主算法,包含分割与分类 │ ├── classification/ # 缺陷分类与等级判定 │ └── visualizer/ # 检测结果可视化与日志输出 ├── models/ # 训练好的模型权重文件 ├── scripts/ │ ├── train.py # 模型训练入口 │ ├── inference.py # 单张图像推理测试 │ ├── evaluate.py # 批量评估与指标统计 │ └── export_onnx.py # 模型导出,用于部署 └── docs/ ├── 数据标注规范.md └── 现场调试记录.md这个目录结构其实已经暗含了标准检测流程,这也是我做过的绝大多数视觉检测项目的通用范式:采集 → 预处理 → 定位 → 检测 → 分类 → 判定 → 输出。
为什么要先定位再检测,而不是直接用大模型端到端识别?这里有一个非常实际的工程原因:芯片在成像视野里的位置和角度并不是完全固定的,传送带轻微抖动、夹具公差、来料摆放误差都会导致芯片在图像里有几个像素甚至几十个像素的偏移。如果不做对齐,直接在原图上做缺陷检测,芯片边缘和背景交界处的变化会被模型当成缺陷,误检率立刻飙升。而先通过模板匹配或轮廓定位把芯片统一校正到标准坐标系下,缺陷检测只需要处理“芯片内部区域的微小异常”,模型学习的任务边界清晰得多,准确率和稳定性都会大幅提升。
具体到流程中的每个环节,通常是这样分工的:
- 图像采集:通过面阵或线阵相机拍摄芯片表面,光源是关键变量,后面单独展开。
- 预处理:把彩色图转灰度,做中值滤波或高斯滤波抑制噪声,再进行光照归一化,减少环境光波动的影响。
- 芯片定位:利用模板匹配(例如归一化互相关NCC)或形状匹配,找到芯片在图像中的位置和旋转角度,然后通过仿射变换将芯片区域裁剪并矫正为标准方向。
- 缺陷检测:在矫正后的图像上,对每个芯片区域提取可能缺陷。这一步有两种路线并存在工程里——基于图像差分/阈值分割的传统方法,和基于深度学习的语义分割/目标检测方法,两者互补。
- 缺陷分类与判定:把检出的缺陷区域送入分类器,判断缺陷类型(崩角、划伤、脏污等),再根据缺陷面积、位置、数量等结合工艺规则做良品/不良品判定。
- 结果输出:把判定结果标记到原图上,生成检测报告,并通过通信接口把数据上报给MES系统或PLC。
这个流程里最值得细说的,是第4步和第5步的算法选型与实现方式。传统图像处理和深度学习之间不是谁取代谁的关系,而是按照缺陷形态、算力资源和数据规模来分工的。关于这一点,下面单独用一章来讲清楚。
3. 先别急着调模型:成像方案和数据质量决定算法的上限
干视觉检测这行有个共识:**算法是天花板,但成像系统和数据质量是地板,地板不牢,天花板再高也没用。**芯片缺陷检测尤其如此,因为很多缺陷的尺寸只有几十微米甚至几微米,光源角度稍微不对,同一颗芯片上的同一个缺陷可能就“隐身”了。
在解压项目包、跑通代码之前,必须先确认成像环节是否到位。以我这次的项目为例,需要检测的最小缺陷尺寸是0.02mm,也就是20μm。按照经验法则,一个要检测的最小缺陷至少应该覆盖3到5个像素,否则算法再强也没有足够的特征。按3个像素估算,图像分辨率需要达到0.02mm / 3 ≈ 0.007mm/pixel。如果视野是10mm×10mm,那么相机分辨率至少需要1428×1428像素。实际工程中通常会留出余量,我最终选择的是2048×2048像素的工业面阵相机,这样既能保证小缺陷可检测,又不会因为分辨率过高导致单张图像太大、处理速度跟不上。
光源的选择同样关键。芯片表面通常有金属引脚、塑封体、字符印刷等不同材料区域,它们在光线下的反射特性差异很大。不同缺陷对光的响应也不一样:划伤通常对低角度光敏感,因为划痕会改变局部反射方向;脏污和胶渍在明场下更容易被看到;而要观察塑封体的表面凹凸和细小裂纹,同轴光往往效果更好。很多项目的实际做法是混合光源——用低角度光和同轴光组合成像,一次采集同时获得暗场和明场信息,再在算法层面对两路图像分别处理。所以编程实现之外,永远要保留一路“调光”的时间预算,这往往是项目中最容易被低估的部分。
接下来是数据准备。这一步我不想讲太多理论,直接说实操中的三个经验:
- 缺陷样本类别的分布不要只看数量,更看形态:崩角和划伤虽然在形态上差异很大,但常见缺陷往往只集中在两三类上。在标注时一定要把关键缺陷类别的样本集中找全,宁可常见缺陷少一点,也别让罕见缺陷完全没有代表性样本。训练集里缺少的缺陷类型,模型在产线上绝对检测不出来。
- 标注的粒度要根据算法需求来定:如果后续用语义分割算法,标注就要画到像素级掩码,把缺陷的边界清楚地标出来;如果只是做有无缺陷的判定,框级标注就够了。标注粒度过细不仅耗时巨大,还会带来标注不一致的问题,不同的人标出来的边界差异可能比算法本身的误差还大。
- 数据增强要克制:很多人在缺陷检测里猛用旋转、翻转、颜色抖动,但芯片图像有强烈的方向性和物理约束,比如字符印刷的方向是固定的,翻转或者大角度旋转创造出来的“假样本”在真实产线上不可能出现,反而会干扰模型学到的几何特征。比较稳妥的增强是轻度平移、小角度旋转、亮度扰动、高斯噪声,以及模拟不同光照条件下的灰度变化。
在这个项目里,我一开始就吃了一个“数据洁癖”的亏。对着训练集反复调参,准确率却一直在某个值附近上不去。后来才发现,原始图像里有将近10%的样本在采集时被光源闪烁污染了,有的图上叠了一层不规则的渐变亮度,模型把这种光照异常当成了正常特征,怎么调都学不好。把脏数据清理掉、重新检查标注一致性之后,指标立刻就有了明显提升。这类经验说明一个问题:在缺陷检测项目里,数据整理和清洗所用的时间,通常比调模型更值得投入。
4. 核心算法模块的工程实现:传统图像处理与深度学习的合理分工
芯片缺陷检测领域里,传统图像处理并没有被深度学习“淘汰”,反而在很多环节里依然承担着不可替代的角色。我的做法是“两条腿走路”:能确定性和快速解决的任务用传统算法,复杂且需要泛化能力的任务交给深度学习模型,两者级联起来,既保证稳定性,也控制算力成本。
4.1 先说说传统图像算法在这套系统里的用处
芯片定位和图像对齐这个环节,用传统的模板匹配就非常有效,不需要上模型。OpenCV里基于归一化互相关(NCC)的模板匹配,针对外形固定、无明显形变的芯片,在矫正旋转后可以做到亚像素级精度。而且它的计算量可控,用金字塔分层加速之后,整幅图的定位耗时可以控制在毫秒级。定位之后再做仿射变换,把芯片区域归一化到一个标准矩形,后续的检测任务就稳定了很多。
缺陷初筛环节,传统算法同样有用。例如在均匀背景下,用差分法把当前图像和标准参考图相减,灰度差异超过阈值的像素就是可疑缺陷点。这个方法简单、可解释性强,特别适合背景相对干净的芯片引脚区域。但它的短板也很明显:只要芯片表面纹理有正常波动、光照有细微变化,差分结果就会冒出一堆伪缺陷。所以传统算法只能用来做“初筛”,真正决定缺陷是否成立的,还得靠后面的判别器。
4.2 深度学习模型怎么选:分割比分类更适合缺陷检出
对于表面缺陷的最终判定,我在这套项目里没有选择简单的图像分类网络,而是以语义分割为主。原因很简单:芯片缺陷往往是很小的区域,在整张图中占比不到1%,如果用分类模型(如ResNet)对整张芯片图片做良品/不良品判定,模型很容易被背景纹理主导,小缺陷很难有效驱动分类结果。更糟糕的是,分类模型无法给出缺陷的位置和轮廓,后续想按缺陷面积做等级判定时根本没有数据支撑。
语义分割模型(我用的是U-Net架构)则可以从像素级别预测每个位置属于“正常”还是“缺陷”,不仅能把细小缺陷像素找出来,还能顺便计算出缺陷的面积、周长、位置等特征。这些几何特征在做等级判定时非常有用,比如:同样是划伤,长度超过某阈值就判废,小于阈值可以返修或降级,这类规则是工厂常用的工艺逻辑,分割结果可以直接对接这些规则。
下面是整个系统的推断主流程代码(简化版),体现了“传统定位 + 深度学习分割 + 规则判定”的级联思路:
import cv2 import numpy as np import onnxruntime as ort def load_models(): # 模板匹配用的参考图 template = cv2.imread("models/template.png", cv2.IMREAD_GRAYSCALE) # 导出为ONNX的U-Net分割模型 sess = ort.InferenceSession("models/defect_unet.onnx", providers=["CUDAExecutionProvider"]) return template, sess def infer_one_image(img_bgr, template, sess): gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray, (3, 3), 0) # 1. 模板匹配定位 res = cv2.matchTemplate(gray, template, cv2.TM_CCOEFF_NORMED) _, max_val, _, max_loc = cv2.minMaxLoc(res) if max_val < 0.7: return None # 定位失败,可能芯片缺失或角度异常 # 2. 对定位区域做仿射校正,裁剪固定大小的ROI rect = cv2.getRectSubPix(gray, (128, 128), max_loc) roi = cv2.resize(rect, (256, 256)).astype(np.float32) / 255.0 # 3. U-Net推理,输出像素级缺陷概率图 input_tensor = roi[None, None, ...] pred = sess.run(None, {"input": input_tensor})[0][0, 0] defect_mask = (pred > 0.5).astype(np.uint8) # 4. 后处理:形态学操作去除孤立噪点 defect_mask = cv2.morphologyEx(defect_mask, cv2.MORPH_OPEN, np.ones((3, 3), np.uint8)) # 5. 提取缺陷轮廓,结合面积和位置做判定 contours, _ = cv2.findContours(defect_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) defects = [] for cnt in contours: area = cv2.contourArea(cnt) if area > 100: # 面积阈值,过滤微小噪声 x, y, w, h = cv2.boundingRect(cnt) defects.append({"bbox": (x, y, w, h), "area": area}) return defects4.3 为什么要把传统算法和深度学习串成级联
直接在整个芯片ROI上跑分割模型,每张图推理耗时大约在180到250毫秒,这个速度对产线来说是不可接受的。用传统算法先做便宜、快速的初筛,只在少量可疑区域跑分割模型,整体耗时可压缩到40到60毫秒,满足产线节拍。
具体做法是把传统差分得到的可疑区域扩大一定比例后作为“候选框”,只把这些小图送进分割模型。因为大部分芯片区域都是干净的,初筛后真正送入模型的候选区域往往只占全图的5%左右,算力消耗大幅降低。这个级联结构在前面的代码示意里没有完整展示,但实际部署时就是按这个思路做的:先跑全局的传统初筛,再跑局部的深度学习确认。
模型训练方面,我也简单说一下。U-Net的输入尺寸是256×256,训练数据以缺陷样本为中心裁剪,结合4.2节提到的增强策略。训练时我用了Focal Loss,原因是缺陷像素占比太小、正负样本严重不平衡,普通的交叉熵损失会倾向把所有像素预测为背景。Focal Loss通过调制因子降低易分类样本的损失权重,让模型把注意力集中到那些稀少但关键的缺陷像素上。这个设计对缺陷分割效果的影响非常明显,在第一次实验中,改用Focal Loss后分割Dice系数从0.71提升到了0.84,肉眼可见地减少了漏检。
5. 模型落地中的常见坑与排查链路:误检、漏检、性能瓶颈
这一章聊聊这次项目里踩得最深的三类坑。每一类都经历了“现象 → 排查 → 定位根因 → 修复”的完整过程,过程本身比答案更有参考价值。
5.1 坑一:模型“装睡”——把所有芯片都判为良品
第一轮训练结束后,平均准确率99.2%,看起来还不错。但当我单独统计缺陷样本的召回率时,发现只有11%。也就是说,模型实际上把所有芯片都判成了良品,靠着99%的良品占比把平均准确率刷上去了。这就是典型的类别不平衡导致的“装睡模型”。
排查链路是这样的:先打印测试集的混淆矩阵,发现预测结果里根本没有“缺陷”这一类;再检查训练时的损失曲线,发现Focal Loss没有生效——因为我当时用的是普通交叉熵,模型发现把所有像素预测为背景就能获得很低的loss,于是一路“躺平”。修复方案分两步:一是把损失函数换成Focal Loss,二是调整采样策略,在训练时把缺陷样本做重复采样,保证每个批次里至少有20%的缺陷样本。改完这两处之后,缺陷召回率才从11%拉高到86%。
5.2 坑二:误检率爆炸,脏污水渍全被判成缺陷
召回率拉起来之后,误检率又开始让人头疼了。模型把注塑压痕、水渍、微弱指纹造成的局部灰度变化统统指向了“缺陷”,每天产生上千个误报,复判员几乎没省一点力气。
这次排查我用了模型可视化工具Grad-CAM,把模型在误检样本上的关注区域画出来,发现模型其实没有真正学到缺陷的“结构特征”,而是在学习“局部亮度突变”。哪些地方比周围暗/亮一点,模型就兴奋。这是因为训练集里负样本太“干净”了,全是完美无瑕的良品,导致模型从没见过“正常的脏污”“正常的灰度波动”,于是所有偏离都成了缺陷。
修复的关键不是盲目调模型,而是给模型投喂“艰难负样本”。我从产线历史图像里挑选了几百张明显有灰度波动但实际是良品的图,放进训练集作为负样本。同时在后处理环节加了规则约束,例如缺陷最小面积阈值、目标区域的圆形度、缺陷位置是否在引脚或封装边缘等。这个“数据纠偏+规则兜底”的组合拳打下来,误检率终于从日均上千降到不足0.2%。
5.3 坑三:实验室跑得好好的,一上产线就“翻车”
这是所有算法工程师都怕遇到的情况:在办公室测试集上精度指标很漂亮,模型部署到产线后立刻被打回原形。我这次项目的“翻车点”在于换线换料后的界面差异。前一条产线的芯片表面是哑光塑封体,后一条产线换成了亮面材料,光洁度不同、反光特性不同,模型在部署当天的首次误检就翻了两倍。
排查过程中我先做了一次灰度直方图对比,发现两条产线的图像亮度分布差异显著。这说明当时训练数据里没有覆盖这款新材料的成像特性。解决办法是在图像入口增加在线灰度归一化:在线运行前用统计学方法把图像均值拉伸到标准范围,再进入算法流程,最大程度消除不同批次材料对灰度分布的影响。与此同时,快速从现场采集了2000张新材料的样本,包含良品和缺陷两种类型,用细调后的模型重新验证并灰度发布。
这次的教训被我总结成一条经验:做视觉检测项目,算法部署后留出两到三周的“现场适配期”是常态,不要指望模型一次性适配所有材质、所有光照条件。现场要做的不是反复调参,而是收集真实分布的数据,反复迭代标注数据和微调模型。迭代速度越快,项目稳定得越早。
6. 从Demo到产线可用:部署优化与指标验收要盯紧的几件事
模型在原型验证阶段跑通,只算完成了50%,剩下的一半在部署、优化和验收。这一章讲几个我认为最值得注意的落地细节。
6.1 部署推理加速,别让算法拖了产线后腿
算法模型原本用PyTorch跑GPU推理,单张256×256图像分割大约需要30到50毫秒,加上预处理和级联流程,单颗芯片总耗时约55到75毫秒,超过50ms的节拍要求。我用ONNX Runtime将模型导出后推理速度提升到20毫秒左右,整体总耗时压到40毫秒以内。如果还需要进一步加速,可以考虑:对ROI做更精细的裁切,避免无用区域进入模型;对传统算法里的形态学操作改用OpenCV的并行版本;或者用TensorRT做INT8量化,但这需要重新校准,且要小心量化后会不会导致极小缺陷漏检——量化后的精度损失在缺陷检测场景中不能忽略,我这次没有冒这个险。
提示:涉及模型量化和推理框架转换,上线前必须用覆盖完整缺陷类型的验证集重新跑一遍指标,不能只看速度。量化掉的小缺陷区域往往集中在边缘细节上,肉眼不仔细看根本发现不了指标发生了变化。
6.2 上线前的验收指标怎么定才靠谱
验收不能只看平均准确率,我比较推荐按缺陷类型分开统计召回率,并分别对“缺陷→良品”的漏检和“良品→缺陷”的误检做成本定义。
我这次采用的验收口径如下表所示,这在和工艺及质量团队沟通时非常有效,因为对方能清楚知道每种缺陷被检测到的概率,而不是听一个模糊的“准确率99%”。
| 指标项 | 目标值 | 统计口径 |
|---|---|---|
| 崩角召回率 | ≥99.8% | 关键结构缺陷,绝对不允许漏 |
| 引脚连锡召回率 | ≥99.5% | 影响电气连接的缺陷 |
| 划伤/脏污召回率 | ≥98.0% | 外观类缺陷,允许一定容差 |
| 整体误检率 | ≤0.3% | 误检部分自动送去人工复判 |
| 单颗检测耗时 | ≤50ms | 从图像采集到结果输出的端到端时间 |
这个表里每一项背后都有代价:关键缺陷漏检可能导致批次报废甚至客户投诉,所以召回率目标定得极高;外观类缺陷容忍度稍大,因为不影响功能,但会影响外观品质评分;误检率控制在0.3%以内,是考虑到复判人力成本——超过这个数,产线就需要增加复检工位,失去自动化意义。
6.3 系统上线后,我给自己的三条复盘经验
项目从解压zip包到正式稳定运行,前后经历了一个多月。这个过程中有一些体会,想留在这里给后来做同类项目的人参考:
第一,数据资产比模型权重更值钱。项目结束时最沉淀下来的反而不是那个训练好的权重文件,而是一套带标注的缺陷样本库。这个库覆盖了崩角、划伤、脏污、水渍、塑封体异常、引脚连锡等真实缺陷类型,每一张图都跟着当时的产线工况记录。以后遇到新材料、新工艺,这些历史数据能让模型迭代的起点高得多。
第二,规则和模型要互相兜底。纯规则容易误判,纯模型容易漏检。在生产环境压力下,我最终采用的是“模型出软概率、规则出硬判定”的双保险模式:模型输出缺陷概率图,规则层负责结合缺陷面积、位置、缺陷类型等做最终放行/拦截决策。这样做既保留了模型的泛化能力,又让工艺人员可以通过调整规则阈值来微调系统行为,不用动不动就重新训练模型。
第三,异常情况必须有独立的兜底逻辑。例如芯片被传送带卡住导致定位分值为负、图像采集过程中光源突然闪断等异常,这类情况如果直接交给算法“硬猜”,很可能给出一个看似正常但完全错误的判定结果。我在这套项目里专门加了一条“异常通道”:当定位置信度低于阈值、图像整体亮度超范围或灰度标准差异常时,直接将该芯片判为“人工复检”,而不是让模型给出一个“自信的错误答案”。这种设计在产线运行中救了不少次——有几次光源衰减已经非常明显,全靠这个兜底逻辑把异常芯片拦下来,避免了批量误判。
最终,这套视觉算法系统稳定运行后,产线检验人员从每条线白班夜班共6人,压缩为只需保留1人负责异常复判和系统点检,单颗检测节拍稳定在42毫秒左右,常见缺陷召回率达到99.6%以上,误检率控制在0.2%以内。对整个项目复盘下来,我最大的感受是:视觉算法在芯片缺陷检测里的角色,不是简单换掉“人的眼睛”,而是用一套可量化、可追溯、可迭代的体系,把质量判断这件事从“靠人盯”变成“靠数据盯”。只要成像打光扎实、数据积累到位、算法和规则配合得当,这类项目完全可以复用到其他电子元器件的外观检测场景里去。
本文还有配套的精品资源,点击获取