FEATURED · 精选文章

锂电极片毛刺视觉检测:OpenCV+Halcon+Baumer相机实战

发布时间 / 2026/9/9 2:31:00
来源 / 创域科博编辑部
栏目 / 资讯中心
锂电极片毛刺视觉检测:OpenCV+Halcon+Baumer相机实战 做锂电后段工序的朋友对“极片裁切毛刺”这个词一定不陌生。它潜伏在模切、分条、极耳成型每一道工序里一旦刺穿隔膜轻则微短路引发自放电重则直接热失控。这几年我在产线上做视觉检测检测工具链一直围绕 Baumer 相机配合 OpenCV 和 Halcon 这套组合来搭。今天把“防止内部短路”背后真正需要落地的 5 个核心检测方法连同可以抄作业的实战代码一起整理出来给正在做锂电视觉检测或者准备上这套系统的朋友参考。这篇文章适合三类人做锂电池设备集成、调视觉方案的工程师工厂里负责量测系统导入和维护的工艺人员以及刚入门工业视觉、想搞清楚 OpenCV 和 Halcon 在真实项目里怎么用的学习者。我会从需求原理讲到硬件选型再逐个拆解方法最后把现场高频坑和排查思路一并说透。1. 为什么极片毛刺会捅破安全底线检测需求拆解1.1 毛刺如何演变成内部短路锂电池内部是由正极片、隔膜、负极片一层层卷绕或叠片组成的隔膜的作用就是隔开正负极让锂离子通过但不让电子直接通过。极片在裁切时金属箔材边缘受力后会产生不同程度的翻边、卷曲、尖刺这些就是“毛刺”。毛刺一旦穿透隔膜正负极之间就建立了电子通路内部电流直接短路电芯局部发热紧接着就是容量跳水、内阻升高严重时会发生热失控。这里需要纠正一个常见认知并不是所有毛刺都会当场刺穿隔膜。很多毛刺只是“凸出来一截”但在后续卷绕、热压、充放电过程中机械振动加上锂枝晶生长会让毛刺逐步刺穿隔膜。所以我一直建议检测标准不要只看“当前是否刺穿”要看毛刺的高度、长度、形态、数量是否超出工艺冗余量。一般电芯厂内部会有标准比如极片边缘毛刺高度控制在 15~30μm 以下极耳根部毛刺要求更严。不同工艺段差异很大检测方案必须能适配不同阈值。1.2 被检对象与缺陷图谱被检对象是正极铝箔涂布和负极铜箔涂布的裁切边常见位置包括分条后的长边毛刺模切后的极片轮廓边缘尤其是尖角处极耳根部裁切口卷绕或者叠片前的单片极片边缘。毛刺的形态种类很多我归纳成四类缺陷类型典型表现危险程度尖刺细长尖锐凸出边缘亮线明显高容易刺穿隔膜卷边/翻边边缘材料向外翻卷宽度不均中高可能叠加形成短路鱼鳞片连续或不连续的翘起薄片中主要影响极片几何一致性碎屑粘附裁切粉末或小颗粒吸附在边缘低但可能刺穿隔膜也要控检测难点在于极片表面有涂层纹理黑色负极材料吸光而裁切边缘金属暴露反光特性差异大毛刺尺寸极小往往只有几个像素产线速度又常常在几十米每分钟以上。所以整套方案必须从相机、光源、镜头到算法一起考虑不能只盯着某个软件工具。2. 检测系统硬件事先设计光源、镜头与Baumer相机选型2.1 Baumer相机为什么适合锂电毛刺检测Baumer堡盟在锂电视觉检测里出现频率很高我自己的体会是它有几个点特别贴合这种场景GigE Vision / GenICam 标准协议跨平台接入方便无论是接 OpenCV、Halcon 还是自研 C/C# 程序都很少遇到“协议锁死”的问题相机画质扎实、宽动态表现好对高反光边缘和暗色涂层的同框场景能保留更多灰度细节面阵和线阵产品线都全锂电极片检测既可以用面阵做单片检测也可以用线阵做连续分条检测稳定性和长时间运行表现好锂电产线往往 24 小时不停机频繁掉线、丢帧的相机在这种工况下是灾难。选型时不要盲目追高分辨率要根据检测精度和视场反推像素数。比如要求检测毛刺高度 20μm考虑亚像素提升光学分辨率至少要 10μm/pixel那么视场宽度 100mm 就需要 100mm ÷ 10μm 10000 像素。如果相机只剩 5000 像素那物理精度只有 20μm/pixel亚像素也救不回来必须换更高分辨率相机或缩小视场分几次拍。2.2 光学方案选型与成像优化很多人做毛刺检测上来先调算法结果怎么调都测不准问题大概率出在成像。毛刺本质是边缘的微小几何凸起光线在毛刺尖角和正常边缘上的反射差异决定了它在图像里能不能与背景分开。我常用光源方案有两种高角度环形光或条形光让光以较大角度打在极片边缘毛刺凸起处会形成明显的镜面反射亮点适合尖刺和翻边检测同轴光光线垂直照射对被检表面反光均匀对高反光基材上的暗色缺陷更友好。如果极片边缘本身是金属亮面建议优先试同轴光如果是黑色负极涂层吸光严重反而要压低环境光干扰用高角度光源让毛刺亮起来。光源颜色也有讲究蓝光波长短衍射弱在细小尺寸测量上通常比白光、红光更容易获得锐利边缘。不要小看这一点毛刺高度只有几十微米的时候光源波长带来的边缘模糊直接影响测量一致性。镜头方面远心镜头是首选。普通微距镜头在不同工作距离下放大倍率会轻微变化机械振动、极片上浮都会改变测量值远心镜头能保证一定景深范围内图像尺寸基本不变这对精密测量太重要了。不过远心镜头通常价格高、体积大在空间受限的工位上也可以考虑低畸变定焦工业镜头加严格机械限位。2.3 触发与传输链路搭建运动中的极片裁切边检测最稳的做法是硬件触发 编码器同步。相机由编码器信号触发极片走多少距离拍多少张图像不会因为速度波动而拉伸或欠采。软件触发只适合步进式定位拍照如果用在匀速运动的分条机上极片速度稍微波动图像里的毛刺就糊了。传输链路我用的是 GigE 方案要注意网卡配置。GigE 相机全分辨率高帧率下需要开启巨型帧Jumbo Frame并且 Camera Link 或网卡中断调节要合理否则就会遇到莫名其妙的画面撕裂、丢帧。带宽计算也简单帧率 × 宽 × 高 × 像素深度别超过网卡实际可用带宽。比如 500 万像素相机、8bit、60fps数据量是 500万×8×60 ≈ 2.4Gbps超过千兆网极限这时候就需要万兆网卡、多网卡分流或者降低帧率。3. 防止内部短路的5个核心检测方法3.1 方法一Blob分析快速找毛刺OpenCV findContours这是最简单、速度最快的一类方法适合毛刺与背景对比度足够清晰的场景。思路是把极片裁切边缘区域裁出来用二值化把毛刺和背景分开再通过findContours找出所有独立连通域按面积、长度、宽高比等几何特征筛掉噪声。OpenCV 里的findContours大家都很熟悉但实际项目中需要注意轮廓提取模式。毛刺通常是边缘上的局部凸起如果背景噪声较多用RETR_EXTERNAL外部轮廓就够了因为我们要的是最外层缺陷如果毛刺中间有孔洞才需要RETR_CCOMP这类带层级关系的提取方式。一个基础示例import cv2 import numpy as np # pixel_size_um单个像素代表的物理尺寸由标定得到 pixel_size_um 5.0 min_area 30.0 # 最小面积单位像素 max_burr_height_um 20.0 img cv2.imread(electrode_edge.png, cv2.IMREAD_GRAYSCALE) blur cv2.GaussianBlur(img, (5, 5), 0) # 毛刺是亮目标就用 THRESH_BINARY是暗目标就用 THRESH_BINARY_INV _, thresh cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV cv2.THRESH_OTSU) # 开运算去掉零星小点 kernel cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) opened cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel) contours, hierarchy cv2.findContours( opened, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE ) defect_list [] for cnt in contours: area cv2.contourArea(cnt) if area min_area: continue x, y, w, h cv2.boundingRect(cnt) # 毛刺一般窄而长过圆的或过扁的更像噪声 if w 5 * h or h 5 * w: continue burr_height_um h * pixel_size_um if burr_height_um max_burr_height_um: defect_list.append((x, y, w, h, burr_height_um)) # defect_list 里就是超标的毛刺区域这方法的优点是快单幅图毫秒级搞定适合初筛。缺点是只依赖灰度和几何信息当极片表面有涂层颗粒、碳粉、水渍时很容易误判。所以它通常作为第一级检测快速抓出可能的毛刺再交给后续方法复核。3.2 方法二形态学顶帽变换提取弱对比毛刺OpenCV很多时候毛刺的灰度差并没有那么高直接二值化会漏检。这时候我会用顶帽变换Top-Hat。形态学顶帽就是原图减去开运算结果能提取比周围背景更亮的细小特征黑帽变换Black-Hat则提取更暗的细小特征。毛刺在合适光源下往往是边缘上的一小段亮凸起顶帽变换可以把这种局部灰度异常从大面积背景里分离出来。核的大小选择是关键。核太大会把边缘正常纹理也当成毛刺核太小又提不出完整毛刺形态。我通常按毛刺宽度换算先标定出单个像素尺寸假设毛刺宽度目标是 30μm像素尺寸 5μm那么核宽至少 6 个像素。实际可以取 9~15 个像素保留一定余量。import cv2 import numpy as np img cv2.imread(edge_low_contrast.png, cv2.IMREAD_GRAYSCALE) blur cv2.GaussianBlur(img, (3, 3), 0) # 顶帽核水平方向核用来提取边缘上的竖向毛刺 kernel_w 11 kernel cv2.getStructuringElement(cv2.MORPH_RECT, (kernel_w, 1)) tophat cv2.morphologyEx(blur, cv2.MORPH_TOPHAT, kernel) # 自适应阈值适应不同区域的照明差异 threshold_val 12 _, bw cv2.threshold(tophat, threshold_val, 255, cv2.THRESH_BINARY) # 后面同样用 findContours 筛选 contours, _ cv2.findContours(bw, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: area cv2.contourArea(cnt) # 继续按面积、宽高比筛选这个方法的优势是对低于直接阈值的微弱毛刺更敏感。注意顶帽变换对光源稳定性要求更高如果图像整体亮度波动大阈值需要做成动态的比如按每帧灰度均值微调。3.3 方法三Halcon亚像素边缘测量毛刺尺寸measure_posOpenCV 擅长快速找区域但要做严格尺寸测量我更喜欢用 Halcon 的测量工具。Halcon 的measure_pos、measure_pairs可以在指定 ROI 内沿矩形长轴方向提取亚像素边缘位置因为会对灰度剖面做高斯平滑并计算边缘响应极值定位精度可达亚像素级别。毛刺测量思路是把测量窗口放在极片边缘上窗口沿着边缘法线方向提取边缘点。正常边缘应该是条直线毛刺位置边缘会明显凸出计算凸出偏移量就是毛刺高度。HDevelop 示例* 读取图像 read_image (Image, electrode_edge.png) get_image_size (Image, Width, Height) * 在边缘位置生成一个测量矩形 * 参数中心行、中心列、角度、长度半径、宽度半径、插值方法 gen_measure_rectangle2 (MeasureHandle, 260, 512, 0, 100, 20, Width, Height, nearest_neighbor) * 沿测量矩形法线方向提取边缘 * Sigma 平滑系数Threshold 边缘对比度阈值 measure_pos (Image, MeasureHandle, 1.0, 15, all, all, RowEdge, ColumnEdge, Amplitude, Distance) * 将边缘点生成亚像素轮廓 gen_contour_polygon_xld (Contour, RowEdge, ColumnEdge) * 拟合直线用于计算毛刺凸出量 fit_line_contour_xld (Contour, tukey, -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist) * 计算每个边缘点到拟合直线的距离 distance_pl (RowEdge, ColumnEdge, RowBegin, ColBegin, RowEnd, ColEnd, DistanceArray) * 筛选出凸出距离超过阈值的点即为毛刺 threshold (DistanceArray, BurrIndices, 0.8, 9999) defect_count : |BurrIndices|这里fit_line_contour_xld用tukey参数比较抗离群点因为毛刺本身就是偏离直线的点如果算法把毛刺也一起拿去拟合会把参考直线拉斜导致之后算出来的毛刺高度被低估。这一点是实际使用中很容易踩的坑。Halcon 的测量算子单位都是像素最终毛刺高度要乘以标定系数换算成 μm。标定系数可以用已知宽度的标准片拍照计算或者用高精度标定板做像素当量标定。3.4 方法四Halcon模板匹配定位局部区域检测应对误报极片在产线上不可能停得纹丝不动机械振动、输送带不均匀都会让检测区域有偏移。如果直接固定 ROI毛刺可能因为位置偏移落到 ROI 外或者正常的边缘纹理被切进 ROI 而误检。这时候要先做模板匹配定位再在匹配到的位置切开局部检测区域。Halcon 的create_shape_model/find_shape_model很成熟。先用一张标准无缺陷图像建模板运行时找到极片位置和旋转角度再利用仿射变换把检测 ROI 映射到当前图像上。* 离线建立模板 read_image (ModelImage, electrode_template.png) create_shape_model (ModelImage, auto, rad(-45), rad(90), auto, auto, use_polarity, auto, ModelID) * 在线检测 read_image (Image, electrode_current.png) find_shape_model (Image, ModelID, rad(-45), rad(90), 0.5, 1, 0.5, least_squares, 0, 0.9, RowMatch, ColumnMatch, AngleMatch, Score) * 建立从模板坐标到当前图像的变换矩阵 vector_angle_to_rigid (0, 0, 0, RowMatch, ColumnMatch, AngleMatch, HomMat2D) * 将预先定义的检测区域变换到当前图像 affine_trans_region (MeasureRegion, MeasureRegionTrans, HomMat2D, nearest_neighbor) * 在变换后的区域内做毛刺检测 reduce_domain (Image, MeasureRegionTrans, ImageReduced)匹配参数需要说明的是MinScore和NumMatches我一般设置MinScore0.5~0.7只找最高分一个匹配避免极片边缘重复纹理干扰。如果现场有多个极片同时拍照NumMatches按实际数量设。这里还有个小技巧模板区域不用太大包含极片边缘附近一个小局部足够选区太大反而容易受其他图案影响。3.5 方法五深度学习辅助分类压低误报率YOLO/Halcon DL前面几种方法本质都是靠灰度、几何特征来判定毛刺但产线上会有很多“长得像毛刺但不是毛刺”的东西比如涂层颗粒、灰尘、刮痕导致的反光。这些用传统视觉方法很难完全滤干净留到最后往往会变成大量误报停机。深度学习方法能从根本上解决一部分这类问题。我实践中用得比较多的是两类目标检测把毛刺当作小目标训练 YOLO 类模型输出毛刺的候选框和置信度。小目标训练比较吃数据但毛刺语义简单几百张标注图也能有可接受效果Halcon 深度学习分类/分割Halcon 提供read_dl_model、apply_dl_model等算子可以直接加载训练好的深度模型对传统方法检出的候选区域做二次分类判断它是不是真实毛刺。我用 Halcon 做二分类的简化流程是这样的* 加载训练好的深度学习模型 read_dl_model (burr_check.hdl, DLModelHandle) * 对裁剪出来的候选区域推理 * ImageCandidate 是候选毛刺区域的图像 apply_dl_model (DLModelHandle, ImageCandidate, [], [], DLResultHandle) * 取类别概率 get_dl_model_result (DLResultHandle, [], classification, scores, Scores) get_dl_model_result (DLResultHandle, [], classification, classes, Classes)深度学习最大的坑是数据和验证。标注毛刺时不同形态、不同角度、不同光照下的毛刺都要覆盖否则模型在没见过的条件下会乱跳。而且工业现场对误杀很敏感我通常把深度学习放在传统检测的“候选列表”后面只用来做复核不直接做第一检测层。这样毛刺召回率靠传统方法保证误报率靠深度学习压下去两种方法各自发挥优势。4. 完整实战代码从Baumer取图到毛刺尺寸输出4.1 相机取图环节Baumer 相机通常提供 BGAPI SDK 或者符合 GigE Vision 标准的驱动程序。如果是 C 项目可以直接调用 Baumer 的 BGAPI SDK 采集如果是 Python 快速验证也可以使用 harvester一个开源的 GenICam 客户端库或者 Baumer 提供的 Python 包装。采集流程基本一致枚举相机、设置分辨率/曝光/增益、开始采集、等待触发、取回图像数据。我用通用思路写一个流程# 伪代码演示核心取图流程不同SDK接口略有差异 import numpy as np from harvesters.core import Harvester # 创建采集器并加载Baumer的GenTL Producer h Harvester() h.add_file(baumer_gentl_producer.cti) h.update() cam h.create_image_acquirer(0) cam.remote_device.node_map.ExposureTime.value 80.0 # 曝光时间 μs cam.remote_device.node_map.Gain.value 0.0 # 增益 cam.remote_device.node_map.TriggerMode.value On cam.start_acquisition() with cam.fetch_buffer() as buffer: component buffer.payload.components[0] frame component.data.reshape( component.height, component.width, component.num_components ) # frame 就是可交给 OpenCV 处理的图像ExposureTime和Gain不是随便填的我一般先固定曝光让图像亮度达到灰阶中值附近再把增益控制在 0~6dB 以内。增益太高噪声被放大毛刺测量值会抖动增益太低暗部细节丢失微小毛刺和背景黏在一起。曝光时间则要根据产线速度和拖影限制来设运动模糊允许量通常为 0.5~1 个像素速度乘以曝光时间要小于这个值。4.2 OpenCV端完整毛刺检测流程把取图、标定、TopHat、Blob、结果输出串成一条完整流程大概是下面这样。import cv2 import numpy as np # 标定参数 pixel_size_um 5.0 max_height_um 20.0 min_area_px 25.0 kernel_size 11 # 假设已经通过相机拿到一帧灰度图 frame get_frame_from_camera() # 由4.1节接口获得 gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) blur cv2.GaussianBlur(gray, (3, 3), 0) # 第一步顶帽提取亮毛刺 kernel cv2.getStructuringElement(cv2.MORPH_RECT, (kernel_size, 1)) tophat cv2.morphologyEx(blur, cv2.MORPH_TOPHAT, kernel) _, bw cv2.threshold(tophat, 12, 255, cv2.THRESH_BINARY) # 第二步连通域分析 num_labels, labels, stats, centroids cv2.connectedComponentsWithStats(bw, connectivity8) results [] for i in range(1, num_labels): area stats[i, cv2.CC_STAT_AREA] width stats[i, cv2.CC_STAT_WIDTH] height stats[i, cv2.CC_STAT_HEIGHT] if area min_area_px: continue if width 5 * height or height 5 * width: continue # 毛刺高度按连通域高度估算 height_um height * pixel_size_um if height_um max_height_um: x stats[i, cv2.CC_STAT_LEFT] y stats[i, cv2.CC_STAT_TOP] results.append((x, y, width, height, height_um)) # 第三步输出与显示 if results: for r in results: x, y, w, h, hm r cv2.rectangle(frame, (x, y), (x w, y h), (0, 0, 255), 2) cv2.putText(frame, f{hm:.1f}um, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1) cv2.imshow(result, frame)这里用connectedComponentsWithStats而不是findContours是因为它一次就能拿到面积、外接矩形、质心少一层循环代码也更干净。实际项目中如果要画轮廓再用findContours也行。4.3 Halcon端毛刺测量代码示例Halcon 的优势在于测量算子和匹配算子成熟适合对精度要求高的终检。我把模板匹配定位、测量、结果输出串成一个完整例程* 初始化 dev_close_window () read_image (Image, electrode.png) get_image_size (Image, Width, Height) dev_open_window (0, 0, Width / 2, Height / 2, black, WindowHandle) * 模板匹配定位前提已离线创建 ModelID read_shape_model (electrode_template.shm, ModelID) find_shape_model (Image, ModelID, rad(-30), rad(60), 0.5, 1, 0.5, least_squares, 0, 0.9, RowMatch, ColumnMatch, AngleMatch, Score) if (|RowMatch| 1) * 匹配失败直接判为异常 stop () endif * 把检测区域变换到匹配位置 vector_angle_to_rigid (0, 0, 0, RowMatch, ColumnMatch, AngleMatch, HomMat2D) affine_trans_region (MeasureRegion, MeasureRegionTrans, HomMat2D, nearest_neighbor) * 在变换后区域内执行灰度形态学毛刺提取 reduce_domain (Image, MeasureRegionTrans, ImageReduced) gray_range_rect (ImageReduced, ImageMax, ImageMin, 5, 5) sub_image (ImageMax, ImageMin, ImageDiff, 1, 0) threshold (ImageDiff, RegionDiff, 20, 255) connection (RegionDiff, ConnectedDefects) select_shape (ConnectedDefects, SelectedDefects, [area, height], and, [20, 2], [99999, 200]) * 计算每个毛刺区域的最大物理尺寸 count_obj (SelectedDefects, NumDefects) for I : 1 to NumDefects by 1 select_obj (SelectedDefects, Object, I) smallist_rectangle1 (Object, Row1, Column1, Row2, Column2) * 像素高度换算为微米 HeightUm : (Row2 - Row1) * 5.0 // 5.0为标定系数 if (HeightUm 20.0) dev_set_color (red) dev_display (Object) endif endfor这里用了gray_range_rect加sub_image来做局部灰度变化提取实际上相当于一个局部自适应增强比单纯全局阈值更稳。Halcon 的大多数算子都支持批量像素运算性能很好在实时产线上跑完全没问题。5. 现场最常踩的坑与排查方法5.1 毛刺检不出来先别急着调算法我见过太多工程师把毛刺漏检的原因归结为算法差实际上九成问题出在成像端。毛刺在图像里只有 1~2 个像素宽的时候什么算法都救不了。先做三件事看原图边缘锐度把极片边缘放大到 100%看毛刺和边缘的灰度变化是否清晰。如果边缘是糊的优先调光圈、对焦和曝光确认物理分辨率是否足够用标准件算一下每个像素的实际尺寸如果目标是 20μm一个像素就 10μm那容错空间太小最好是 5μm 以下检查光源稳定度光源衰减轻则亮度逐渐波动重则闪烁这会让阈值和测量结果跟着漂。定期用灰阶标准块校正光源亮度是必要的。5.2 误检多想办法加约束而不是加滤镜误检率高的典型处理思路是不断加滤波平滑结果毛刺也被磨平了。更好的做法是从几何和位置上多约束先限制检测 ROI只分析裁切边缘附近的固定带状区域再用最小面积、宽高比、凸出量三个参数同时过滤最后让深度学习做复核。我自己现在的经验是传统视觉方法把候选区域“收紧”深度学习只做二分类误报率能从 5% 降到 1% 以下。5.3 测量数值忽大忽小多半是标定或机械问题同一片毛刺在不同时刻测出来的高度差了 5μm很多工程师会怀疑算法不稳其实先查机械。相机固定支架松动、极片在检测工位上下抖动、光源距离变化都会导致边缘在图像里的位置变化。排除机械因素后再检查标定像素当量标定必须在实际工作距离下进行如果镜头有自动对焦必须锁死否则标定随焦距漂移测量就失去意义。5.4 现场高频问题速查表现象可能原因处理思路漏检小毛刺光学分辨率不足提高相机分辨率或缩小视场边缘一直有亮线光源反射过强降低增益、调光源角度试试同轴光同一工件多次检测结果波动机械振动/相机松动紧固支架检查减振图像偶发撕裂GigE网卡巨帧未开开启Jumbo Frame检查交换机固定阈值失效环境光波动改用自适应阈值或动态阈值候选区域太多ROI太大缩小ROI到紧贴边缘的细长带OpenCV找不到轮廓图像未做预处理先高斯模糊加形态学处理Halcon匹配分低模板与实际差异大换更鲁棒的模板或更新模板6. 评估与落地建议6.1 五种方法怎么选方法精度速度复杂度适用场景Blob分析中最快低高对比毛刺初筛TopHatBlob中高快低弱对比微毛刺Halcon测边缘高中中毛刺高度精测模板匹配局部检测高中高中高位置易漂移的产线深度学习复核高中高误报较多、样本可积累实际项目里我不会只用一种方法通常是组合拳TopHat 做快速候选Halcon measure 测出精确高度深度学习把误报压下去。这个组合在节拍允许的情况下基本能兼顾召回率、准确率和稳定性。6.2 验收指标要提前谈清楚上系统前一定要和工艺、质量部门把验收标准写死否则后期扯皮不断。常规指标至少包括漏检率尽量低于 100ppm、误检率越低越好通常要求 1% 以下、重复性同一毛刺重复检测的极差值、稳定性连续运行 24 小时或 72 小时的漏检/误检变化。另外 GRR 分析一定要做以前我遇到过算法测得很准但人工复判的标准和算法不一致最后产线还是天天报警。视觉系统不是独立存在的要和工艺判定标准校准到同一把尺子上。从我实际经验来说锂电毛刺检测项目能不能顺利交付最大的变量从来不是算法多高级而是光学方案、机械稳定性和验收标准这些“周边”工作有没有做扎实。算法从 90 分做到 99 分很难但成像从 50 分提升到 80 分可能只需要换一个光源、调一个角度效果立竿见影。这也是为什么我一直建议接到这种项目先抱着相机去现场拍几百张真实图片看清毛刺的灰度表现和形态分布再决定用什么算法。磨刀不误砍柴工这句话在视觉检测里放之四海而皆准。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