1. 项目背景与需求分析
在汽车制造装配线上,螺栓漏装或装配不到位是常见的质量问题。传统的人工检测方式存在效率低、易疲劳、主观性强等问题,而基于规则的传统机器视觉方案对复杂装配场景的适应性较差。我们开发的这套系统结合了C#上位机的工业控制优势和YOLOv8深度学习模型的高精度检测能力,实现了汽车零部件螺栓装配的自动化视觉验证。
关键指标要求:
- 检测精度≥99.5%(螺栓漏检率<0.5%)
- 单件检测时间≤200ms
- 支持4种以上螺栓类型识别
- 适应产线振动和光照变化环境
2. 系统架构设计
2.1 硬件组成
- 工业相机:Basler ace acA2000-50gc(500万像素,全局快门)
- 工控机:研华IPC-610(i7-1185G7/16GB/RTX3060)
- 光源:环形LED光源(8500K色温,可调亮度)
- PLC:西门子S7-1200(用于触发相机和接收检测结果)
2.2 软件架构
mermaid复制graph TD
A[工业相机] -->|GigE| B(C#上位机)
B --> C{YOLOv8推理引擎}
C --> D[结果可视化]
C --> E[PLC通信]
D --> F[WinForm界面]
E --> G[产线控制系统]
3. 核心实现步骤
3.1 YOLOv8模型训练
使用自定义数据集训练螺栓检测模型:
python复制from ultralytics import YOLO
# 加载预训练模型
model = YOLO('yolov8n.pt')
# 训练配置
model.train(
data='bolt_dataset.yaml',
epochs=300,
imgsz=640,
batch=16,
device=0
)
关键训练参数:
- 学习率:0.01(余弦衰减)
- 优化器:AdamW
- 数据增强:Mosaic9(增强小目标检测)
3.2 C#上位机开发
3.2.1 图像采集模块
csharp复制// 使用OpenCVSharp采集图像
using OpenCvSharp;
Mat CaptureFrame()
{
using var capture = new VideoCapture(0);
capture.Set(VideoCaptureProperties.FrameWidth, 2592);
capture.Set(VideoCaptureProperties.FrameHeight, 1944);
Mat frame = new Mat();
capture.Read(frame);
return frame;
}
3.2.2 ONNX推理集成
csharp复制// 加载YOLOv8 ONNX模型
var session = new InferenceSession("bolt_detection.onnx");
// 预处理
var inputTensor = new DenseTensor<float>(new[] {1, 3, 640, 640});
// ...填充图像数据...
// 推理
var inputs = new List<NamedOnnxValue>
{
NamedOnnxValue.CreateFromTensor("images", inputTensor)
};
using var results = session.Run(inputs);
// 后处理
var output = results[0].AsTensor<float>();
4. 性能优化技巧
4.1 推理加速方案
- TensorRT优化:将ONNX转换为TensorRT引擎
bash复制trtexec --onnx=bolt_detection.onnx --saveEngine=bolt_detection.trt
- 多线程处理:
csharp复制Parallel.For(0, frameCount, i =>
{
// 并行处理各帧
});
4.2 工业环境适配
- 抗振动:采用3帧中值滤波
- 光照补偿:自动白平衡算法
csharp复制Cv2.CvtColor(frame, frame, ColorConversionCodes.BGR2Lab);
var channels = Cv2.Split(frame);
Cv2.EqualizeHist(channels[0], channels[0]);
Cv2.Merge(channels, frame);
Cv2.CvtColor(frame, frame, ColorConversionCodes.Lab2BGR);
5. 系统部署与测试
5.1 部署清单
| 组件 | 版本 | 备注 |
|---|---|---|
| 操作系统 | Windows 10 IoT | 长期服务版 |
| .NET运行时 | 6.0.8 | 必需组件 |
| ONNXRuntime | 1.12.1 | GPU加速版 |
| OpenCVSharp | 4.5.5 | 图像处理 |
5.2 产线测试结果
测试数据(连续24小时):
- 总检测数:86,400件
- 漏检数:12件(漏检率0.014%)
- 平均耗时:158ms/件
- 系统稳定性:无崩溃/无内存泄漏
6. 常见问题解决
6.1 典型错误排查
-
推理速度慢:
- 检查GPU驱动版本
- 确认ONNXRuntime使用GPU模式
csharp复制var options = SessionOptions.MakeSessionOptionWithCudaProvider(0); -
误检率高:
- 增加负样本数量
- 调整NMS阈值(建议0.4-0.5)
6.2 维护建议
- 每周清洁相机镜头
- 每月校准光源亮度
- 每季度更新模型(增量训练)
这套系统在实际产线中已稳定运行6个月,将螺栓装配问题导致的返工率降低了92%。关键点在于工业环境下的模型优化和C#与深度学习框架的高效集成。对于想要复现的开发者,建议先从简化版的Demo开始,逐步增加工业级功能。
