在工业质检领域,玻璃制品检测一直是个让人头疼的难题。传统人工检测不仅效率低下(每小时最多检测200-300件),而且人眼容易疲劳导致漏检率高达15%-20%。我们团队通过计算机视觉技术实现的这套玻璃检测系统,在汽车挡风玻璃生产线上实现了99.2%的缺陷识别准确率,检测速度达到每秒5-8件。这个看似简单的项目标题背后,其实融合了光学成像、深度学习、机械自动化等多个技术领域的跨界创新。
玻璃材质带来的反光、透光特性让传统视觉检测束手无策。我们通过实验发现,普通工业相机拍摄的玻璃图像中,高达60%的区域会出现过曝或欠曝。最终采用的解决方案是:
初期尝试的传统算法方案(Canny边缘检测+SVM分类)在测试集上仅达到82%准确率。现采用的YOLOv5改进方案主要优化点包括:
python复制# 模型结构调整
model.yaml中新增:
- [[15, 18, 21], 1, Detect, [nc, anchors]] # 增加小目标检测头
- 输入分辨率从640提升到1280
# 数据增强策略
albumentations.Compose([
GlassReflectionSim(), # 自定义玻璃反光模拟
RandomDefocus(radius=3)
])
经过37次实验验证的光路配置方案:
| 组件 | 参数 | 作用 |
|---|---|---|
| 工业相机 | Basler ace 2 | 500万像素全局快门 |
| 镜头 | Computar M0814-MP2 | 8mm焦距,f/1.4 |
| 光源 | CCS LDR2-70SW2 | 70mm直径环形光 |
| 偏振片 | Edmund #54-875 | 消光比1000:1 |
实操提示:偏振镜角度需要与光源偏振方向精确保持45°夹角,误差超过5°就会显著影响成像质量
与汽车厂质检专家共同定义的缺陷分类体系:
标注时特别注意:对于边缘50px区域要加倍仔细检查,这里集中了63%的潜在缺陷。
我们发现不同生产批次的数据分布差异很大,最终采用"5+2"采样方案:
针对玻璃缺陷的小目标特性,在原有YOLO损失基础上增加:
python复制class GlassLoss(nn.Module):
def __init__(self):
super().__init__()
self.small_obj_weight = 2.0 # 小目标权重系数
def forward(self, pred, target):
# 计算原始YOLO损失
base_loss = yolo_loss(pred, target)
# 小目标补偿项
small_mask = target[..., 4] < 0.01 # 面积小于1%的target
small_loss = F.mse_loss(pred[small_mask], target[small_mask])
return base_loss + self.small_obj_weight * small_loss
这一改进使小缺陷检出率从71%提升到89%。
整套系统部署在6米长的检测流水线上,关键节点包括:
避坑经验:振动会导致成像模糊,我们在相机支架加了10kg配重块,振动幅度从0.8mm降到0.1mm
在Intel i7-11800H处理器上,原始模型推理需要210ms。通过以下优化实现68ms单帧处理:
我们在三个月试运行期间积累的故障案例库:
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 边缘误检率高 | 镜头畸变未校正 | 采集棋盘格标定图像 |
| 气泡检出率突降 | 光源亮度衰减 | 每月校准光照强度 |
| 系统间歇性卡顿 | 内存泄漏 | 使用valgrind检查 |
最棘手的是一次偏振片表面凝结水汽导致的检测失效,后来我们在光学箱体加了防潮剂和温度传感器。
这套系统目前已在3家汽车玻璃厂稳定运行超过6000小时,累计检测2300万件产品。让我意外的是,模型还自主发现了7类工艺人员都未留意的隐性缺陷模式,这或许就是AI带给制造业的额外惊喜。