首页 / 资讯中心 / 文章详情

电机转子表面缺陷检测:机器视觉方案从成像到部署实战

电机转子表面缺陷检测:机器视觉方案从成像到部署实战 ★ FEATURED ARTICLE
车间里那种“最后一关全靠老师傅拿手电照”的日子我接手过太多。电机转子这种零件表面又亮又圆缺陷藏在弧面高光里人工拿着强光手电翻来翻去也经常漏掉。后来我们把一套基于机器视觉的电机转子缺陷检测方案跑上了产线不仅把抽检改成了全检还把每天被投诉的漏检问题基本清零。这篇文章不讲花架子就讲我们是怎么从缺陷定义、硬件选型、算法搭建一直做到产线部署和长期稳定的适合正在做视觉检测项目、或者准备把实验室方案往现场迁移的朋友参考。1. 看清缺陷转子表面在视觉系统里长什么样1.1 别急着写算法先把缺陷定义清楚很多项目翻车不是因为算法不行而是因为“缺陷”这两个字根本没定义明白。同样一个黑点在转子铁芯外圆上可能是碰伤在换向器表面可能只是油污判定标准完全不同。所以开始设计视觉方案之前我们跟质检、工艺、设备三拨人关在会议室里把转子所有可能出现的问题列成了一张清单。以我们当时做的某型电机转子为例核心区域包括转子铁芯外圆、端面、换向器表面和平衡孔位。缺陷大概分四类表面外伤类划痕、磕碰、毛刺这类缺陷的特征是形状不规则灰度与周围差异大脏污异物类油污、锈斑、金属屑灰度通常偏低或偏高但是边界往往不锐利加工异常类车削纹路异常、换向器槽内残留、平衡孔漏钻或位置偏移装配缺失类卡簧漏装、磁钢破损、端部绝缘漆剥落。这张表定下来之后后面所有工作才有依据。比如“划痕”我们规定为长度大于等于1.5mm、宽度大于等于0.15mm的线性缺陷“油污”则根据灰度、面积结合形状来判断。没有这个量化过程算法在调参时就会陷入“看着像就是”的泥潭。1.2 人工检测为什么越来越吃力转子转速高、工作环境恶劣表面缺陷直接关系到噪音、振动和寿命。早年产线靠人工目检一个人盯一台设备一分钟翻看十来个转子时间一长眼花是肯定的尤其那些宽度不到0.2mm的细划痕在移动的工件上几乎要靠运气才能发现。人工检测另一大问题是不稳定。夜班、倒班、情绪波动都会影响结果。某一次我蹲在产线统计同一个缺陷样品让三位老师傅看结论竟然分成两种。这倒不是老师傅不认真而是人的视觉判定本身就带有主观性。后来上机器视觉我们追求的不是“比老师傅更聪明”而是“每次都按同一套标准执行”。标准一旦固化漏检率自然就下来了。当然机器视觉不是万能的。转子是圆柱体表面反光很厉害拍摄角度稍微一变同一处缺陷可能呈现完全不同的亮度有些深色划痕在暗背景下几乎隐形。这些难点我们在硬件和算法上花了很大功夫才解决后面逐步展开。2. 硬件链路怎么选一次检测动作背后的成像设计2.1 先算像素再选相机0.1mm缺陷怎么定量我习惯拿到缺陷清单后先干一件事计算需要多大分辨率。这里有个经验公式——最小缺陷在图像上至少占2到3个像素否则分割阶段很容易被当成噪声滤掉。假设我们要检测的最小缺陷是0.2mm的划痕取3个像素那么单个像素对应的物理尺寸是0.2/3约0.067mm。再把单次拍摄视野定为100mm宽所需的横向像素数是100/0.067大约1500。听着不多但转子外圆是个圆弧如果只拍正面两侧边缘会虚焦要保证整个被测区域清晰视野就要放大到120mm甚至更大这时500万像素级别的面阵相机就成了起步配置。如果是检测转子外圆整圈情况又不一样。一个外径80mm的转子周长约251mm用面阵相机拍一圈需要好几张图拼接复杂。更常用的做法是转子旋转一圈用线扫相机配合编码器连续成像展开成一张平面图。线扫方向的分辨率按0.05mm/像素算一圈需要约5000个像素所以4K或更高分辨率的线扫相机是合理选择。面阵方案和线扫方案的取舍我一般这么判断面阵相机适合检测单面局部区域安装简单调试快适合换向器端面或铁芯端面线扫相机适合圆柱外圈连续展开检测全覆盖但需要转台或旋转轴对编码同步要求高多相机组合用于同时检测多个区域注意各站位之间不要互相遮挡。2.2 镜头和光源金属曲面反光怎么压下去镜头选择相对简单核心是算焦距和工作距离。一个常用公式是焦距 工作距离 × 传感器靶面宽度 / 视场宽度。比如工作距离200mm传感器靶面宽8.8mm视场112mm算出来焦距约15.7mm那就选16mm定焦镜头。这里提醒一句不要为了省空间把工作距离压得太短后续加光源、遮光罩、保护玻璃都需要空间。光源才是整个成像设计里最费时间的环节。转子表面是金属镜面反射非常强烈普通打光很容易出现一片死白。我们试过几种常见光源总结如下环形光源适合平面端面均匀性好但碰到亮弧面会产生中心高光低角度条形光能让划痕和轻微凹坑形成明显暗场适合检测外圆表面划痕圆顶无影光源漫射均匀可以显著减少曲面反光适合检测油污和较大区域脏污同轴光源垂直照射适合高反光平面的刻印和换向器片间沟槽。实际项目里我们常用两套光源组合检测外圆划痕用低角度条形光检测端面和换向器用圆顶光加偏振片。偏振片是我特别想强调的金属反射光大部分是偏振光在镜头前加一片偏振片可以滤掉大量镜面反光缺陷区域反而保留原样对比度立刻不一样。2.3 触发与节拍从感应到图像被抓到只要一条硬连线实验室里可以慢慢拍产线上不行。我见过不少项目死在节拍上算法跑得再快图像触发不准也是白搭。我们的建议是从光电传感器到相机触发采用硬连线不经过PLC中转。PLC扫描周期普遍在10ms级别中转一次高速线上可能已经跑过去一个工件了。举个例子转子到达检测工位后光电传感器给出信号相机在5ms内完成曝光图像传给工控机处理整体判定结果在100ms内出来PLC再从IO口读取OK/NG信号。这里每一步都有时序余量产线节拍只要低于这个总时间就能稳定跟随。如果工件是旋转状态最好在旋转轴上装编码器用编码器脉冲触发线扫相机保证每行图像对应的圆周间距一致。我们项目里就吃过没有编码器同步的亏转子转速稍有波动展开图就忽胖忽瘦后续算法完全没法统一处理。3. 算法流水线把“看不清”变成“判得准”3.1 第一步不是分割是让图像“平”拿到一张转子图像第一反应往往是直接做阈值分割但很快会发现阈值根本选不出一致的背景。金属曲面在光照下灰度分布极不均匀同一块无缺陷区域中心和边缘灰度可能差了几十甚至上百。这时候必须先做光照不均校正。常见的做法是形态学背景估计用一个大尺寸的形态学开运算或者均值滤波去估计背景灰度然后把原图减去这个背景得到“平坦化”后的图像。用生活化类比这就像是把一块坑洼地面的“地势起伏”先抹平剩下那些真正突出的坑洞和裂缝反而更好分辨。我们当时的参数大约是背景估计核尺寸50像素平坦化后整体灰度均值拉回到128附近再配合局部自适应阈值。注意核尺寸要比最大缺陷大否则缺陷会被当成背景一起抹掉。3.2 缺陷分割与Blob分析从像素点变成候选缺陷平坦化之后的图像下一步是把缺陷区域分离出来。全局阈值在光照不均场景下不好用我们一般用局部自适应阈值参考窗口大小设为31×31像素偏移量根据现场调试定。这一步会产生很多离散小点用中值滤波或形态学开运算先去掉单点噪声。接下来是连通域分析。我们需要提取每个候选区域的几何特征包括面积、周长、外接矩形长宽比、延伸率、圆形度、主轴方向、灰度均值等。这一步相当于把图像问题变成了表格问题每个候选缺陷一行记录后面所有判断都基于这些数字。这里有个经验值如果最小缺陷对应的像素面积是24像素那么面积阈值设为10像素比较合适。设低了会把噪声误判成缺陷设高了又会漏掉细划痕。还有长宽比划痕通常是细长的长宽比经常大于5而油污则更接近圆形长宽比一般小于2。就凭这一项就能过滤掉大量油污误报。3.3 判定规则和分类器怎么搭规则优先模型兜底是我一直坚持的路线。第一版系统我们只用几条显式规则面积大于阈值、长宽比大于阈值、灰度差大于阈值同时满足才判NG。这种规则的好处是每一条都能回到现场解释出了问题也方便排查。但如果缺陷种类多比如同时要识别划痕、毛刺、锈斑、平衡孔漏打规则就会互相打架。这时可以把提取出的特征放进一个浅层分类器比如随机森林或者支持向量机样本几百个就够训练了。我们不建议一上来就上深度学习因为缺陷样本太少标注成本高而且产线上的稳定性反而不容易把控。深度学习更适合后期积累了大量真实缺陷图之后再引入。一个典型的判定流程伪代码如下def detect_surface_defect(image): roi crop_region(image, rotor_area) flat flat_field_correction(roi, kernel_size50) binary local_adaptive_threshold(flat, block31, offset12) blobs connected_components(binary) for blob in blobs: area blob.area length_width_ratio blob.major_axis / blob.minor_axis gray_diff blob.mean_gray - background_gray if area min_area and length_width_ratio 3 and gray_diff min_diff: mark_ng(blob) return ok_or_ng这套流程跑下来单张图的处理时间大概在50ms左右完全满足产线节拍。4. 现场误报日记三条让我改代码的真实线索4.1 油污和划痕的灰度都会变暗但形状不会骗人项目上线第二天后道反馈“误杀特别多”我们查了NG图片发现大部分是油污。油污在图像上也是暗色区域面积不小灰度差也够按照当时的面积阈值全部被当成划痕判掉了。后来我把两类样本的连通域特征拉出来对比发现划痕的长宽比普遍在5以上而油污多是圆形或块状长宽比不超过2。于是我在判定条件里加入长宽比约束并把面积阈值从20像素上调到30像素误报率立刻降了一个数量级。这件事让我养成了一个习惯拿到误报图像先统计特征分布不要急着调阈值。4.2 平衡孔位置判断先找圆心再量孔距有一阵子系统频繁报警“平衡孔漏钻”可操作工确认孔在只是位置偏了一点。问题出在定位基准上。转子在检测工位上的周向角度每次都有微小差异我最初直接用整帧图像的左上角作为坐标原点孔位置一偏移就触发阈值。正确做法是先用外圆拟合出转子中心建立相对坐标系再在这个坐标系里测量各平衡孔的相对位置和孔径。后来我还加了一个模板匹配步骤先在图像里找到转子端面的定位标记再套用标准孔位模板。这样转子本身的旋转和微小平移都不会影响判断。4.3 光源衰减系统没有漏检只是“瞎了”这个坑最隐蔽。运行三个月后系统漏检率悄悄上升但打开实时画面看图像看起来也还行。后来我们对比了初始图像和当前图像的灰度直方图发现整体灰度均值下降了30多。LED光源在持续工作状态下会慢慢衰减加上车间里的油雾附着在光源表面打出去的亮度越来越弱缺陷对比度也跟着下降。从那以后我们在系统里加了两道保险一是光源控制器选用带电流反馈的型号亮度低于阈值自动报警二是每天开机后用标准校色块拍一张图统计灰度均值如果偏离基准超过15%就提示维护。这个方法成本不高但能避免很多“慢性漏检”。5. 从实验室到产线稳定运行的最后一公里5.1 装在哪、怎么防振动、油雾、强光的现场教训实验室里装好的视觉系统搬到现场往往要重新调一遍。最典型的是振动。冲压、压装设备就在旁边振动传到相机支架上图像模糊半格细小划痕就没了。我们重新设计了一个落地式支架和机床本体完全分离并在相机安装板上加了橡胶减震垫。另一个常被忽略的是油雾。电机产线切削液和润滑油挥发出来的油雾会附着在镜头和保护玻璃上。我们给镜头前端加了保护玻璃并设计了压缩空气吹扫装置每检测间隔吹气一次。保护玻璃要作为耗材定期更换否则光路发雾怎么看都是糊的。还要注意环境光干扰。车间顶灯和焊接弧光会让图像忽明忽暗。我处理的方法是加遮光罩同时检查光源频率。车间灯大多是工频驱动会在图像里产生明暗条纹所以相机曝光时间尽量避开交流电频率的整倍数或者用短曝光把影响降到最小。5.2 结果怎么发出去剔除位置补偿和MES对接算法给出NG信号只是第一步产线还需要把坏件从流线上剔出去。这里有个容易算错的公式从相机拍照位置到剔除气缸之间转子还在随传送带运动所以不能拍完立刻剔除必须做位置补偿。假设传送带速度是0.5m/s相机到剔除气缸的距离是1.2m那么从拍照到执行剔除的延迟时间是2.4秒。程序中要用编码器脉冲实时计算这个延迟或者直接把延迟距离换算成脉冲数。漏了这一步剔除机构打的总是下一个工件现场会以为系统“乱杀”。结果数据还要反向追溯不然每次客诉都要翻录像。我们当时的做法是把每张检测图像、特征数据、判定结果按转子的序列号一起保存同时通过通信模块把检测结果发送给现场的制造执行系统。通信协议尽量选择产线常用的工业协议而不是用简单的TCP/IP裸传否则后期对接每个设备都要改代码。数据格式用JSON最灵活字段名提前和对方IT约定好省得来回扯皮。5.3 长期维护清单阈值、样本、灰度标准的更新节奏上线不是结束而是另一个开始。我一般会在验收后跟客户定一份简单的维护清单每天检查保护玻璃有无油污执行灰度校准每周抽查100个通过件统计误报率和漏报率每月用标准缺陷样件验证系统检出能力更新基准图像每季度回顾所有NG图像补充新的缺陷类型到样本库重新训练分类器。现场的光线、材料批次、前道工艺会慢慢变化没有这套节奏再好的系统也会在半年后变成摆设。我见过一些项目验收时准确率99%三个月后客户打电话说系统疯了其实就是没人管图像质量。回想起来做转子缺陷检测最难的从来不是单个算法而是把“检测”这件事闭环成一整套能跟着产线呼吸的系统。它需要你蹲在现场看缺陷、算节拍、调光源也要你耐得住性子去处理那些看似弱智的误报。如果你正准备做类似项目我的建议是先别急着上高深模型把成像做扎实用规则把标准固化下来留好后期升级的接口。这条路走起来稳踩过的坑也都能平。
阅读完成 · 觉得有帮助?
咨询建站