机器视觉总结

66 阅读11分钟

自我介绍

  • 我做过三类设备:线体(2D引导+中段激光+3D电阻线扫)、六面检(自研平台+深圳个元,2D外观)、AOI+3DCT(苹果芯片层间与焊接质量)。

  • 技术栈与工程化:Qt/C++/OpenCV,海康 VM/3DMVS、自研平台;熟悉打光与标定、触发时序与PLC握手、参数版本化与日志追溯,直通率与节拍可量化优化。

项目综述

1.线体(防爆阀、超声焊、中段、氦检、电阻检)

  1. 2D:定位/对位、连续性与宽度分布、差分缺陷(飞溅/气孔)

  2. 中段激光:光斑距离与角度判定有无/翘边/叠料

  3. 3D线扫(海康3DMVS):去倾斜,红线峰域高度、黄线环中位与一致性

2.六面检(深圳个元 + 自研,2D)

每面打光方案;均一化→分割→形态学→连通域特征;分料与扫码复判;图片清理保障稳定

3.AOI/3DCT(苹果芯片)

切层面积统计、焊点落板交叠占比、气泡体积分比;体素标定、伪影校正、CAD掩膜配准

设备一:线体(2D/3D)

1.引导与标定

双相机:上下统一到下相机坐标;九点(平移+旋转)标定;吸嘴角度映射禁止旋转

单相机:下相机标定→拍照位模板→坐标经标定转换入全局变量

与PLC契约:坐标类型(相对/绝对)、单位、零点

- 2D检测(防爆阀/超声焊)

  - 均一化(顶帽/背景拟合)→降噪(高斯/中值/双边)→分割(OTSU/自适应/差分)→开闭→连通域特征

  - 指标:连续性断点≤N;宽度 W_mean/W_std ;飞溅/气孔面积与计数;偏移 d≤D_max

  • 中段激光方案

  - ROI贴边;两光斑质心与距离、相对角度;距差∈[D_min,D_max];翘边角度≤θ_max;叠料用双峰/强度异常判定

- 3D电阻检(海康3DMVS)

  - 匹配: mm/行 = 线速(mm/s) ÷ 线率(行/s) ,像素近似正方

  - 去倾斜:拟合参考平面 Z_ref , Z' = Z − Z_ref ; stub 为零位/偏移

  - 统计:红线 H_red = p95(Z_peak) − stub ;黄线环 H_ring = median(Z_ring) ;一致性 σ_ring = std(Z_ring) (角度等距 180–360点,环宽≥3–5像素)

  - 判定: H_red∈[H_min,H_max] 、 |H_ring−H_red|≤Δ 、 σ_ring≤阈

- 触发与时序

  - 传感器位置与去抖;频闪与曝光对齐;扫码触发间隔≥设备响应×安全系数(1.2–1.5)

- 结果结构与追溯

  - Seq/Ts/面别/Ok/Score/X/Y/Theta/W_mean/W_std/A/C/w_h/H_red/H_ring/σ_ring/Version/ErrorCode

  - 关键帧、掩膜、环剖面存档;日志含配方版本与设备状态

设备二:六面检(2D,自研+深圳个元)

- 主机协同

  - Linux:Production(识别与点位)、Cortex(统计与模型优化)

  - Windows:EC3216(上位机)、Visual-Inspection(扫码复判)、PictureCleaner(图片清理)

- 光学每面策略

  - 同轴抑高光;暗场提划痕/细纹(斜入射);背光做轮廓;必要时偏振/漫反射材料

- 2D管线

  - ROI→均一化→去噪→分割→形态学→连通域特征(面积、圆度 4πA/P² 、长宽比 w/h 、矩形度)

  - mm/Pixel = FOV_mm / 像素

- 上线与统计

  - 曝光与光源刻度在不饱和下取最大对比;分料位红/黑/黄;扫码间隔校准

  - 直通率≥70%(昨日 08:00–20:00);过杀/漏杀;Top3缺陷闭环

设备三:AOI/3DCT(苹果芯片)

- 体数据与预处理

  - 体素标定 voxel_size=(sx,sy,sz) ;伪影校正(束硬化/环状伪影);强度归一化;与CAD掩膜配准

- 切层与分割

  - 按Z切片或倾斜切片;在焊盘掩膜内分割焊料与空洞(3D 26-连通)

- 指标与阈值

  - 层面积: A_layer = N_pixels × sx × sy   - 焊点落板:交叠面积 A_overlap 与占比 R_overlap = A_overlap / A_pad (如阈≥0.9,按工艺)   - 气泡体积: V_void = N_voxels × sx × sy × sz ;占比 R_void = V_void / V_solder (阈值按 IPC/客户标准)

