ARTICLE DETAIL

资讯详情

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

工业机器视觉系统构成、像素精度与开发流程详解

工业机器视觉系统构成、像素精度与开发流程详解 这套PPT其实是我在公司内部培训时沉淀下来的当时讲的是《工业机器视觉系统的构成与开发过程理论篇—1》面向的是刚转岗过来的算法工程师、调试工程师以及几个要和视觉部门打交道的机械设计同事。整理成博文一方面是方便新人反复看另一方面也是想把这些年踩过的坑、归纳过的经验一次性说出来。考虑到理论篇只覆盖到“系统构成 核心参数 开发流程 学习方法”所以我这篇文章也只谈这些不发生硬扯那些实测案例。整个内容的核心我会放在三个关键词上机器视觉系统构成、像素精度、开发流程。1. 这套讲解PPT的完整骨架以及为什么“作品感”比“念PPT”重要1.1 PPT讲了哪些内容很多朋友一听说要讲机器视觉第一反应就是把相机、镜头、光源、软件逐项列出来每个名词配一张图然后对着投影仪往下念。这样不能算错但听的人会非常疲惫。我这套PPT的顺序是这样的第一块讲工业机器视觉系统的产业级构成。相机、镜头、光源、算法库、工控机这五大件每样会展开到“选型时你该看什么参数”的粒度。第二块讲核心光学与成像参数重点解释像素精度、视野范围、景深、分辨率之间的关系。第三块讲一套通用项目从需求确认到交付的标准流程每个环节输入输出是什么。第四块给了一份机器视觉学习路线的建议以及一些面试高频题目的思考方法。听上去好像很平铺直叙但真正讲的时候我会在每个模块里掺入大量具体项目里的例子比如某次因为景深算错导致成像模糊某次因为光源角度选错导致特征消失。这些真实碎片才是“作品感”的来源。1.2 照本宣科最容易翻车我的做法是“先消化再讲”我见过不少人准备得很努力PPT里塞满了截图和公式结果一开口就是从第一行字读到最后一个句号。听众根本不知道重点在哪也很难产生互动感。后来我每次讲之前都会把所有文字内容先压缩成一张思维导图或者干脆只留标题和关键词然后把每个标题背后的逻辑用自己的话串起来。比如讲到镜头选型我不会照着“镜头由镜片组、光圈、对焦环组成”这种课本句式念。我会换个方式讲你手里有一台500万像素的相机要拍的视野范围是100毫米宽那你的光学系统需要多高的分辨率我们反推一下500万像素一般对应2448乘2048左右宽方向2448个像素覆盖100毫米单像素精度就是0.04毫米左右。这时候你选择镜头时至少要保证镜头的MTF在对应空间频率处没有明显衰减。这样讲听的人马上知道镜头选型的意义是什么是让“相机的能力发挥出来”而不是只背参数名词。1.3 真正让PPT有“作品感”的是被忽略的讲解节奏很多工程师讲技术内容时容易陷入两种极端要么干巴巴念参数要么讲到自己熟悉的细节就收不住把一次培训讲成了组会汇报。我自己的经验是一个章节尽量控制在25分钟左右每过15分钟抛一个互动问题比如“如果让你给这台设备选镜头你会从哪几个参数入手”这种开放性问题不需要标准答案目的是把听众的注意力拉回来。另外我会刻意在PPT里放几张开卷的“实物图”比如拆开的工业相机内部结构图、不同角度打光下的同一零件对比图。因为工业视觉的本质是光线和传感器之间的相互作用图片比文字直观得多。这也是“作品感”很重要的一部分——你要让人觉得你是在讲一个真实存在的场景而不是在讲一个抽象概念。2. 机器视觉系统的构成五大核心组件每个都是独立的工程方向2.1 工业相机不仅仅是“拍得清楚”很多人把工业相机等同于普通摄像头其实这里面差别非常大。工业相机选型时我最先看的是传感器类型、分辨率、帧率、接口、靶面尺寸、像元尺寸、曝光方式和信噪比。其中传感器类型又分CCD和CMOS早期CCD在噪声控制和动态范围上优势突出但最近几年CMOS技术追赶很猛加上成本低、速度快新项目里大部分都改用CMOS了。接口这块也要重点考虑。GigE Vision适合远距离传输线材便宜但是CPU占用会高一些USB3 Vision带宽大连接简单但线长一般限制在3米以内再长就要加中继或者转光纤Camera Link和CoaXPress更多用在高速、高分辨率场景但成本高出不少。我个人的建议是普通项目优先选GigE或USB3到了多相机同步或高帧率场景再考虑更贵的方案。选分辨率时不要盲目追求高像素。分辨率越高视野不变的情况下像素精度确实会提高但同时数据量变大、帧率可能下降、成本也上去了。合理的做法是根据缺陷或特征的最小尺寸反推需要的像素数量再留出2到3倍余量用这个思路定相机而不是上来就买1200万像素。在下一个小节我会专门给出计算公式。2.2 镜头焦距、靶面、景深、畸变一个都不能少镜头是整个视觉系统里最容易“看着差不多就买了”的部件但它恰恰决定了成像的锐度和形变。选镜头我一般按下面这几步来第一步确定接口。常见的有C接口、CS接口、F接口。工业相机大多数是C接口靶面尺寸较大的线阵相机或大面阵相机会用F接口或M42等特殊接口。接口不匹配时需要转接环但转接环会影响法兰距进而影响最远对焦距离所以能不用最好不用。第二步确定焦距。焦距的计算公式是焦距 工作距离 × 传感器宽或高 / 视野宽或高。这个公式很好理解它描述的是相似三角形关系。举个例子如果你的相机靶面宽是6.4mm需要在500mm工作距离下拍到100mm宽的视野那焦距大约是32mm。实际产品里不一定有32mm这个规格那就选接近的35mm或25mm再通过调整工作距离来微调。第三步确认靶面匹配。镜头的成像圈要能覆盖传感器靶面否则画面四周会出现暗角甚至黑角。选镜头时一定要看它标注的“最大兼容靶面”比如1/1.8英寸的镜头去配2/3英寸的相机边缘画质会很差。第四步评估畸变和景深。普通工业镜头在视野边缘会有不同程度的畸变测量类项目要尽量选低畸变型号或者用标定算法做校正。景深则决定了产品高度有波动时画面是不是还清晰。关于镜头还有一个小知识点往往被新人忽略光圈改变的是进光量也改变景深但它改不了镜头的分辨率上限。你在现场调试如果发现图像边缘发虚别一上来就调光圈先查对焦距离和靶面匹配。2.3 光源机器视觉系统里最“吃经验”的一块如果说相机和镜头决定了图像的天花板那光源就是决定你能不能摸到这块天花板的关键。我甚至跟朋友开玩笑机器视觉项目百分之七十的时间都耗在打光上。这话不算夸张因为同样的产品光源角度不同、颜色不同、亮度不同得到的图像可能完全不一样。常用的光源类型有这么几种环形光源适合外形检测、字符识别、表面划伤这类光源能提供相对均匀的照明且安装方便。条形光源适合大面积打光通过角度调整来突出凹凸纹理。同轴光源光路通过半反半透镜打到物体表面后垂直反射回来非常适合高反光表面比如晶圆、镜面金属但缺点是光强利用率低。背光源从背面打光让物体呈黑色剪影适合测量边缘轮廓、尺寸检测这是测量类项目很常用的一种方案。低角度光源贴近物体表面用小角度入射能明显加强表面微细划痕的对比度。打光手法也是门学问。明场成像适合平坦表面暗场成像适合突出划痕和凸起同轴光适合消除反光干扰。具体选哪种一定要拿真实样品去试不要只靠想象。这也是我一直建议公司里配一套多光源试光架的原因很便宜但能省下大量现场调试时间。2.4 算法库、工控机与软件框架把图像变成结果的那一层硬件把图像采回来了后面的工作就是算法和软件的事情。市面上常见的算法库包括Halcon、OpenCV、VisionPro等。Halcon在工业界占有率很高因为它的图像处理算子丰富对多平台支持好还有大量现成的示例程序。OpenCV胜在开源和灵活但做一个复杂测量项目时开发周期往往比用商业库要长。工控机配置主要看图像数据量和算法复杂度。多相机高帧率场景除了CPU要够强内存和硬盘IO也不能瓶颈建议至少16GB内存起步图像存储使用SSD。如果要做深度学习检测还需要增加一块独立的GPU。软件架构上我比较推荐把图像采集、算法处理、结果输出、界面显示分模块解耦。采集模块负责回调图像算法模块跑检测或测量结果模块负责判定OK/NG以及与PLC通信。这样可以方便调试时单独替换某个模块。界面显示用C#做WinForm或WPF底层算法用C封装中间通过回调函数更新图像和结果是目前比较主流也稳定的架构。3. 核心参数详解像素精度、视野、景深到底怎么算才不出错3.1 像素精度的意义以及为什么它是所有选型的第一优先级像素精度指图像上单个像素对应的实际物理尺寸。计算公式很简单像素精度 视野尺寸 / 对应方向像素数。举个例子你的相机分辨率是2448乘2048视野宽度是120mm那像素精度就是120/2448约等于0.049mm也就是49微米。这个参数为什么重要因为它是整个系统的“硬能力上限”。检测0.1mm的缺陷理论上用49微米精度的系统还有希望因为缺陷至少能覆盖2到3个像素算法可以提取出来。但如果你选的是分辨率很低的相机比如640乘480同样视野下单像素精度就到了0.19mm那0.1mm的缺陷可能连一个像素都占不满不管算法多NB都很难稳定检测出来。所以选型时先拍板的不是镜头、不是光源而是“需要达到什么像素精度”这是整个项目的地基。一般来说我会建议最小缺陷尺寸至少对应2到3个像素这样算法还算是“有据可依”否则很容易出现漏检或测量值波动大。3.2 从目标精度反推相机分辨率一个完整示例假设我们要检测一块30mm乘20mm的工件最小特征是0.05mm。按至少3个像素覆盖最小特征来算单像素精度要优于0.05除以3约0.0167mm。视野按40mm宽来算留出余量则宽方向需要的像素数 40 / 0.0167约等于2395。也就是说相机宽方向至少要2400像素左右。市场上常见的500万像素相机2448乘2048就能满足如果希望更稳可以用600万或900万像素。这个计算里有人还会犯一个错误就是把“精度”和“公差”混为一谈。如果你的检测公差是0.1mm不代表像素精度0.1mm就够了。公差是允许波动的范围检测系统一般要做到公差的五分之一到十分之一才能保证测量结果置信度足够高。也就是说公差0.1mm的场景像素精度最好控制在0.02mm以内。3.3 景深和焦深以及它们对现场安装的影响景深是成像系统里很折磨人的一个参数。它指在焦点前后还能保持清晰成像的距离范围。很多工程师只知道“光圈小了景深大”但具体选多大光圈却没什么概念。这里涉及一组比较实用的经验值光圈越大F值越小进光量越大但景深越小光圈越小F值越大景深越大但进光量下降需要更强的光源来补偿。另外一个容易被忽略的是工作距离的影响工作距离越远景深通常越大。现场调试时如果产品在传送带上有轻微跳动或者来料高度公差较大我一般会先把工作距离拉远一些适当缩小光圈让景深覆盖整个波动范围。但代价是光源亮度要跟上否则信噪比下降图像噪点变大算法稳定性反而会变差。这个平衡点必须通过实际样品测试来确定。3.4 为什么机器视觉动了某些东西像素精度会变化热词里有个问题问得很到位机器视觉动了什么会导致像素精度变化这个问题在面试里反复出现在项目现场也特别常见。首先是工作距离变化。相机固定支架松动或者产品高度不一样都会让实际视野范围发生改变因为镜头透视关系没变但物距变了视野自然变化进而单像素对应尺寸就变了。其次是镜头光圈或焦距被碰过。焦距一动视野大小就会变即使只是光圈变了焦点位置和清晰度也会不同边缘提取出来的轮廓和尺寸就会飘。还有光源亮度的变化。很多人以为像素精度只跟视野和像素数有关其实亮度不够时图像二值化边界会发生偏移边缘检测结果也会移动尤其在一些反光或渐变的表面上表现特别明显。这种现象虽然不改变“像素对应真实尺寸”的理论值但会改变算法算出来的边缘位置导致测量结果偏移。最后相机内部传感器温度变化也可能导致像元响应和噪声变化不过这种影响一般没有前几种显著。4. 从需求到交付一套标准机器视觉开发流程的完整拆解4.1 需求澄清阶段先问清楚“要检测什么”和“判据是什么”开发一套视觉系统最忌讳的是需求不清就开始动手。我一般会准备一份简单的需求表至少包含这几项检测对象名称和材质、检测项目外观缺陷、尺寸测量、定位、读码、缺陷类型和大致尺寸、节拍要求、安装空间和距离、现场环境有没有震动、油污、光照干扰。这块看起来像废话但相当关键。举个例子客户说要检测“表面划伤”但“划伤”的定义差别很大宽0.05毫米、长2毫米的算不算是只看一道深划痕还是浅划痕也要查这些不确认清楚项目验收时就会互相扯皮。我自己吃过很多次亏所以现在开始前一定会拉着客户签字确认至少也要有邮件往来留底。4.2 打光实验和样品采集开发流程里最耗时的环节需求确认后我建议直接进入打光实验。打光实验前要先收集至少20到30个样品最好包含良品、不良品覆盖不同缺陷位置和尺寸。打光实验的步骤大致是第一步在试光架上固定相机和镜头大致确定工作距离和视野范围。第二步用不同光源、不同颜色、不同角度依次打光拍摄同一组样品保存图像。第三步对比各组图像的对比度、均匀性、反光情况挑选出缺陷或特征最清晰的光源类型和角度。第四步微调光源亮度、曝光时间、光圈在保证图像不饱和的前提下进一步优化对比度。打光实验往往要反复迭代。比如某次做金属表面的字符识别一开始用环形光源字符边缘总有一圈反光导致对比度不稳定。后来换成同轴光源再把曝光时间降低一点字符一下子就清楚了很多。这种经验只靠看指南是学不来的必须自己动手试。4.3 相机、镜头、光源的配置确认打光确定后再回头确认相机的具体型号、镜头焦距和光源型号。如果前期已经按像素精度倒推过分辨率这一步会很快。配置确认时还要考虑的问题包括是否需要彩色相机一般检测字符、外观划痕用黑白相机就行只有涉及颜色识别或颜色差异检测时才需要彩色。帧率和曝光时间的匹配够不够高速运动的物体要用短曝光时间加外部触发否则会拖影。触发方式用硬件触发还是软件触发产线上一般用光电传感器配合运动控制卡的IO信号做硬触发这样图像不会因为传送带停启抖动而错位。4.4 软件编写和标定算法跑通只是第一步软件架构按前面说的模块化思路来写。算法方面先用采集到的几十张标准图和缺陷图把流程跑通再不断用新采集的图片做回归测试。标定在这类项目里是个关键动作。测量类项目一定要做标定最基础的方法是拍摄已知尺寸的标定板计算像素当量建立像素坐标和物理坐标的映射关系。精度要求高的场景还要考虑镜头畸变校正。具体做法摆好标定板采集图像用Halcon里的算子自动提取标定板特征生成相机内参和外参。注意标定板要平整摆放位置尽量覆盖整个视野否则边缘区域精度会明显变差。标定结果要保存成文件换相机或换镜头之后必须重新标定。4.5 现场部署与验收从“在实验室能跑”到“在产线稳跑”实验室跑通之后项目才刚完成一半。设备一到现场环境光、地面震动、工件定位方式都可能改变图像效果。我常跟同事说实验阶段是“把路走通”现场阶段是“把路走稳”。现场安装要做的事包括调整相机和光源支架确认相机与生产线方向平行配置好光源控制器设定并固定亮度参数把PLC通信调通把OK/NG信号和测量数据发送到上位机还要做长时间运行测试看看有没有内存泄漏、图像卡死或者通信超时。验收标准也要在项目开始时定清楚。是统计漏检率和误检率还是做GRR测量重复性评估这些条件如果不写进验收条款最后很容易变成“无穷无尽的算法调优”。5. 学习路线与面试热点从一个高频问题说起5.1 机器视觉动了什么会导致像素精度变化——面试和现场都爱问这个问题在前面参数章节分析过但放到面试场景里会更看重你回答问题的结构化能力。我一般建议从下面几个层面依次展开光学层面工作距离变了视野就会变对焦不准会导致边缘模糊边缘提取结果漂移。机械层面相机固定松动支架热胀冷缩传送带抖动都会让图像坐标发生亚像素级变化。电气层面光源亮度波动导致对比度变化触发信号不稳定导致拍摄位置不固定。硬件自身层面传感器温度漂移、镜头内部镜片松动等。这样一层一层讲面试官会觉得你有系统的工程思维而不是只背了几个名词。实际现场排障时也可以按这个顺序去排查先看视野有没有变再看图像亮度有没有变再看置信度是否下降。5.2 机器视觉学习路线从光学基础到算法调优一步一步来经常有人问我机器视觉怎么入门。我的建议是不要一开始就陷入深度学习先打好传统图像处理的基础。第一阶段学成像原理和硬件选型。看教材、做打光实验搞清楚工业相机、镜头的关键参数。这个阶段最需要的是一台相机和几个光源动手拍各种物体观察不同打光条件下的图像差异。第二阶段熟悉算法库。如果做工业项目建议先从Halcon入手它有丰富的案例和文档。把Blob分析、边缘提取、模板匹配、测量这类基础算子玩熟练。配合OpenCV看原理理解算子背后的算法思想。第三阶段做项目从易到难。先做尺寸测量、定位类项目再做缺陷检测。缺陷检测里又要分传统方法和深度学习方法。传统方法适合特征稳定的场景深度学习适合缺陷形态不固定的场景。第四阶段往3D视觉方向扩展。3D入门可以从点云处理开始熟悉激光三角测量、结构光、ToF三种主流方案的区别。激光三角法精度高、适合静止目标结构光适合复杂表面ToF速度快但精度一般。学习时可以先做简单的平面高度测量再逐步接触点云配准、3D定位等。5.3 面试里经常被问到的几个实战问题除了像素精度我回忆了一下这几年面试新人经常会问到的题目可以整理成一张参考表问题考察点建议回答方向如何选择工业相机分辨率选型能力根据最小特征尺寸反推留2-3倍余量再结合视野范围计算光源亮度变化为什么会导致测量结果漂移成像原理对比度变化影响边缘提取二值化阈值偏移亚像素边缘位置改变Halcon标定有什么用工程经验建立像素坐标与物理坐标的映射校正镜头畸变传送带上产品晃动怎么办系统思维缩短曝光时间、用频闪光源、硬件触发、加机械导向传统视觉和深度学习怎么选算法理解特征稳定选传统算法缺陷形态复杂选深度学习这些问题没有唯一标准答案重点在于能不能把原理讲得通、步骤说得清。我自己面试新人时最关注的是他有没有真正动手做过项目因为只有动手做过才会理解什么叫“现场和实验室不一样”。6. 理论篇的最后一小块一条可直接抄作业的开发主流程6.1 从需求到交付一张标准的流程图式清单虽然我不建议把PPT上的流程图直接拍下来但开发流程本身是真可以固化成清单的。以我手上最多的尺寸测量类项目举例拿到样品和图纸明确测量项、公差范围、节拍要求。做打光实验确认背光源加远心镜头方案或者普通光源加面阵相机方案。按精度需求算分辨率选相机和镜头。开发算法原型用标定板建立像素当量再用真实样品测量统计重复性。撰写界面和通信模块完成软硬联调。现场部署固定支架设定光源亮度测试整机。长时间运行监控图像质量、算法稳定性、通信稳定性。这条流程我已经用了很多年不敢说没踩过坑但至少按这个顺序走项目成功率会高很多。反过来如果一上来就写代码、调算法往往后面会因为硬件选型不对而推倒重来。6.2 开发过程中最值得花钱花时间的几件事第一件是样品数量。很多项目前期只拿两三个样品做测试结果现场发现来料形态差很多算法完全不适应。我建议样品至少覆盖几个批次的来料包含不同位置的缺陷或不同尺寸范围的工件。第二件是标定严谨度。测量类项目最忌讳“像素当量拍脑袋”。一定要用正规标定板在最终安装位置上标定不要拿着实验室旧标定文件套现场。第三件是环境光的控制。有些客户现场采光很好可恰恰是这种好让视觉系统很痛苦。如果环境光波动大可以考虑加遮光罩或者选红外光源加滤光片减少环境光干扰。6.3 给准备入行的朋友一个诚实的心理预期做机器视觉这行入门门槛并不高但要做到“稳”至少要花两年时间积累现场经验。你可能会遇到白天调光晚上改代码的节奏也可能会因为一个0.01毫米的精度问题连续调试好几天。但这行的好处是行业需求一直在增长从手机制造到锂电、光伏、半导体到处都需要视觉工程师。理论篇到这里主要把系统构成、核心参数、开发流程和学习路径讲清楚了。下一篇如果可以我会重点写光源打光的实际案例以及Halcon里那些高频算子的调试参数经验这些都是现场验证过的内容写出来应该对大家更有直接帮助。
返回列表