ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

机器视觉应用实战:缺陷检测、OCR识别与手眼标定全解析

机器视觉应用实战:缺陷检测、OCR识别与手眼标定全解析 如果你在产线旁边待过几天就会明白“专业的机器视觉解决方案服务商”这个title听起来很唬人但拆开看做的事无非四件帮客户把产品缺陷找出来、把工件位置定住、把尺寸量准、把字符读出来。机器视觉不是一门玄学它是一门让相机、光源、算法和产线设备乖乖配合的工程。这篇文章没有教科书式讲法直接把我这些年经手机器视觉项目的真实经验摊开说从LabVIEW机器视觉零件缺陷检测、OCR识别电子称数值、图像傅里叶变换、忽略小噪点的参数设置到机器人坐标系标定、学习路线和项目落地流程都尽量写成能照着做的实战笔记。适合刚入行的机器视觉应用工程师、准备上视觉方案的设备商和项目经理也适合那些想弄明白“方案商到底在干什么”的甲方朋友。1. 项目概述所谓“专业的机器视觉解决方案服务商”到底解决什么1.1 方案商不是卖软件的是卖“确定性”的见过不少客户拿着一个零件过来说“帮我看看能不能检测”但当他连“要检出多小的缺陷”“节拍几秒一个”“来料有没有油污”都说不清楚的时候你就知道这个项目很难顺利交付。机器视觉方案商的本质不是把代码跑通而是在一段有限时间里把产线上原本波动、模糊、依赖人眼的判断过程变成稳定、可量化、可复现的自动判断。这个目标一句话就能说清但落地要跨的坑可不少。首先是成像光源角度差一点同一个缺陷在图像里可能完全隐身然后是算法阈值、滤波、形态学、Blob分析每调一个参数都要重新跑一批图验证最后是现场光照环境、振动、来料批次变化都会让实验室里99%的准确率瞬间跌到90%。这也是为什么我一直跟团队说做方案商要像做装修而不是卖瓷砖。你光会卖相机、卖光源、卖软件工具没用还得知道它们怎么配合、怎么装、怎么调。客户真正买的不是一套设备是“这条产线装上去就能稳定运行”的确定性。1.2 四个任务类型决定了后面所有技术选型机器视觉项目无论包装得再花哨拆到根上就四类检测类判产品有没有缺陷比如划痕、脏污、缺料、异物。定位类从图像里找到目标的位置和角度引导机器人抓取、贴合、装配。测量类在高精度下量尺寸、直径、间距、角度靠轮廓亚像素和像素当量换算。识别类读字符、二维码、条码比如电子秤数值、DMC码、药盒三期。先确认任务属于哪一类后面才好选相机分辨率、镜头焦距、光源类型和算法工具。检测类最吃打光光源打不好再贵的相机也白搭测量类最在意畸变和标定镜头边缘失真会让尺寸偏差几毫米识别类对字符训练和预处理比较敏感尤其电子秤这种动态、反光、字符不规整的场景。我记得第一次跟客户谈检测项目时他讲了一堆“要智能算法”“要深度学习”后来项目复盘才发现根本需求其实只是把一个外壳上的黑点找出来。用普通阈值加Blob分析就能做根本不需要上深度网络。方案商的价值之一就是帮客户把复杂问题拆成简单问题而不是反过来把简单问题复杂化。2. 核心拆解LabVIEW机器视觉零件缺陷检测怎么落地2.1 缺陷检测的本质先让缺陷“现形”再让算法“挑刺”做LabVIEW机器视觉零件缺陷检测最常碰到的诉求是金属件划痕、塑料件异物、玻璃表面脏污。很多新手上来就想着怎么调算法实际上第一个要解决的是“缺陷在图像里到底长什么样”。一个轻微划痕用垂直打光可能完全看不到换成低角度环形光划痕就会因为散射而亮得刺眼。我习惯把缺陷检测流程拆成四步打光成影、图像预处理、特征提取、结果判定。打光成影就是要让缺陷和背景产生明显灰度差图像预处理通常用中值滤波去噪、顶帽或底帽变换把暗斑亮斑跟背景分离特征提取用阈值二值化加粒子分析算每个连通域的面积、长宽比、圆度结果判定再根据阈值把超过面积或长短径指标的区域判成NG。这里有个容易忽略的细节LabVIEW配合NI Vision做缺陷检测时不要一上来就搞频域或深度学习先把最朴实的形态学和粒子分析跑通拿到一批图看效果再决定要不要升级。很多表面缺陷用顶帽变换加面积过滤已经能解决80%。把基础工具用好吃透比追求炫酷算法有用得多。2.2 机器视觉图像傅里叶变换在缺陷检测里的真实用途机器视觉图像傅里叶变换是很多工程师一听就头大的东西我尽量讲得直白一点。图像本质上是一个亮度矩阵远处看是一张图但在数学上它是由不同频率的“亮度波动”叠加出来的。变化缓慢的地方是低频比如一块均匀的金属背景变化剧烈的地方是高频比如边缘、纹理、划痕。傅里叶变换的作用就是把这堆波动按照频率拆开。拆开之后能干嘛两个最常用的方向一是低通滤波把高频细节抹掉适合去除随机噪声和颗粒感二是高通滤波把大面积背景亮度压平只留下边缘和纹理异常特别适合检测周期性纹理缺陷比如布匹断纱、手机玻璃指纹、印刷品表面的细小刮伤。在LabVIEW环境里可以调用NI Vision的图像FFT相关函数把图像变换到频域用滤波掩膜处理再逆变换回空间域做后续分析和判定。我自己用它处理过一个金属拉丝面板上的划伤问题正常拉丝纹理在频域里是规律方向的高频响应划伤则会破坏这个规律通过定向滤波能很好分离出来。但也要提醒一句FFT处理大图时计算量不小如果产线节拍要求每帧几百毫秒内出结果优先考虑空域滤波加形态学别为了炫技牺牲速度。2.3 机器视觉忽略点数这种参数本质是“物理世界过滤器的数字镜像”做目标计数或粒子分析时常会看到“忽略点数”或类似参数。很多新手以为它是“忽略多少个点不处理”实际它指的是“小于N个像素的目标点就不纳入统计”让算法忽略那些灰尘、反光点、传感器噪声产生的小颗粒只保留面积足够大的真实目标。举个实际场景用LabVIEW的粒子分析去统计黑色塑料件上的白色异物数量时图像里总会有几个因光照不均或灰尘产生的白点如果不做过滤原本只有两个异物结果算出来五六个。这时就可以用形态学开运算先把孤立小点消掉再把类似“忽略点数”的像素面积下限设成比如20像素小于20像素的亮斑不计数检测结果马上就稳定了。但这里有一个坑这个参数不能拍脑袋往上调。你为了省事把下限调到200像素确实把所有噪点都过滤了但真实的小缺陷也被一并忽略NG品直接漏到下游。正确做法是拿一批已经确认的微小缺陷样品反复测试不同像素下限画出一条“漏杀率随参数变化”的曲线挑一个既能压制噪点又不放过真缺陷的值。视觉调试本质就是在两个错误率之间找平衡。3. 识别与引导电子称数值识别和机器人坐标系标定3.1 机器视觉代码识别电子称数值难的不是识别而是读数环境机器视觉代码识别电子称数值听着像是个很小的功能实际做起来特别容易翻车。电子秤屏幕本身不大常见有七段数码管、LCD液晶、TFT数显几种字符形态差异很大再加上屏幕反光、数字快速跳动、单位符号和小数点干扰直接拍照然后用通用OCR去识别成功率低得让你怀疑人生。我的处理思路是先“圈地”再“读书”。第一步是用模板匹配或几何特征定位锁定屏显区域避免全图乱找第二步做倾斜校正和透视变换把屏幕拉正第三步用局部自适应阈值二值化解决反光造成的灰度不均第四步按投影法把每个数字字符切片再单独识别。七段数码管字符边缘会有毛刺和断笔通常还要做形态学膨胀连接把断裂的笔画补上。真正关键的一步是训练自己的OCR字符库。通用OCR引擎不擅长七段数码管因为它笔画特征跟常规印刷体差别很大。正确的做法是采集几十个不同亮度、不同角度、不同数字组合的样本把每个字符的准确标签标好让工具学会这套字体的特征。识别结果还需要做稳定性判断电子秤数值是动态跳变的最好连续抓拍3到5帧对结果做投票取出现次数最多的那个值而不是拿着单帧结果就上报MES。这里再提醒一个点现场安装相机时镜头轴线和屏幕平面要尽量垂直倾斜太大会让字符产生透视变形单靠软件校正总会有余量。如果安装角度躲不开宁可选择大一点的工作距离把位置关系留得更正。3.2 机器视觉和机器人坐标系手眼标定到底在标什么机器视觉和机器人坐标系的关系简单说就是给机器人“指路”。相机看到的是像素坐标机器人运动靠的是自身的世界坐标两者不是一回事。要让机器人根据视觉结果去抓取、贴合、摆放就必须求出一个坐标转换关系这个求取过程就是手眼标定。手眼标定分两类。第一类是Eye-in-Hand相机装在机器人末端上相机跟着机械臂一起动标定板固定在工作台上机器人带动相机从不同角度拍标定板第二类是Eye-to-Hand相机固定在生产线上方机器人带着工具在视野里移动。两者标定思路一致本质都是采集多组“像素坐标对应机器人实际坐标”的点对然后用最小二乘拟合出一个单应性矩阵或旋转平移矩阵。实际操作中可以用标定板加机械臂尖端点动走位。把带有尖锐顶尖的校准针装在机器人末端让针尖分别点到标定板上多个已知物理位置记录每个位置对应的像素坐标再让机器人回到安全位拍照重复多次取足够多点。点位越分散覆盖视野越均匀解算出的矩阵越可靠。标定完成后一定要做反验证机器人随机走几个目标点看看视觉给出的引导坐标是否真的对准了目标误差在允许范围内才算结束。最容易被忽略的一点是标定平面和实际工作平面的高度一致性。2D视觉标定只能补偿一个平面内的映射如果标定板垫高了实际工件放在另一个高度像素坐标换算出来的机器人坐标就会偏差很大。所以现场安装时标定板厚度要跟实际物面持平支架高度要牢靠标定时尽量按同一个方向逼近目标减少机器人机械回差带来的随机误差。4. 学习路线从一个工程师到能带项目的解决方案工程师4.1 机器视觉学习路线先懂图像再懂工具最后懂产线经常有人问我机器视觉学习路线怎么规划我一般建议按四层往上走。第一层是图像处理基础灰度变换、阈值分割、空间滤波、形态学、边缘提取、Blob分析这些是所有工具共通的底层逻辑务必吃透第二层是选一个主工具做深入Halcon、NI Vision配LabVIEW、OpenCV都可以先跟着例子跑通一个完整流程比如读图、二值化、找圆、输出坐标第三层是光学和硬件知识光源类型、相机靶面、镜头焦距、曝光时间明白为什么同一个零件不同打光效果能差出几倍第四层是现场工程能力IO触发、串口/TCP通信、PLC交互、机器人操作。不建议一上来就遍地开花又是学C又是学Python又是学Halcon最后哪个都只会跑Demo。先选一个工具扎下去把二三十种图像处理算子一个个摸清楚再积累光学调试手感这个阶段至少需要两三个月真实项目浸泡。还有个小习惯特别值得养成坚持写“机器视觉学习笔记”每次调试遇到典型问题就把现场图片、参数配置、解决思路记下来。我自己的文件夹里存了大量带批注的图有打光对比图、阈值调试图、缺陷误判图这些案例比任何教程都值钱。因为视觉这行经验密度很高很多问题一旦见过下次再遇到就是看一眼的事。4.2 机器视觉应用工程师的日常和硬技能很多入行两三年的机器视觉应用工程师每天都在跟图像打交道但真正能独立带项目的其实不多。这个岗位需要的硬技能远不止“写代码调阈值”我整理了一个大概的能力框架技能方向具体内容图像处理阈值、形态学、模板匹配、边缘测量、OCR、Blob分析光学成像光源选型、打光角度、偏振/同轴/漫射、环境光抑制软件编程LabVIEW、C#、Python界面搭建、通信、数据库电气自动化传感器触发、IO接线、PLC协议、机器人基本操作现场工程机械支架调整、相机对位、故障排查、验收指标确认这些技能里最容易被人忽视的是“采集稳定图像的能力”。算法再好一张图拍得忽明忽暗、反光乱跳后面的处理全都白搭。一个成熟的工程师到现场第一件事往往不是改代码而是蹲下来调光源、固定曝光、挡环境光确保每一张图拍出来都干净可控。沟通能力同样被严重低估。客户说“帮我检出来”你得能追问出最小缺陷尺寸、误判容忍度、节拍时间、能否加装光源遮光罩还要能跟机械、电气同事对齐安装空间和接口。能把客户模糊的需求翻译成工程师听得懂的技术指标这个能力比多会十个算子都管用。5. 实操过程一个典型机器视觉项目的完整落地流程5.1 项目启动前需求评审和样品测试是最值钱的一步我一直强调机器视觉项目最值钱的环节不是写代码调试而是启动之前的那次需求评审和样品测试。拿到需求别急着出方案先问清楚五个问题缺陷类型是什么最小要检多大节拍是多少来料有没有批次差异现场环境有没有强光和振动。然后把客户手里最典型的良品、不良品、临界品样品各拿几十个到实验室里做打光验证。为什么非要实物样品因为客户嘴里的“划伤”和实际零件上的划伤可能有很大差别。有的是浅划痕有的是深划痕有的是油污误当成划伤只有拿真实样品跑一遍成像流程才知道方案能不能可靠识别。样品量太少也不行至少要覆盖几个批次的典型变化否则验收时新来一批料就把算法打回原形。样品测试阶段还要把调试图像和参数留档形成一份简单的可行性报告。这个报告既是内部判断依据也是跟客户确认验收指标的参照写着“本方案对0.2mm以上划痕检出率99%0.1mm以下不做保证”后面开发过程中就有了边界。5.2 硬件选型相机分辨率、镜头焦距和光源角度怎么定硬件选型最忌讳“用贵的总没错”。我习惯按需求反推。举个例子客户要检测一个宽度100mm的金属件表面划痕要求最小检出0.1mm缺陷工作距离控制在200mm左右。先算相机分辨率。视野100mm除以最小检出精度0.1mm理论上需要1000个像素覆盖整个视野。实际算上边缘畸变和算法余量至少要留2到3倍也就是分辨率达到2000到3000像素选择500万像素级别相机约2500×2000比较稳这样每个像素对应的物理尺寸约0.04mm划痕哪怕是临界尺寸也能稳定呈现。镜头焦距按公式走焦距约等于工作距离乘传感器靶面尺寸除以视野宽度。假设传感器宽约6.4mm工作距离200mm视野宽100mm算出来大概12.8mm一般选16mm规格的镜头既能覆盖视野又留有一点余量。选完相机和镜头光源也得对应调整划痕这类缺陷用低角度环形光比较有效如果工件表面反光严重就加偏振片或者换同轴光。现场安装时不要把相机支架一装就锁死。夹持件、高度调节杆、角度旋转块能多留一个自由度就多留一个到了现场调试会发现光源位置移动5毫米可能就是“看得见”和“看不见”的区别。我甚至遇到过支架角度差了两三度导致图像里缺陷对比度低了20%的情况。5.3 软件调试和验收交付先跑通流程再优化指标软件部分我习惯按“先通后优”的顺序推进。第一阶段只做采集和显示保证手动触发能稳定看到图像确认相机、光源、画面传输都没问题第二阶段加基础流程定位ROI、预处理、二值化、粒子分析输出OK/NG结果第三阶段做参数化界面把光源亮度、阈值、面积下限这些关键参数全部做成可调项让现场调试不用反复改代码第四阶段做日志和图像保存每个NG画面都存下来第五阶段才对接IO和通信处理PLC触发信号、发送结果、联动剔除机构。这里特别想讲一个验收指标问题。很多客户说“要99%准确率”但视觉项目更科学的提法是漏杀率和过杀率。漏杀率指的是把不良品当成了良品放过去这个往往要求无限接近零过杀率指的是把良品误判成不良品这个可以允许一定比例比如3%到5%因为被误杀的还能人工复检漏掉的却会直接流到客户手里。验收时拿上千件盲样测试把两个指标算出来摆到桌面上跟客户一起确认才算交付完成。6. 常见问题与排查技巧实录6.1 现场调试最容易踩的坑做机器视觉项目多了会发现现场出的问题翻来覆去就那么几类。我整理了一张速查表现象可能原因处理方向图像忽明忽暗环境光干扰、相机自动曝光固定曝光参数、加遮光罩、改用受控光源数字偶尔读错字符断笔、反光干扰增加字符训练样本、形态学连通、多帧投票反光工件出现闪点光源角度不当、环境杂散光用低角度光、同轴光、偏振片软件中做中值滤波定位偶尔跳点模板特征不充分、来料旋转波动多用几个特征区域、开启旋转搜索、固定放料方向标定后引导偏差大标定平面与实际物面高度不一致让标定板与工件物面等高重新标定并反验证这些问题里最多见的就是环境光干扰。工厂现场头顶常有照明灯、窗户自然光、旁边设备指示灯都会让图像灰度漂移。处理原则是“物理隔绝优先于软件补偿”能加遮光罩就加遮光罩能固定距离就固定距离让图像信号尽量干净软件算法才能稳定输出。6.2 几个能省几周时间的独家心得最后分享几个我自己踩出来的经验。第一个是建一个“坏图库”把现场每一个NG图像、误判图像、临界缺陷图像全部存下来后面优化算法时反复拿这些图回归测试相当于给算法做持续验证。很多项目维护期效果越来越差就是因为只改了参数却没有保留历史样本。第二个是参数版本管理。视觉调试免不了反复调阈值、面积下限、光源强度我会把这些参数导出成配置文件注明日期和现场环境改之前先备份一份。有一次我调了一个多小时找不到合适的值翻出昨天保存的参数发现现场光源被人动过重新调回角度后问题直接解决。参数文件这个习惯看起来很土但关键时刻能救命。第三个是遇到复杂缺陷时先拆成亮斑和暗斑分别分析。很多表面问题靠一个阈值很难一次切干净把图像分层拆解先找暗色异物再找亮色划痕最后汇总判断比直接调一个全局参数要稳定得多。还有就是要给机械安装留出余量三维可调的相机支架、角度可调的光源支架这两样东西在现场能省下的时间远超你挑选它们时的那点纠结。结合我自己的经验做视觉项目这些年最大的感受是机器视觉拼到最后从来不是算法多高深而是你愿不愿意拿五十个样品一个一个打光试愿不愿意把每张误判图存档归类愿不愿意跟机械和电气同事把坐标方向反复对齐三遍。顺便说一个收尾小技巧每次项目验收完我会把标定图像、样品照片、参数配置文件一起打包装档下次再做类似项目直接翻出上一次的光源角度、镜头高度和阈值范围比从零开始试要快太多了。
返回列表