- 输出与追溯

  -Seq/Layer/PadId/A_layer/A_pad/A_overlap/R_overlap/V_void/R_void/Offset/Version/Code ;切片与小体块存档

软件工程(Qt/C++/OpenCV)

- 架构分层

  - 采集(SDK/VideoCapture/CT读入)→处理管线(OpenCV/自研算法)→UI(Qt)→通讯(串口/TCP/PLC)→存档与日志

- 并发与UI

  - 生产者-消费者队列;采集与处理线程解耦;跨线程更新 UI 只能用信号/槽

- C++关键点

  - RAII、智能指针、 std::move 、 std::weak_ptr 防循环引用; std::thread/mutex/condition_variable   - CMake与依赖管理(OpenCV/Qt/vcpkg/Conan);Release优化与运行库一致

- OpenCV关键点

  - 阈值(OTSU vs 自适应窗口)、形态学结构元素≈最小缺陷宽度/2、连通域与轮廓、几何拟合(直线/圆/旋转矩形)   - 性能:ROI、预分配、减少拷贝;批处理与管线化

- 网络与相机

  - GigE NIC:巨型帧、固定1Gbps全双工、关闭节能以太网、接收/传输缓冲合理   - 海康3DMVS:内部触发、原始图、Line0参数、用户集1;编码器分辨率与像素精度、行程长度填

触发时序与PLC

  • 握手状态机:Ready→Request→Ack→Done;超时重试与幂等;异常分级(轻微/可持续/停机)
  • 频闪与曝光对齐;传感器位置与去抖;扫码触发间隔≥响应×安全系数

关键公式与指标

  • mm/Pixel = FOV_mm / 像素
  • mm/行 = 线速(mm/s) ÷ 线率(行/s)
  • 圆度 C = 4πA / P² 、长宽比 w/h
  • 3D: H_red = p95(Z_peak) − stub ; H_ring = median(Z_ring) ; σ_ring = std(Z_ring)
  • CT: A_layer = N × sx × sy ; V_void = N × sx × sy × sz ; R_overlap = A_overlap/A_pad ; R_void = V_void/V_solder

故障诊断与优化

  • 引导偏移:抓边精度→九点一致性→坐标类型→吸嘴角度映射→PLC契约
  • 直通率低:复核打光/曝光→采样误图→混淆矩阵→难例增量标注→阈值与规则联动→A/B上线
  • 间距/卡料:线速降1–3%→传感器位置与去抖→入口位机械优化;单变量微调,≥200片验证
  • 扫码漏扫:触发间隔与分料位;视距与角度;≥100片复测
  • 3D异常:线率/线速不匹配、参考面拟合不稳、环宽与采样不足、像素非正方
  • CT陷阱:掩膜配准误差、强度漂移、伪影干扰;先做配准校核与归一化,再稳健分割

高频问题(附简答)

- 为什么选暗场提划痕

  - 暗场对微小表面高度变化敏感,斜入射增强细纹对比、抑制背景反光

- OTSU vs 自适应阈值何时用

  - OTSU适均匀光照;自适应适不均匀,窗口按纹理尺度选取

- 圆度与长宽比如何设阈

  - 圆度用于过滤非目标形状,阈值依目标形状稳定区间;长宽比约束方向性缺陷

- Qt如何跨线程更新UI

  - 只通过信号/槽把结果传到主线程;禁止直接操作控件

- std::move 与 std::weak_ptr 考点

  - std::move 触发移动语义; weak_ptr 避免 shared_ptr 循环引用导致泄漏

- mm/行与线率/线速的关系

  - mm/行 = 线速(mm/s) ÷ 线率(行/s) ;像素尽量近似正方保证测量一致性

- 九点标定为什么查第5点

  - 中心点校核拍照位与标定一致性;偏差说明坐标转换或治具零点问题

- 3D环一致性如何解释业务

  - 红线峰域为余高;黄线环中位与σ评估焊道均匀性;两者差值与波动受焊接质量影响

- CT焊点落板怎么判

  - 焊料与焊盘掩膜交叠面积与占比;占比不足视为落板不良,结合层面积与偏移复核

场景追问(深入)

- 如果光照不稳定造成分割漂移怎么办

  - 做均一化与自适应阈值;加模板差分;必要时参数随批次归一化与小模型校正

- 如果3DMVS高度波动大

  - 复核线率/线速匹配、像素比例、参考面拟合与环采样密度;扩大环宽、增加采样点

- 如果CT空洞跨层连通误判

  - ROI限制在焊料体内;3D连通与薄桥过滤;按层统计避免跨层误连

