简介:围绕工业机器视觉缺陷检测整理的培训小结PPT,面向制造企业视觉检测工程师、设备调试人员和图像处理初学者,帮助其把零散经验归纳为可复用流程,快速搭建从系统组成到成像测试的知识框架。内容按图像采集、处理分析与运动控制三部分展开,穿插相机芯片、GigE/USB/CameraLink等数据接口、镜头光圈聚焦及光源选型的对比,并给出对比度、均匀性、真实性等图像质量标准。压缩包内含1个pptx文件,约9.76MB,目录围绕基础知识、报告制作和成像测试组织,还覆盖Halcon常用工具、光伏电池片工艺流程、Topcon硅片与成品电池片隐裂成像、石墨舟与石英舟、破片统计及AI项目等汇报场景。已有979人学习,适合对照实际产线检测任务梳理硬件选型、测试记录、成像实验与工作汇报思路,并据此复盘检测方案。
1. 先搞懂一件事:工业机器视觉缺陷检测到底在干什么
第一次听到「工业机器视觉缺陷检测」这串词,很多零基础的人第一反应是:是不是得先把机器学习、深度学习全部啃完才敢碰?其实完全不是。产线上真正在跑的系统,干的活比想象中朴素得多——用工业相机给产品拍一张照片,让程序判断这张照片上有没有划痕、隐裂、脏污、缺角,有就报警、就剔除、就记录一行数据。它更像是给产线装了一双不会累、不会走神的眼睛,而不是造一个会思考的大脑。
所以这份《工业机器视觉缺陷检测工作小结PPT》的价值,不在于教你多高深的算法,而在于把一整套「眼睛怎么配、光怎么打、图怎么判、报告怎么写」的流程整理成了一条可以照着走的线。适合谁看?刚进制造企业做视觉岗的应届生、从电气或工艺转岗过来的工程师、要对接视觉供应商但听不懂对方在说什么的项目人员,以及想自己在家搭一套小系统练手的学生。你不需要提前会图像处理,需要的是愿意动手拍第一张图。
2. 拆开一套系统看:相机、镜头、光源、接口各管什么
2.1 三大部分:采集、处理、控制,先认清楚
工业现场说的机器视觉系统,无论多复杂,都可以拆成三块:图像采集部分、图像处理部分、运动控制部分。采集部分负责「看清楚」,包括相机、镜头、光源、数据接口和采集卡;处理部分负责「看明白」,把图像数字化,做增强、分割、特征提取,最后给出判定结果;控制部分负责「动手」,把判定结果变成信号,让气缸剔除、让机械手抓走、让流水线停下来。
刚入门的人最容易犯的错,是把九成精力放在处理部分,天天研究算法,结果现场一出问题发现是光源角度偏了两度。真实产线里,一张本来拍得稀烂的图,算法工程师熬三个通宵也救不回来;一张对比度干净的图,二十行阈值代码就能跑出稳定结果。所以入门阶段建议先把采集这一侧的零件认全,再去碰算法,顺序反了会很痛苦。
从功能上再切一刀,这套系统就是四件事:获取图像、处理分析图像、管理数据、完成人机交互。人机交互听着玄,其实就是操作工看的那块屏幕——图上画红框、列表显示缺陷类型和数量、良率实时刷新。别小看这块界面,很多现场验收卡住不是因为检不出,而是因为界面上一堆英文字段,操作工人不敢用。
2.2 相机:先认芯片、接口和那几个关键参数
一台工业相机拆开看,主要就是四部分:传感器芯片、防尘片或滤光片、控制与信号转换电路板,加上光学接口、数据接口和外壳。新手不用一上来就研究电路板,先盯住传感器芯片就行,因为它直接决定了分辨率、帧率和灵敏度。
按芯片类型分,常见的是 CCD 和 CMOS 两大类。简单理解:CCD 像一个统一调度的搬运队,像素电荷逐个传出去,图像一致性好但速度慢、功耗高、价格贵;CMOS 每个像素自带放大电路,速度快、集成度高、成本低,现在的工业相机绝大多数都是 CMOS。这个知识点在面试里被问到的频率很高,但实际选型时,你更该关心的是分辨率和靶面尺寸。
按传感器排布方式分,又分面阵和线阵。面阵相机一次拍一整幅二维图像,像手机拍照,适合静止或慢速产品;线阵相机一次只拍一条线,靠产品运动拼出整幅图,适合卷材、布匹、片材这类连续运动的东西。PPT里提到的「线扫1拖2」就是指一台采集卡带两路线阵相机,接线时要特别注意同步信号,接错了会出现图像撕裂或者只出一半的情况。
选相机时,新手先看三个数:分辨率够不够、帧率跟不跟得上产线节拍、靶面尺寸和镜头能不能配上。分辨率不是越大越好,算一下最小缺陷在图上要占几个像素——一般要求最小缺陷至少占 3×3 像素,否则算法再强也稳不住。这个算法叫「像素覆盖率」,是入门阶段最该早点学会的估算方式。
2.3 镜头与光源:为什么打光比算法更能决定成败
镜头是机器的晶状体,作用是把目标物体的像聚焦到传感器上。系统处理的所有图像信息都得从镜头过一遍,所以镜头质量直接压着整个系统的上限。镜头上有两个东西新手必须会调:光圈和聚焦。
光圈控制进光量,光圈开大图像变亮、景深变浅,开小则变暗、景深变深。景深这个词可以理解成「前后多大范围内还是清楚的」——拍有高度的产品时,景深不够就会出现中间清楚、边缘糊,缺陷检测会漏边。聚焦不用多说,图像一虚,边缘就软,边缘一软,尺寸测量全废,还会让算法不得不加各种补救,越补越乱。
光源是最被低估的一环。它的任务不是「照亮」,而是「制造差异」——让缺陷和背景在灰度上拉开距离。常见的光源有环形光、条形光、同轴光、背光、穹顶光等。背光拍轮廓最干净,适合测尺寸和缺口;同轴光适合拍镜面、金属表面的细小划伤;穹顶光能压掉反光,适合曲面和亮面产品。同一个缺陷,换个打光方式,可能从「根本看不见」变成「黑得发亮」。
入门时记住一句话:先想办法用光把缺陷变成高对比度的黑白图,再考虑算法。这是制造业图像处理里最省钱也最有效的思路。
2.4 数据接口怎么选:GigE、USB、CameraLink 差在哪
相机拍完图得传到电脑,这中间靠数据接口。常见的有 GigE、USB、IEEE1394、CameraLink 几类。入门不需要背参数表,但要知道它们各自适合什么场景,不然选型会上来就被供应商绕晕。
| 接口类型 | 传输距离 | 大致特点 | 适合场景 |
|---|---|---|---|
| GigE | 可达 100 米(走网线) | 距离远、布线方便、可多机并联 | 产线相机分散、机房离设备远 |
| USB3.0 | 一般 3~5 米 | 即插即用、成本低、带宽够用 | 单机台、实验台、入门练手 |
| CameraLink | 一般 10 米以内 | 带宽高、实时性好、需配采集卡 | 高速线扫、多相机同步 |
| IEEE1394 | 较短 | 老接口,新设备已少见 | 维护存量设备时会遇到 |
新手在实验台上练手,USB3.0 的工业相机最省事,插上就能跑。但如果要做线扫、要接两路以上相机、要走几十米线,就得考虑 GigE 或者 CameraLink 配采集卡。这里有个血泪经验:线材质量和接口卡的选择,比相机本身更容易出玄学问题——图像偶尔丢一帧、偶尔花屏,八成不是算法,是线太长、屏蔽没做好、供电不稳。排查时先换线、先缩短距离,别一上来就怀疑代码。
3. 好图像的三个硬指标:对比度、均匀性、真实性
3.1 对比度:为什么灰度差 30 是个起步线
工业图像是灰度图,每个像素的取值是 0 到 255,0 是纯黑,255 是纯白。所谓对比度,就是目标(缺陷)和背景之间的灰度差。工作小结里给了一个很实用的经验值:目标与背景的灰度值至少要差 30 以上,边界才算清晰。
为什么是 30?因为真实产线有噪声、有光照波动、有产品本身的一致性差异。灰度差只有 10 的时候,产品稍微换一批、灯稍微老化一点,阈值就失效了,昨天能检出来的今天全漏。留 30 的余量,等于给系统留了一条后悔药。我第一次自己调线的时候不信这个邪,硬把阈值卡在两个灰度只差 12 的位置上,结果跑了两小时就开始误报,最后返工重做打光方案。
判断对比度有个简单办法:把图导进任何看图软件,用取色工具点一下缺陷中心和旁边正常区域,看两个数值差多少。差不到 30,先别写算法,回去调光。
3.2 均匀性与真实性:过曝是最常见的翻车点
均匀性指的是整幅图亮度是否一致。理想的图是整体均匀;如果做不到完全均匀,至少要做到「不均匀的程度不影响判定」。常见的不均匀是中心亮四角暗,那是镜头暗角;也可能是打光角度导致一侧反光、另一侧发黑。这种情况下如果用一个全局阈值,亮的那侧会把正常区域判成缺陷,暗的那侧会漏检。
真实性说的是颜色和亮度要还原得靠谱——跟颜色有关的检测需要颜色真实,跟亮度有关的需要亮度适中。最常见的翻车点就是过曝:为了把暗处的缺陷拍出来,把灯开到最大,结果亮处一片 255,缺陷和背景一起烧成了白色,什么都检不出来。过曝是没法用算法恢复的,255 就是信息已经丢了,任何增强都只是猜。
一个实操判断标准:如果图里有成片的纯白(灰度 250 以上)区域,而那块区域本来应该是有纹理的,那就是过曝了,把曝光时间或光源亮度降下来重拍。
3.3 动手:用二十行代码给一张图做体检
看完指标,最好马上验证一遍。下面这段代码给一张图算三个数:过曝比例、整体均匀性、前景背景对比度。跑通它,你就有了一个属于自己的「图像体检表」。
import cv2 import numpy as np # 以灰度模式读图,第二个参数很关键,不加会读成三通道 img = cv2.imread("part_001.png", cv2.IMREAD_GRAYSCALE) if img is None: raise FileNotFoundError("图没读到,先检查路径、文件名和后缀大小写") h, w = img.shape # 注意顺序是 (高, 宽),不是 (宽, 高) total = h * w # 指标一:过曝比例,灰度 >= 250 的像素占比,超过 5% 就该警惕 over_ratio = np.sum(img >= 250) / total # 指标二:均匀性,全图灰度的标准差,越小越均匀 uniform_std = img.std() # 指标三:对比度,用 Otsu 自动分出前景和背景,再算两者均值差 _, mask = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) fg_mean = img[mask == 255].mean() bg_mean = img[mask == 0].mean() contrast = abs(fg_mean - bg_mean) print(f"图像尺寸: {w} x {h}") print(f"过曝比例: {over_ratio:.2%}") print(f"灰度标准差: {uniform_std:.1f}") print(f"前景均值: {fg_mean:.1f} 背景均值: {bg_mean:.1f}") print(f"对比度: {contrast:.1f}")逐段解释一下。第一段读图,cv2.IMREAD_GRAYSCALE让 OpenCV 直接返回单通道灰度图,省得后面再转;如果返回None,说明路径错了或者文件名后缀不对,这是新手最高频的报错。第二段拿尺寸,img.shape的顺序是「高、宽」,跟很多人直觉相反,后面画图、算坐标时如果搞反,框会画到奇怪的位置。
第三段算三个指标。过曝比例是直接数灰度值大于等于 250 的像素占多少,这是个很粗暴但很好用的体检项;灰度标准差反映整体均匀性,标准差大于 60 基本说明光照很不均;对比度这一段用大津法(Otsu)自动找阈值,把图分成亮暗两群再算均值差,这个差值就是你的实际对比度。
参数怎么改?250这个过曝线可以按需调,有些传感器噪声大,可以放宽到 245;cv2.THRESH_OTSU适用于前景背景明显分开的图,如果你的图里缺陷只占极小面积,Otsu 可能把整张图当成一群,这时候改成手动指定阈值更靠谱。
3.4 图像不达标时,先改什么再改什么
发现指标不合格,很多人第一反应是回去改算法,这是方向错了。按成本从低到高排,调整顺序应该是:先改光源角度和亮度,再改光圈和曝光时间,再换镜头焦距或工作距离,最后才考虑换相机。因为光源和曝光是拧螺丝就能调的,换相机要重新算预算、重新接线、重新标定。
具体到症状,可以对着来:对比度不够,先试换光源类型或调整入射角度,让缺陷在灰度上拉开;不均匀,先看是不是镜头暗角,缩短工作距离或换大靶面镜头;过曝,先降曝光时间,再考虑加偏振片或者换漫射光源。这套顺序看着笨,但能省掉大量无效加班。
4. 第一个能跑通的例子:从一张图到一张缺陷判定图
4.1 准备:环境、素材和一张「标准图」
动手之前先准备三样东西。第一是环境,装 Python 3.9 以上,然后pip install opencv-python numpy,两行就够,不需要显卡,不需要深度学习框架。第二是素材,拿手机拍一张带明显瑕疵的东西也行——一枚有划痕的硬币、一块有脏点的白纸、一个缺角的饼干都可以,先跑通逻辑比什么都重要。
第三是「标准图」。所谓标准图,就是你自己挑一张成像质量达标的图作为参照,后面调参数都跟它比。这个习惯很多人没有,结果每换一张图就重调一次参数,调到最后自己都不知道当初为什么设这个值。我第一次做测试的时候,一个阈值改了十七遍,最后发现是光源没固定,每次拍的亮度都不一样。
提示:实验阶段尽量关掉房间里的自然光,只留你自己的光源,否则白天和晚上拍出来的图完全是两个东西。
4.2 第一步:读图、灰度化,先看清数据长什么样
先跑最小的一步,把图读进来、打印信息。不要一次写完一百行再运行,出错你不知道错在哪一行。
import cv2 img = cv2.imread("sample.png", cv2.IMREAD_GRAYSCALE) print("尺寸:", img.shape) # (高, 宽) print("数据类型:", img.dtype) # uint8,取值 0~255 print("最小值:", img.min(), "最大值:", img.max())这段没什么门槛,但信息量很大。dtype是uint8说明像素值范围 0~255,如果打印出来是float32,那可能你读的是别的东西。最大值如果是 255 且占比很高,说明过曝了;最小值如果是 0 且大片出现,说明有死黑区域。
工业相机的图有时候是 10 位、12 位的,存下来是 16 位图,这时候uint8就不适用了,需要除以对应倍数缩到 0~255 再处理。这个坑很隐蔽,表现是图像看着灰蒙蒙、对比度极低,怎么调阈值都没反应。
4.3 第二步:平滑与阈值分割,把缺陷从背景里抠出来
接下来做两件事:先平滑去噪,再阈值分割。平滑是为了压掉传感器噪声和产品表面的正常纹理,让缺陷更突出;分割是把图变成黑白两色,白的就是要找的东西。
import cv2 import numpy as np img = cv2.imread("sample.png", cv2.IMREAD_GRAYSCALE) # 高斯平滑:核大小必须是奇数,(5,5) 表示在 5x5 邻域内按高斯权重平均 blur = cv2.GaussianBlur(img, (5, 5), 0) # 固定阈值分割:比 90 暗的都判为缺陷,THRESH_BINARY_INV 让缺陷变白 _, mask = cv2.threshold(blur, 90, 255, cv2.THRESH_BINARY_INV) cv2.imwrite("mask.png", mask)GaussianBlur的第二个参数是核大小,必须是奇数。核越大越模糊,去噪强但小缺陷也会被抹掉。核大小怎么定?最小缺陷在图上大概几个像素宽,核就取略小于它,比如缺陷占 7 像素,核取 5。
threshold的第二个参数 90 是阈值,这里假设缺陷比背景暗。第三个参数 255 是满足条件时赋的值。THRESH_BINARY_INV是反向二值化,让「暗于阈值」的像素变成白色,方便后面统计。这个 90 怎么来?可以先用 Otsu 跑一遍看它给多少,再手动微调;也可以用前面那段体检代码打印的均值做参考。
跑完打开mask.png,你应该看到黑色背景上有白色的缺陷块。如果满屏都是白的,说明阈值太高,把正常区域也判进去了;如果是全黑,说明阈值太低。这一步调对了,后面就顺了。
4.4 第三步:形态学处理与连通域,数清楚有几个、多大
二值图往往不干净:有零散的小白点,也有断成几截的缺陷。形态学就是干这个的。开运算去掉小点,闭运算把断开的连起来。
import cv2 import numpy as np img = cv2.imread("sample.png", cv2.IMREAD_GRAYSCALE) blur = cv2.GaussianBlur(img, (5, 5), 0) _, mask = cv2.threshold(blur, 90, 255, cv2.THRESH_BINARY_INV) # 3x3 的方形结构元,适合面积不大的点状缺陷 kernel = np.ones((3, 3), np.uint8) mask_open = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) # 先开:去小白点 mask_closed = cv2.morphologyEx(mask_open, cv2.MORPH_CLOSE, kernel) # 后闭:补断裂 # 连通域标记,connectivity=8 表示斜对角也算相连 num, labels, stats, centroids = cv2.connectedComponentsWithStats(mask_closed, connectivity=8) print("连背景一起总共:", num) MIN_AREA = 40 # 面积小于 40 像素的当成噪声,按实际分辨率调整 for i in range(1, num): # 索引 0 是背景,必须跳过 x, y, w, h, area = stats[i] if area < MIN_AREA: continue cx, cy = centroids[i] print(f"缺陷 {i}: 面积={area}px 外接框=({x},{y},{w},{h}) 中心=({cx:.0f},{cy:.0f})")结构元kernel的大小决定去噪力度。缺陷本身只有 2 像素宽时,用 5×5 的核会把它一起抹掉,所以核必须比缺陷小。开运算和闭运算的顺序也别随意换,先开去噪点、后闭补断裂,反了会把噪声连成一片,那就越处理越糟。
connectedComponentsWithStats返回四个东西:个数、标签图、统计信息、质心。stats每一行是[x, y, w, h, area],area是像素面积,这是判断缺陷尺寸最直接的依据。从索引 1 开始循环,因为 0 是背景,这个细节错一次记一辈子。
4.5 第四步:画框出图,结果怎么读、参数怎么改
最后把检出的缺陷画回原图,让人一眼能看明白。这也是要交给操作工看的东西,不要省。
import cv2 import numpy as np img = cv2.imread("sample.png", cv2.IMREAD_GRAYSCALE) blur = cv2.GaussianBlur(img, (5, 5), 0) _, mask = cv2.threshold(blur, 90, 255, cv2.THRESH_BINARY_INV) kernel = np.ones((3, 3), np.uint8) mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel) num, labels, stats, _ = cv2.connectedComponentsWithStats(mask, connectivity=8) # 灰度图转彩色,才能画红色的框 out = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) MIN_AREA = 40 count = 0 for i in range(1, num): x, y, w, h, area = stats[i] if area < MIN_AREA: continue count += 1 cv2.rectangle(out, (x, y), (x + w, y + h), (0, 0, 255), 2) # 红框 cv2.putText(out, f"{area}px", (x, y - 4), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1) cv2.putText(out, f"defect: {count}", (10, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2) cv2.imwrite("result.png", out) print("最终检出:", count)cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)这行不能少,单通道图直接画彩色框是无效的,画完还是黑的。这是新手非常经典的翻车点,明明调了画框函数却什么都看不到。
矩形框坐标(x, y)是左上角,(x+w, y+h)是右下角,2是线宽。文字位置(x, y-4)放框上方一点,避免压住框线。
跑完之后重点看两件事:漏没漏、误没误。漏了,把90这个阈值往上调一点点,或者把MIN_AREA调小;误报了,反过来。每次只动一个参数,动完重跑,把结果记下来。这套「一次只改一个变量」的笨办法,是现场排查最靠得住的做法,比凭感觉连改五个参数快得多。
5. 新手避坑清单:五个让检测结果忽悠你的常见问题
5.1 成像与硬件上的坑
坑一:图像偶尔花屏、丢帧,重跑又好了。
现象上表现为系统跑着跑着突然报错,或者偶尔一张图糊掉,重拍又正常。原因多半不在代码,而在物理链路:线缆太长超出接口规格、屏蔽层没接好、相机和电脑不在同一路供电、或者线扫相机的触发信号和编码器不同步。解决顺序是先把线换成短的高质量线实测,再检查相机和光源是否共地,最后用示波器或触发计数器确认同步信号有没有丢。如果换短线上就正常了,那就是链路问题,别再折腾算法了。
坑二:白天调好的参数,夜班就误报一片。
现象是同一套参数在不同时段效果天差地别。原因通常是环境杂光——车间窗户、照明灯、甚至附近设备的指示灯都会串进来。解决方式是给相机加遮光罩,把工位局部封起来,只用受控光源;同时把曝光时间压短、用较强的瞬时打光压过环境光。这也是为什么现场验收要在不同时段各跑一轮。
坑三:换了新镜头,怎么调都不清楚。
现象是图像发虚,边缘尤其糊,聚焦环拧到头也不理想。原因很可能是工作距离超了镜头的对焦范围,或者镜头靶面比相机传感器小,导致四角发暗、成像圈不够。解决方式是先确认镜头的最近对焦距离和工作距离是否匹配,再核对镜头支持的最大靶面尺寸是否覆盖相机传感器,最后检查是不是光圈开太大导致景深太浅。这三项对不上,换多少个参数都白搭。
5.2 算法与流程上的坑
坑四:阈值在实验室好用,上产线三天就失效。
现象是刚部署时检出率很高,过几天误报、漏报一起上来。原因是阈值卡得太死,没有留余量,产品批次差异、光源老化、镜头积灰都会把系统推出有效区间。解决方式是把阈值设在对比度区间的中间位置而不是边缘,给光源做定期亮度校验,并且把每批产品的图像存一份做回溯。有条件的,把固定阈值改成自适应阈值或者基于参考图比对的方式。
坑五:只测合格品,不测缺陷,验收时才发现漏检。
现象是开发阶段一切顺利,验收当天拿出一批带缺陷的样品,系统检不出来。原因是很多人练手时手里只有好产品,参数是按照「不误报」调的,而不是按照「不漏检」调的。解决方式很直接:从第一天起就准备一份缺陷样本集,哪怕只有十几张,标注清楚类型和位置;每改一次参数,把样本集整体跑一次,记录检出率和误报率两个数。这两个数才是你的真实成绩单,眼睛看图说「好像还行」是最不可靠的评估方式。
6. 下一步学什么:从跑通一个例子到独立搭一套系统
第一个例子跑通之后,很多人会卡在「然后呢」。这里给一条我自己走过、也带过几个人走过的路径,按阶段推进就行,不用贪多。
| 阶段 | 重点学什么 | 大概花多久 | 检验标准 |
|---|---|---|---|
| 第 1 阶段 | 把第 4 章的流程在三种不同产品图上各跑一遍 | 1~2 周 | 能自己解释每个参数改了会怎样 |
| 第 2 阶段 | 相机参数、光源类型、镜头焦距与工作距离的搭配 | 2~4 周 | 能独立为一类产品配出合格图像 |
| 第 3 阶段 | 阈值分割之外:模板匹配、边缘提取、尺寸测量 | 1~2 个月 | 能做简单的尺寸和位置判定 |
| 第 4 阶段 | 用一套主流机器视觉算法软件把流程搭成图形化流程 | 1~2 个月 | 能做出带界面的检测程序 |
| 第 5 阶段 | 标定、通信、PLC 联动、结果记录与报表 | 2~3 个月 | 能把程序接到真实工位上跑 |
第 2 阶段最容易被跳过,但它恰恰是决定成败的阶段。我建议你专门花一周时间做「打光实验」:同一枚有划痕的样品,用环形光、条形光、背光、同轴光各拍一组,把四组图放在一起对比,看哪种打光下缺陷和背景的灰度差最大。这个练习做完,你对光的直觉会突然建立起来,后面看现场问题会快很多。
第 3 阶段开始碰算法工具,先别急着上深度学习。工业缺陷检测里大量的场景用传统方法就能解决,速度快、可解释、调试方便。只有当缺陷形态极度不规则、传统方法反复失败时,再考虑上模型——而且上模型之前,先回头检查图像质量,很多时候问题还在光上。
到第 4、第 5 阶段,你会开始接触相机标定、通信协议、和 PLC 对接这类「工程活」。这些内容枯燥但绕不开,因为一套系统能不能交付,看的不是算法多漂亮,而是能不能连续跑三个月不出怪问题。
还有一件事值得从现在就养成:把每次测试的参数、当次的光照条件、样品批次、检出结果都记下来,哪怕只用一张表格。PPT 里那些工作小结、测试报告,本质上就是这个习惯的产物——不是事后补出来的,是平时攒出来的。我第一次独立负责一个工位的时候,图省事没记参数,两周后回头想复现一组好结果,愣是复现不出来,只能从头再试一遍,那个下午非常难受。从那以后我每次调完参数,都会把参数、图、当时的光源设置一起存进一个按日期命名的文件夹,多花三十秒,省掉的是整天的返工。
希望这些能帮你把第一步迈出去,别怕拍得丑,先跑起来再说。
本文还有配套的精品资源,点击获取