机器视觉这两年是真的火但火到什么程度、能干什么、难不难学很多人其实是一头雾水的。我入行也有十年了从最早的PC-Base视觉系统到现在的智能相机和深度学习检测大大小小做了几十个项目天天跟镜头、光源、算法打交道。今天这篇不整那些玄乎的理论就把机器视觉是怎么回事、项目怎么做、坑在哪里用大白话讲清楚。不管你是刚入门的新人、想转行的工程师还是老板想评估上不上视觉项目这篇都适合你。1. 机器视觉到底是什么1.1 别再被概念绕晕了它就是个电子眼加电子脑机器视觉拆开看就是让机器拥有视觉能力。但本质上它干的事情特别朴素用相机代替人眼来看用算法代替人脑来判断。你去产线看一眼就明白了。一个零件装没装到位一个标签贴没贴歪一瓶液体的灌装量是否达标——原来这些活儿都是质检员肉眼去看看久了眼睛会累而且每个人标准还不一样。机器视觉要做的事情就是把看得准、判得稳、不休息这三件事用一个系统来替人完成。所以机器视觉的核心就三块成像、图像处理、输出结果。成像靠的是光源、镜头、相机这套光学硬件图像处理靠的是算法传统的有像素分析、边缘提取、模板匹配现在火的则是深度学习、神经网络输出结果就是判断OK还是NG然后告诉机械臂去抓取或者气缸去剔除。这个系统能解决的问题说穿了就四类定位东西在哪儿、测量尺寸合不合格、检测有没有缺陷、识别读码、读字符。不管方案多复杂最后一定落在这四个方向上。1.2 为什么这几年机器视觉突然膨胀了我2015年刚做这行的时候机器视觉在国内还主要在消费电子和汽车行业里用很多工厂老板连听都没听过。但这些年变化特别大三个原因把行业硬生生推起来了。第一是人力成本涨得太快。一条产线上放十个质检员一年光工资就是几十万而且人员流动大、培训周期长管理的隐性成本极高。机器视觉是一次性投入用个五六年基本不用管账怎么算都划算。第二是制造精度要求变高了。手机摄像头装进去的时候位置偏差零点几毫米就会成像模糊新能源电池的极片焊接缺陷只有头发丝那么细。人眼在这个精度级别已经完全无能为力必须靠高分辨率相机和设备视觉。第三是AI技术的爆发。原来很多检测做不了是因为算法太死板——来料稍微有点变化系统就傻眼了。深度学习方法进来之后给个几百张样本系统就能自己学会什么叫缺陷泛化能力强了很多这让之前搞不定的场景变成了可落地的项目。一句话总结电子制造、汽车、锂电、光伏、食品医药、物流分拣——凡是生产线上需要看的地方都有视觉的用武之地。2. 像素精度是怎么被弄丢的很多人刚接触视觉项目时会问为什么要选500万像素的相机而不是200万这个问题背后的核心指标就是像素精度——也就是图像中一个像素代表真实世界的多少毫米。2.1 像素精度的计算公式与关键变量像素精度的公式非常简单像素精度 视场大小 ÷ 分辨率像素数。举个例子你要检测一个宽度为20mm的零件用500万像素相机分辨率2448×2048如果视场刚好调整到20mm宽那X方向的像素精度就是20÷2448 ≈ 0.0082mm/pixel也就是8.2微米。这个精度听起来很厉害了但注意这只是单个像素代表的物理尺寸实际检测精度还要考虑算法稳定性通常要打三到五折。也就是说8微米的像素精度稳定检测的尺寸公差基本要放宽到25到40微米。那到底是什么因素会让这个精度变化我分了四类都是实际项目中遇到过的问题。工作距离的变化。相机到物体的距离变了视场自然就变了。很多产线上的产品高度不统一或者工件在传送带上有跳动都会导致成像尺寸浮动。这也就是为什么现场装配时一定要锁紧支架并且尽量让工件靠在同一个平面上。镜头畸变。任何镜头都有畸变广角镜头的桶形畸变尤其明显——画面中心放大倍率正常边缘就缩小了。标定板标定能修正大部分畸变但如果镜头没锁紧或者换了镜头没重新标定精度就会直接跑偏。我见过一个案子安装工人拧松了镜头锁紧螺丝结果测量数据整体偏了0.15mm排查了大半天。相机安装角度。相机必须尽量垂直于被测物表面。如果有一个微小的倾斜角度图像上就会产生透视误差——靠近相机的部分被放大远离的部分被缩小。所以现场安装时一定要用角度规或者水平尺打平保证镜头光轴和被测面垂直。硬件发热和振动。工业相机工作久了会发热CMOS传感器热膨胀会导致像素位置微移产线的振动如果传递到支架上画面会轻微抖动边缘检测结果就会忽大忽小。这些因素在实验室里完全验证不出来一到现场就会暴露。2.2 像素标定与稳定性测试项目验收的命门解决精度漂移问题的关键是标定。标准做法是在项目调试阶段放一个已知尺寸的高精度标定板比如棋盘格系统自动识别角点并计算像素尺寸和畸变系数。我个人的经验是像素精度至少要在标定后做一次长时间的稳定性测试。方法很简单把工件放在视野的九个位置左上、右上、中央、左下……各测十次看测量值的分布范围。如果最大偏差超过了你预设公差的1/3现场的稳定性就是不合格的必须排查机械重复定位精度、光源变化等问题。这里有个很多人忽略的细节光源亮度变化也会影响精度。因为边缘检测依赖灰度梯度光源变暗或者反光位置变了边缘提取位置就可能偏移一到两个像素。所以选光源一定要选带恒流驱动的不要用那种便宜的、亮度会随温度漂移的灯。像素精度的本质就是用分辨率换物理尺寸。你要知道自己到底需要多高精度反推出需要多大视野、多少分辨率的相机而不是一味选最高像素的那是浪费钱。3. 打光方案才是视觉项目的灵魂我经常跟新入行的同事说做视觉项目七分在光学三分在算法。算法再牛图像拍得烂也白搭。可以说打光打好了项目就成功了一半。3.1 四种核心打光方式选对路子缺陷自己就显形我之前接过一个金属外壳的划痕检测项目。一开始用普通环形光打上去图像里全是反光划痕根本看不出来后来换成低角度暗场照明——光源以极低角度从侧面对工件照射——划痕的散射光进入镜头缺陷立刻变成亮线背景则全是暗的对比度一下就出来了。这就是选光源的思维不同的缺陷形态需要不同的光照方向。我把常用的几种方式总结一下高角度明场照明光源和相机同侧光线以较大角度照射工件。表面平整的区域会把光反射到镜头里呈现亮色凹陷或不平整的区域光被散射掉呈现暗色。适合检测表面平整度、刻字、轮廓。低角度暗场照明光线以极小角度贴近表面照射。平坦表面把光反射到另一侧相机画面中是暗的有划痕、凸起、凹坑的区域会把光散射回镜头呈亮色。适合检测划痕、压伤、异物。背光照明光源放在工件背面工件呈黑色剪影轮廓特别清楚。适合尺寸测量、外形判断、有无检测。同轴光光线经过半透镜垂直照射到工件表面再垂直反射回镜头。适合检测高反光的镜面物体晶圆、玻璃、电镀件。3.2 光源颜色与波长的选择技巧很多人不知道的是光源颜色是有讲究的。不同颜色的光对被照物体的穿透性和反射效果不同。白光能反映物体真实颜色适合彩色检测红光能增强红色和白色区域的对比还能穿透一些浅色塑料蓝光波长更短对细小划痕的散射更敏感紫外光可以激发荧光物质用于特殊的荧光检测。比如检测红色塑料盖上的黑色密封圈用红光照射——红色背景和黑色字体的亮度差异会被放大对比度明显增强。这是一个非常实用的小技巧。还有一个必须注意的点环境光的屏蔽。工业现场往往有自然光、日光灯、甚至焊接弧光这些杂散光会让画面的灰度忽高忽低。所以一定要给相机加滤镜或者物理遮光罩同时选择与环境光波长不同的光源并在算法里做灰度均衡补偿。环境光不稳图像就是泡在浑水里后续一切算法都是空中楼阁。光源控制器也要注意。不要用那种没有恒流功能、亮度随温度漂移的劣质控制器。光源亮度变化两到三个灰度级表面上看不出来但一到边缘检测和阈值分割的时候结果就会不稳定。4. 从零开始的机器视觉学习路线机器视觉学起来杂是因为它横跨光学、硬件、软件和算法四个领域。很多人学了一半就放弃了不是因为他笨而是学习路径太乱——今天看光学明天看Python后天又去调网络模型结果哪个都没学透。我按自己的经验整理了一条相对顺畅的路线。4.1 第一步打好图像处理和编程的底子1-2个月机器视觉的编程语言国内主流是C配合OpenCV或者C#配合Halcon。Python加OpenCV的学习成本最低也适合验证算法思路我建议新手从Python开始。基础阶段要学透的内容Python基础语法、NumPy数组操作图像本质是三维数组OpenCV的核心操作读图、写图、灰度化、二值化、滤波边缘检测原理Sobel、Canny图像形态学操作膨胀、腐蚀、开运算、闭运算我推荐的学习方法是抄代码改参数。拿一张真实的工件图片自己跑一遍边缘检测然后改阈值看看边缘线的变化用自己的话说出为什么。这个过程比看十遍教程都有用。4.2 第二步掌握传统算法和标定2-3个月到了这一步要开始接触实际项目中用的算法了模板匹配、Blob分析、特征提取、标定板标定。熟悉Halcon库的学员可以直接从Halcon入手因为它的图像处理算子封装得极其完善而且在工业界的占有率很高。不会C#没关系先用Halcon的脚本跑通流程理解图像加载→预处理→算法处理→输出结果的逻辑。标定是必须掌握的内容具体包括使用棋盘格标定板、计算内外参、畸变矫正、像素坐标转换到世界坐标。你可以用手机拍一张棋盘格照片用OpenCV的calibrateCamera函数跑一遍标定流程看到重投影误差降下来就会对相机模型有很具体的认识。4.3 第三步深入硬件选型和打光实战2个月这一步很多人忽略了但恰恰是项目的核心竞争力所在。你需要动手做的事情包括用工业相机拍不同物体的照片尝试改变光源角度、亮度、距离记录每一种变化对图像对比度的影响熟悉不同相机的SDK调用海康、大华、Basler的官方库都看看学会用卷尺、游标卡尺计算视场反推选型的相机分辨率和镜头焦距去设备厂家的选型工具算一下已知工作距离500mm、视野100mm应该选什么焦距的镜头这个计算方法和调参经验比会调几个算法函数更难掌握也更有价值。4.4 第四步碰一碰深度学习选学但强烈建议传统算法搞不定的复杂场景纹理背景上的缺陷、高度差异大的外观检测深度学习有压倒性优势。入门用检测模型如YOLO系列就够用了。你需要掌握的是准备数据拍照、标注、训练模型、看指标mAP、召回率、部署到推理环境中。不要一上来就研究复杂网络结构工业场景90%的问题用常规网络就解决了难点在于数据和数据标注质量。5. 解决方案实例拆解一次完整的视觉项目是怎么落地的讲了这么多理论不如来一个真实的案例复盘。我之前做过一个电机转子尺寸在线测量项目整个流程很典型分享出来给大家一个完整的项目思维。5.1 需求分析与可行性评估客户提出需求检测电机转子的外径尺寸精度要求±0.03mm节拍要求每秒检测一个。我拿到需求后的第一反应不是选相机而是先判断可行性。算一下如果视场设为40mm宽要用500万像素相机分辨率2448像素精度约0.0163mm/pixel。按三倍冗余的工程标准这个像素精度下稳定检测误差大约在0.03到0.05mm——也就是说勉强够用但余量不大。建议视场缩到30mm像素精度能提到0.0122mm/pixel。接着要考虑机械结构测外径最好用背光源拍剪影这样边缘最清晰。但产线上转子是立着放的要设计一个导向机构让转子滚动到检测位并保证每次位置的一致性。这些机械需求必须在方案设计阶段就提给客户否则视觉系统做得再好机械不给力也白搭。5.2 硬件选型与打光方案相机500万像素黑白工业相机全局曝光避免运动模糊镜头35mm定焦工业镜头搭配5mm延长环调整最近工作距离光源80mm×80mm背光源配恒流控制器触发光电传感器工件到位后触发相机拍照这里插一句很多新手不知道什么叫全局曝光。卷帘曝光是逐行扫描感光画面中有运动物体时会产生果冻效应边缘变形。全局曝光则是一瞬间同时感光适合拍摄运动物体。做产线检测能上全局曝光就一定不要用卷帘曝光。5.3 算法流程与参数选择算法流程是图像预处理中值滤波去除噪点→ 阈值分割大津法自动阈值把转子从背景中分离出来→ 边缘查找沿固定区间的扫描线找灰度突变的位置→ 亚像素拟合在边缘附近用灰度插值计算更精确的位置→ 像素宽度转物理尺寸乘以标定系数。参数选择上一个容易踩坑的地方是阈值分割。转子表面如果有点反光大津法分割出来的轮廓可能不平整。我的做法是选用背光源拍剪影背景亮、工件暗用固定阈值120分割就很稳定根本不需要复杂算法——把光学做到位算法的压力就小了。5.4 从调试验收到交付我踩过的坑这个项目调试的时候出了三个问题第一震动导致边缘跳动。产线旁边有一台冲床一工作整个平台都在抖。起初测量的标准差达到0.04mm超标了。解决办法是在软件里取十帧图像做平均同时硬件上加装橡胶减震垫双管齐下。第二换型时标定失效。客户后来要加测另一种直径更小的转子。视场不变精度没问题但原来的标定系数还适用吗我重新做了标定——发现只要工作距离不变标定系数确实不变但位置会有偏差需要更新ROI区域。所以做项目的时候一定要把标定和ROI设计的逻辑写清楚方便后续换型时快速调整。第三通信握手不稳定。PLC通过TCP/IP跟视觉系统通信偶尔出现丢包。最后在协议里加了心跳包和重发机制通信稳定之后整个系统的误判率才真正降了下来。完成这些工作项目才算是真正交付。现场稳定运行一个月后客户的验收也顺利通过了。6. 机器视觉面试的核心考点与求职建议聊完了技术我想说说求职这块。这几年视觉工程师的缺口大薪资也水涨船高但面试难度也不低。我面试过不少人也帮朋友模拟过面试总结出考官最喜欢问的几类问题给准备入行的朋友一个参考。6.1 基础概念类问题别只背定义像素精度、检测精度、重复精度的区别是什么镜头畸变如何校正标定板的作用是什么全局曝光和卷帘曝光的区别什么场景用哪个这类问题最容易区分有没有实际经验。例如问到像素精度光会复述公式不行最好能说出在实际项目中检测精度一般是像素精度的1/3到1/5因为还要考虑边缘提取的算法误差和系统的机械重复定位误差这就能让面试官觉得你确实做过项目。6.2 实际场景分析与开放性设计题我印象很深的一道题有一条产线传送带速度是2米每秒要检测产品表面的印刷字符是否有漏印请问怎么设计成像方案这道题考的是技术功底。2米每秒意味着曝光时间内产品会移动曝光时间如果设置为1毫秒产品在曝光期间会移动2mm画面会糊掉所以要么用全局曝光相机配合频闪光源曝光时间短至几微秒要么用线扫相机逐行成像还可以用飞拍的方式在相机抓拍瞬间让传送带短暂停止。从备选的多种方案里挑一个适合场景的并说出理由比背诵任何概念都更有说服力。6.3 个人学习路线与项目经验的呈现面试官一定会问你自学过程中做过什么项目。没有项目经验的人很容易卡在这一关但其实自己做的练习也可以包装成项目——比如我用自己的手机拍了一套机械键盘图做了键帽瑕疵检测也可以当做一个Mini项目来讲。关键是讲出问题、思路、方案、结果、坑这个五段式结构。比如我一开始用边缘检测去定位键帽发现灯光不稳导致误判后来换了光源方向并在算法里加了对比度归一化误判率才降下来——这种过程比我学了下检测算法有说服力得多。我从自己招聘的视角看视觉工程师最值钱的不是会多少个算法而是定位问题的能力和做实验的能力。遇到一个模糊的图像问题你能不能拆成几个可验证的假设然后用控制变量的方式一步步找到原因这是决定你能不能独立负责项目的关键。说实话机器视觉这条路并不轻松——要懂硬件、懂光学、懂算法还得懂一点机械和电气什么都要啃。但也正因为门槛高真正入行的人反而不容易被替代。希望这篇文章能帮你把学习的框架和重点捋清楚少走一些我当年走过的弯路。如果你正准备开始别想太多先动手用相机拍张照片、跑个边缘提取一切就从那里开始了。
阅读完成 · 觉得有帮助?