讲述模板(60秒)

- C++如何避免泄漏

  • 用 RAII 与智能指针;异常路径自动析构;少用裸指针

- C++多态的开销与替代

  • 虚表调用有间接开销;可用 CRTP/模板静态多态消除运行时开销

- 异常 vs 返回码

  • 性能敏感/硬实时多用返回码;库层允许异常,边界统一转换

- std::move 作用

  • 触发移动语义,转移资源所有权,避免拷贝

- std::weak_ptr 用途

  • 解决 shared_ptr 循环引用,非拥有观察者

- 栈溢出如何规避

  • 控制递归深度,改用迭代;大对象放堆;编译器栈大小设置

- 队列如何控吞吐与延迟

  • 有界队列、丢帧策略、优先级调度、批处理与分段打点监控

- Qt 信号/槽与线程

  • 跨线程只能用信号/槽,UI更新在主线程;采集与处理线程解耦

- Qt vs C++

  • Qt 是 C++ 框架,提供事件循环与元对象系统;不同于标准 C++ 的反射与信号/槽机制

技术岗高频(结合你的经历)

  • 直通率低如何提升
    • 复核打光与曝光→采样误图→混淆矩阵定位错因→难例增量标注→阈值与规则联动→上线 A/B 参数→监控曲线与节拍分段。
  • 引导偏移如何定位
    • 抓边精度→九点一致性(第5点校核拍照位)→坐标类型(相对/绝对)→吸嘴角度映射不可旋转→PLC 契约。
  • 3D线扫为何必须去倾斜
    • 去除整体坡度后红线/黄线反映真实余高与均匀性;否则统计受工件姿态影响,判定不稳。
  • CT焊点落板与气泡如何判定
    • 体素标定与掩膜配准;焊料与焊盘交叠占比 R_overlap ;空洞体积分比 R_void ;阈值按工艺标准。
  • Qt/C++/OpenCV工程化
    • 采集与处理线程解耦;跨线程更新 UI 用信号/槽;RAII 与智能指针避免泄漏;CMake 管理依赖;管线性能用 ROI/预分配与减少拷贝。

什么选择你们公司

  • 方向匹配:你们做工业视觉/产线检测,正好覆盖我经历的六面检、线体 2D/3D、电阻线扫与 AOI/3DCT,能快速落地并持续贡献。
  • 技术栈契合:自研平台 + OpenCV/Qt/C++/海康 VM/3DMVS 与我的栈高度一致;我已有管线化、PLC 握手、参数版本化与日志追溯的实战。
  • 场景挑战与成长:你们的复杂工艺与高质量要求(直通率、节拍、稳定性)适合我把调试经验转为工程化优化(A/B 参数、长尾节拍、数据闭环)。
  • 价值承诺:入职 1–3 个月能完成两个目标:稳定一个在产项目(直通率≥70%、节拍长尾压缩),并落地一套可复用的“参数与日志模板 + 关键帧追溯”。

平台/方案商:你们强调自研工具链与多场景适配,我擅长把现场问题抽象为通用管线与参数模板,能扩展平台能力。 制造/甲方:你们更看重良率与节拍,我有六面检和线体的异常闭环经验,能直接提升产线指标并减少误停机。 初创/快速迭代:你们重迭代和交付,我熟悉“快速上线+A/B 参数+日志追溯”的节奏,能带动团队形成标准化作战方法

- 你的优点与缺点

  • 优点:把调试经验转为工程化标准(管线化、参数版本化、日志追溯),落地快;现场定位问题有诊断树思维。
  • 缺点:早期偏执行,表达不够系统;已通过模板化文档与复盘分享改进团队协作。

- 三年规划

  • 1年:稳定核心项目,沉淀通用模块与参数模板;2年:牵头复杂场景(3D线扫/AOI-CT);3年:主导一条检测方案的标准化与复用。

- 离职原因

  • 希望从单纯调试转向“调试+工程化”,做更完整的闭环(代码/算法/上线与稳定性)。

  • 我做过线体(2D引导+中段激光+3D电阻线扫)、六面检(自研+个元,2D)、AOI+3DCT(层间与焊接质量)。工程上用Qt/C++/OpenCV搭管线,采集与处理解耦,PLC握手与串口/TCP触发;参数版本化与日志追溯,直通率≥70%。算法上2D用均一化/形态学/连通域特征,3D用去倾斜与红线/黄线环一致性;CT用体素标定、掩膜交叠与空洞体积分比。遇到直通率低、引导偏移、线扫波动、CT配准误差等问题,我用诊断树快速定位并闭环。