从“识别产品外观的合格软件”这个标题展开其实背后是一整套工业视觉、机器视觉在智能制造产线上做质检的工程化落地问题。我干了这么多年视觉检测项目最深的感受是外观合格判定听起来简单真正能稳定跑在产线上的方案一定是算法、光学、机械、产线工艺四方配合的结果。这篇就把我从需求拆解到现场交付的完整路径写出来重点讲那些方案文档里不会写的选型逻辑和踩坑经验给准备上工业质检项目或者正在被误检漏检折磨的朋友一个参考。1. 从人工质检到视觉检测为什么外观判定一定要上机器1.1 人工质检的三个死穴疲劳、主观、追不上节拍做过产线的人都清楚外观质检在过去很长一段时间里靠的是人眼。人不是不行而是有物理极限。以我见过的一条手机中框产线为例节拍是每件3秒质检员一天要看几千个工件连续工作40分钟以后注意力曲线明显下滑漏检率会翻倍。这不是态度问题是生理问题。人眼对高频重复的细小特征会产生“视觉钝化”一条0.3毫米的划痕在上午可能一眼就看到下午可能就扫过去了。第二个问题是主观性。同样一个轻微压伤老质检员觉得“能过”新质检员觉得“要退”两个人标准不一致换班之后质量波动就特别大。更麻烦的是这种标准存在老师傅脑子里没法量化、没法复制。一旦人员流动培训成本非常高而且新人的判定稳定性通常要两三个月才能上来。第三个问题是节拍。现在很多行业都在推智能制造和自动化产线设备节拍越来越快有些高速产线单件停留时间不到1秒人眼根本来不及看全所有检测面。这时候工业视觉、机器视觉的价值就体现出来了它不困、不累、没有情绪判定标准一旦固化同一个缺陷今天判NG明天还是判NG而且速度可以轻松做到每秒检好几个工件。这也是我把标题里“识别产品外观的合格软件”理解为一套系统工程的原因——它本质上是把人的经验转译成算法再通过光学和机构在产线上稳定执行。1.2 机器视觉的价值边界它能做什么又干不了什么我不是来吹机器视觉万能的。干了这么多年工业质检我必须先把边界说清楚免得有人项目上到一半发现预期落空。机器视觉、视觉检测真正擅长的场景有几个共同点批量大、节拍快、缺陷类型相对明确、产品一致性较好。比如3C结构件的外观划痕检测、锂电池表面的凹陷和脏污检测、汽车零部件的尺寸和装配确认、包装印刷品的错印漏印检测这些都是视觉检测非常成熟的应用场景。在这些场景里机器视觉可以做到稳定检出、实时判定、数据留存甚至反向指导工艺改进。但它也有明显干不了的活。第一缺陷极其抽象、没有明确边界的场景很难做比如某些真皮材料的天然纹理机器很难判断哪条纹路是“天然”哪条是“缺陷”。第二小批量多品种的产线要慎重换型频繁会导致调试成本陡增。第三有些问题压根不是软件能解决的比如来料本身就脏、工件定位不准、来料反光率波动太大这些问题靠算法硬扛会非常痛苦。所以我一直跟客户讲一句话视觉检测不是买一套软件而是做一套方案。方案里面包含了打光设计、机械定位、传感触发、算法模型、产线通讯软件只是其中一环。把这个定位想清楚后面每一步决策都不会跑偏。2. 外观合格判定到底在判什么需求拆解是落地第一步2.1 先列一张缺陷清单区分检测项类型和优先级很多项目死在开头不是因为算法不行而是需求根本没定义清楚。你去问现场主管“你们要检什么”他可能张口就答“检外观好坏”。但“外观好坏”不是一个可执行的工程语言。你必须和他一起把它拆成具体的缺陷类型。以我做过的一个消费电子外壳项目为例我们最终列出的缺陷清单有六大类表面缺陷划痕、压伤、碰伤、凹坑、凸点、麻点污染类缺陷脏污、油渍、指纹、异物残留颜色与纹理异常色差、发黄、发白、光泽度不均、烧焦形状与结构缺陷缺料、毛刺、飞边、变形、破损、缩水印刷与标识缺陷字符缺失、错印、重影、墨迹污染、对位偏移装配与来料问题漏装、错装、方向反、卡扣不到位、缝隙不均列完清单之后还有一步给缺陷分级。不是所有缺陷都要判NG的否则误检会高到产线没法用。我们的做法是分成三类A类缺陷致命气泡、缺料导致功能失效必须100%拦截B类缺陷重要明显划痕、脏污影响客户观感必须拦截C类缺陷轻微微小色差、极短划痕允许一定容差分级完成后每条检测项还要确认检测面。一个手机壳可能有六个面A面是外观面优先级最高B面是装配面被遮挡后根本看不见就不需要检。这个动作能省掉大量算力和打光成本。你在需求拆解阶段花三天可能比后面调试阶段省三周。2.2 把“合格”变成数字限度样板与量化标准需求拆解最核心的产出不是一份文档而是一套可以量化的判定标准。很多项目后期扯皮就是因为“合格”和“不合格”之间缺乏客观尺度。举个例子同样是划痕多长算不良我们在一家五金件厂定过这样一套标准长度大于1毫米且宽度大于0.1毫米的划痕判为不良长度在0.5到1毫米之间但位于Logo区域的也判为不良其余位置且长度小于0.5毫米的可接受。你看一旦指标量化算法就有了明确的执行目标。具体做法是制作限度样板也叫边界样板。找一批含各类轻微缺陷的真实工件让品质部、客户、产线三方坐在一起逐个确认“这个能不能过、那个能不能放行”最终选出每类缺陷的“临界样品”归档。这套样板既是算法训练的黄金标准也是项目验收的判定依据。同时我建议把所有判定标准整理成一张缺陷-判据对照表内容包含缺陷类型、触发区域、最小检出尺寸、允许数量、判定动作、限度样板编号。这张表不仅是开发人员的输入文件更是跟客户确认需求的直接载体。很多项目经理不敢跟客户逐条抠标准怕把细节摆到台面上。我的经验恰恰相反越早把标准量化项目后面越顺利。机器视觉检测的本质就是把经验变成数据把标准变成代码这一步逃不掉。3. 成败关键在现场打光、相机、算法怎么选3.1 打光是第一优先级不同缺陷配不同光路在工业视觉里有一句老话打光打好了项目成功一半。这话一点都不夸张。很多算法半天调不出来的问题换一个打光方式五分钟就解决了。因为视觉检测的第一步是让缺陷“看得见”如果图像里缺陷和背景没有对比度再强的算法也无能为力。我做视觉检测项目选光源时会针对不同缺陷类型配不同的光路环形光源光线均匀适合检测表面整体情况、印刷字符、颜色差异是应用最广的方案低角度条形光掠射光光线几乎平行于被测表面微小的划痕、凹坑会形成明显的亮暗对比检划痕和压伤特别有效同轴光源光线垂直照射后沿原路反射回相机适合镜面高反光表面比如玻璃、晶圆、抛光金属用于检测表面脏污和细微划痕背光源把被测物放在光源和相机之间形成黑白轮廓最适合外形尺寸测量和缺料检测多角度组合光针对曲面、复杂结构件通过多次打光和图像合成来提取不同朝向的缺陷选择打光角度时要记住一个基本物理规律缺陷特征要想被看见要么通过漫反射和背景产生亮度差要么通过镜面反射改变光路。低角度光对凹凸类缺陷敏感同轴光对平整表面的污染敏感背光对轮廓敏感。这些不是玄学是几何光学的基本推论。还要注意光源类型和控制器。高速产线上建议用频闪模式相机曝光瞬间光源点亮其他时间光源关闭既延长了LED寿命又减少了环境光干扰。这个细节在现场稳定性上非常关键。3.2 相机与镜头选型分辨率怎么算、快门怎么买相机和镜头的选型是有公式可循的我一般按这么几步走。第一步是估算分辨率。假设你的视场是50毫米宽需要检出的最小缺陷是0.1毫米理论上需要至少500像素。但工程上我不建议卡着最低值选因为一个缺陷至少要覆盖3到5个像素才算可靠检出所以实际需要1500到2500像素。对应下来500万像素的相机在50毫米视场下单像素约0.02毫米对于0.1毫米的缺陷有5个像素左右的覆盖比较稳。如果视场更大就要相应上1200万像素甚至更高。第二步是选彩色还是黑白。如果是检颜色、色差、印刷内容用彩色相机。如果是检划痕、压伤、尺寸黑白相机分辨率利用率和灰度一致性往往更好还能省一半数据量。第三步是选传感器类型。运动中的工件必须用全局快门不要用卷帘快门。卷帘快门拍运动物体会出现果冻效应边缘扭曲直接影响判定结果。这又是一个“看似省几百块、实际毁掉整个项目”的坑。镜头方面普通视觉项目用定焦工业镜头就能满足要求畸变控制在0.1%以内。但如果要做高精度尺寸测量特别是视场边缘也需要精确还原的场景建议直接上远心镜头。远心镜头能消除透视误差保证不同高度的被测物成像尺寸一致。缺点就是贵而且体积大所以只在对精度要求极高的场景使用。3.3 算法路线选择传统视觉和深度学习怎么分工算法选型是很多人最纠结的部分。我的经验是不要迷信深度学习也不要排斥传统算法两者是分工关系。传统机器视觉算法包括阈值分割、Blob分析、边缘提取、模板匹配等。它的优势是稳定、可解释、不需要大量样本。在背景简单、缺陷对比度高的场景里传统算法表现非常好而且判定逻辑透明现场容易排查问题。比如背光下的缺料检测、固定位置的字符缺失检测、精密尺寸测量我通常优先用传统算法解决。深度学习则适合传统算法搞不定的复杂场景缺陷纹理多变、背景杂乱、缺陷和背景对比度低、缺陷类型多样且形态不固定。比如铸件表面的复杂缺陷分类、布料和皮革的表面瑕疵检测这类场景下卷积神经网络的目标检测和语义分割模型明显优于传统算法。现在的工业视觉项目越来越主流的是混合方案先用传统算法做定位和预处理再用深度学习模型做缺陷分类和分割两者结合效果最好。表传统算法与深度学习在工业外观检测中的对比维度传统视觉算法深度学习算法适用场景背景简单、对比度高、缺陷形态固定缺陷多变、背景杂乱、难以用规则描述样本需求少几十张即可较多通常每类需几百张以上可解释性完全可解释阈值在哪里一目了然黑盒需通过大量测试验证边界部署资源极低普通工控机轻松运行较高需要独立显卡或NPU加速开发效率规则设定复杂时开发慢数据储备够后迭代快典型场景尺寸测量、定位、缺料检测复杂表面缺陷分类、装配完整性确认关于深度学习的具体选型如果只做良品/不良品二分类用轻量级分类网络就够了如果需要在图像里定位缺陷位置用目标检测网络工业场景里YOLO系列用得最多如果要把缺陷边缘轮廓精确分割出来就用语义分割网络。2024年之后Transformer类视觉模型也开始在工业场景落地但说实话中小项目里它的成本优势不明显YOLO加一个高效分割网络依然是性价比最高的起点。部署环节模型训练完通常要转成ONNX格式再通过推理框架做加速。如果在工控机上跑CPU推理要严格控制模型参数量如果配置了GPU或NPU就可以上更复杂的模型。我一般建议在方案设计阶段就定好工控机配置否则算法效果很好、但推理速度跟不上节拍还得回头降模型来回折腾。4. 从样品到产线一套外观识别软件的完整落地流程4.1 第一步样品采集与标注数据质量决定算法上限不管用传统算法还是深度模型前提都是要对检测对象有足够深的理解。这个理解来自样品。样品采集的目标是覆盖真实的“正常波动”和“缺陷分布”。正常品至少要采50到100件覆盖不同批次的细微色差、纹理变化缺陷品则要尽量覆盖到每类缺陷的各种形态、方向、大小。有的缺陷形态特别多样比如划痕有细长的、有网状的、有带弧度的每一类最好都收集20到50个样本。采集完之后是标注。工业缺陷标注和通用的目标检测标注不一样建议优先用分割式标注把缺陷的轮廓圈出来而不是只拉一个包围框。因为很多缺陷是不规则形状包围框会引入大量背景噪声影响模型学习。标注工具有很多我用过Labelme、CVAT、X-AnyLabeling都免费且够用。标注规则一定要提前统一同一处缺陷多人标注时轮廓是否一致、重叠缺陷怎么处理、很模糊的缺陷标注还是不标注。这些不约定清楚模型训练出来会出现严重的标签噪声。数据增强是绕不开的一环。工业现场的光照波动、工件摆放偏移、表面反光变化都需要通过数据增强让模型更鲁棒。常用的增强手段包括随机旋转、平移、缩放、亮度变化、对比度变化、高斯噪声、模糊模拟。要注意的是不能做会导致语义翻转的增强比如把“左高右低”改成“右高左低”在一些方向敏感的检测里会出错。4.2 第二步现场验证与模型训练阈值调优需要耐心样品采集完先不要急着训练大模型。我习惯先在现场搭一套简易光路用实际相机拍几十张图跑一遍初步验证。这一步的目的是确认打光和成像方案能看到缺陷特征。如果成像环节缺陷不可见后面算法做得再好都是白搭。打光验证通过之后进入算法开发阶段。如果是传统算法核心工作是做图像预处理和特征提取要把灰度阈值定在和限度样板对应的位置。如果是深度学习就进入训练环节。训练时数据要分成训练集、验证集、测试集比例大约7:2:1注意千万不要让同一张图像的各种增强版本既出现在训练集又出现在测试集里否则测试指标会虚高。训练过程中要重点关注两个指标漏检率和误检率。漏检率是缺陷品被判成合格的比例误检率是合格品被判成不良的比例。工业项目里漏检率永远优先于误检率因为漏检意味着不良品流到客户端后果是客诉和索赔误检意味着好品被当不良品剔除增加的是返检成本和产能浪费。两者要平衡但优先级不能搞反。我通常在训练过程中设置一个经验值漏检率目标控制在0.1%以内误检率控制在2%到3%以内具体数值视行业要求浮动。如果误检率偏高先不要急着改模型结构优先检查标注是否一致、样本是否均衡、打光是否稳定。很多误检问题的根源并不在网络而在数据。4.3 第三步部署联动与产线集成触发、剔除、通讯一个不能少算法在电脑上调通只是第一步真正考验功力的是把它部署到产线和自动化设备协同工作。这一步涉及硬件联调、传感器触发、结果通讯和不良品剔除最容易出幺蛾子。部署时硬件上负责视觉检测的工控机要和产线PLC建立信号链路。常见方案有两种一是通过IO触发传感器检测到工件到位给相机一个硬触发信号相机拍照后算法判定再将结果通过IO返回给PLC二是通过TCP/IP或Modbus通讯交互信息更丰富能上报具体的缺陷类型、图像和统计数据。我做产线集成时一定会要求加装剔除机构。检出不良品后视觉系统向PLC发送NG信号PLC控制气缸或机械臂把不良品推到次品箱里。这里有一个很容易忽略的时序问题从拍照到剔除动作完成必须在节拍时间内闭环否则产线会堵料。计算方法是节拍时间成像时间算法推理时间结果传输时间剔除动作时间。任何一个环节超标都要重新优化通常瓶颈在算法推理所以部署前就要定好工控机的算力规格。现场稳定性方案里看门狗机制和异常日志是必须的。我见过一个项目运行几天后工控机内存溢出导致检测程序停止产线却还在跑不良品全部漏掉。后来加了定时重启、显存监控和看门狗自恢复这类问题才彻底根治。4.4 第四步验收指标与换型配方项目交付才算真正开始视觉检测项目交付的验收标准一定要写进合同核心就三条漏检率、误检率和可用率。我参与的项目通常这样约定漏检率在限度样板范围内的不良品漏检率不高于0.1%误检率合格品的误检率不高于3%可用率系统稳定运行时间占比不低于99%排除计划性停机验收时准备一套盲测样件混合合格品、边界缺陷品、明显缺陷品让系统连续跑几轮统计三项指标。注意盲测样件一定不能是训练时用过的否则没有意义。项目验收之后还有一项经常被忽略的工作换型配方管理。产线往往不只做一种产品换产品时必须快速切换检测程序。我建议把每个产品的检测参数光源亮度、相机曝光、算法模型版本、判定阈值打包成一个配方界面上做成下拉选择换型时一键加载。这个习惯能省掉大量现场维护时间也是项目能横向复制的关键。交付不是终点数据沉淀才开始。我要求部署的系统必须保存每一张NG图像和对应的判定结果每周做一次数据复盘。这样既能持续优化模型也能在客户对判定有异议时拿出原始图像追溯这是工业质检系统被人信任的基础。5. 常见问题与排错实录那些现场踩出来的坑5.1 误检率居高不下先查这几件事误检率过高的排查我有一套固定的排查顺序新手照着这个思路做基本能解决90%的问题。第一查打光稳定性。光源用久了亮度会衰减LED会产生温漂同一工件不同时段拍出来的灰度值可能在缓慢变化。排查方法是拍一张标准色板连续记录灰度值变化曲线。如果波动超过5%优先考虑换输出更稳定的光源控制器或者在软件里加自动亮度校准。第二查机械定位重复性。如果工件先后两次到达相机前方的位置偏差超过几个像素原本在容许范围内的边界区域就会被误判为缺陷。这种情况在图像上表现为同一合格品时而NG时而OK非常典型的“随机飘红”。解决方向是优化治具定位或增加图像配准逻辑。第三查标注一致性。深度模型误检率高往往训练集里本身就存在大量矛盾标注。同一个位置上有的标了缺陷有的没标模型学出来就会边界混乱。这个没有捷径重新审视标注规则必要时重新标注。5.2 漏检比误检更可怕典型原因与对策漏检是比较难排查的因为漏掉的样本往往就那么几个特征不明显不容易归纳。常见的漏检原因有三个。第一个是缺陷样本数量不足模型对某些罕见缺陷形态根本没有“见过”自然检不出来。解决办法是持续从产线收集漏网之鱼补充训练集这也是我要求系统保留全部NG图的原因。第二个是打光方案对该类缺陷不敏感。你可能用的是环形光缺陷本身是浅凹坑光线方向不对缺陷在图像上几乎没有对比度。对策是做光路测试换低角度光或者同轴光对比同一缺陷的可见度。第三个是算法阈值设得太保守。为了压低误检阈值推得很高导致轻微缺陷被放过。这种做法是把两个问题混在一起解决阈值只是平衡手段真正的解法是增加有效特征输入。否则你会发现无论怎么调阈值误检和漏检都在跷跷板两端来回晃。5.3 环境光干扰、相机脏污这类“幺蛾子”怎么根治工业现场的环境比实验室恶劣得多。车间顶灯、窗外的自然光、焊接弧光、叉车移动带来的光影变化都会干扰视觉检测系统。我的一次真实经历是白天系统稳定傍晚夕阳照进车间合格品被大量误判成划痕缺陷。查了半天才发现反射光在工件表面形成的亮斑和划痕形态非常接近。根治办法有三个一是加遮光罩和挡光帘物理隔离环境光这是最有效的二是用频闪光源相机曝光时间压缩到极短让环境光的影响降到最低三是在算法前加一个光照归一化步骤把图像亮度统一到一个基准。三层叠加效果最好。我到现场第一件事永远是看产线周围有没有窗户、灯管是什么朝向这一项就够排查掉一半的环境干扰问题。相机镜头脏污是另一个容易被忽视的隐坑。镜头上有灰尘时图像会出现白点和虚影误检率逐渐飘高而且毫无规律。现场维护人员不一定会意识到镜头脏了。我在每个项目里都要求配一套自动吹气清洁装置并且在系统里加一个功能监控画面特定区域的灰度和方差当指标持续异常时自动报警提示“镜头需要清洁”。运行半年下来这个功能比想象中有用得多。5.4 缺陷样本不够怎么办三个低成本补充思路样本不足是工业视觉项目最常见的问题特别是新产品刚导入产线时良品率本来就高想收一批有代表性的不良品非常困难。我的对策有三个。第一个是“线上蹲守”。产线刚开始运行时视觉系统即便阈值没调优也把疑似NG的图全部存下来人工在后台筛选两周时间就能积累不少真实缺陷样本。这个方法虽然原始但获到的数据最真实、最宝贵。第二个是“人工制造缺陷”。找技术员在实验室里故意做出不同形态的划痕、压伤、脏污用于算法初期的数据补充。人工样本和真实样本有差异所以只能作为“启动数据”后续还要用真实样本逐步替换。第三个是“针对性数据增强”。如果缺陷形态是细线条可以做变宽、变淡、方向旋转的模拟增强如果是斑点可以做不同大小、灰度变化、位置随机的模拟增强。很多图像增强库都支持这种基于缺陷样板的合成能有效提升模型的泛化能力。5.5 问题速查表现场排查一页纸我把多年做工业视觉检测项目遇到的典型问题整理成一张速查表贴在现场工控机旁边非常实用。表工业视觉外观检测常见问题速查现象可能原因排查动作误检率突然升高环境光变化检查遮光罩、窗户朝向、灯光状态误检率逐渐升高光源衰减或镜头脏污测量灰度基准值、清洁镜头合格品时而OK时而NG机械定位偏差检查治具、增加图像配准特定缺陷总是漏检打光方向不对换低角度光或同轴光对比新批次产品误检飙升来料表面状态变化检查原材料批次差异可能需重新标定软件运行几天后卡死内存泄漏或显存溢出加看门狗、定时重启、监控日志夜间和白天检出率不一致环境光干涉频闪曝光优化、增加光照归一化剔除不及时导致堵料时序计算不足优化推理速度或调整剔除机构位置这张表的每一条背后都是真金白银的教训。工业视觉项目的现场问题往往不复杂但特别考验排查思路。按“先光学、再机械、后算法”的顺序查基本能把80%的问题快速定位。最后再分享一个小体会做识别产品外观的合格软件我的经验是算法能力只占成功因素的一半不到另一半在于你愿不愿意蹲在产线旁边把每个工件的来料、光路、定位、节拍都摸得清清楚楚。机器视觉系统真正落地的那一刻不是模型训练完的那天而是它在产线上连续稳定跑了一个月、客户忘了它存在的那天。做功把基础打牢系统自然会给你回报。