很多刚接触工业视觉 AI 的工程师都会有一个非常简单的理解:

一个工业视觉系统大概是这样:

相机
 ↓
YOLO检测
 ↓
OK / NG

看起来似乎很简单。

但只要真正做过一个上线项目,你就会发现:

真实的工业视觉系统根本不是这样。

真实的系统更像是一个完整的软件系统工程。

它通常包含:

  • 图像采集
  • 数据缓存
  • AI 推理
  • ROI 分析
  • 传统视觉算法
  • PLC 通讯
  • UI 显示
  • 日志系统
  • 数据存储
  • 配置管理

很多 AI 项目失败,其实并不是因为 模型不行

而是因为:

系统架构从一开始就没有设计好。

这篇文章,我就结合 C# + YOLOv26 + ONNX + Halcon 的实际项目经验,拆解一个完整工业视觉 AI 系统到底长什么样。

一、真实的工业视觉 AI 系统结构

一个典型工业视觉系统通常分为 五层架构

设备层
数据层
AI推理层
算法层
系统层

整体结构如下:

      工业视觉 AI 系统

 ┌─────────────────────────────────────┐
 │               设备层                │
 │ 相机  光源  PLC  触发信号           │
 └─────────────────────────────────────┘
                    │
                    ▼
 ┌─────────────────────────────────────┐
 │               数据层                │
 │ 图像采集  RingBuffer  任务队列      │
 └─────────────────────────────────────┘
                    │
                    ▼
 ┌─────────────────────────────────────┐
 │             AI 推理层               │
 │ YOLOv26 + ONNXRuntime               │
 │ 缺陷检测 / 目标定位                  │
 └─────────────────────────────────────┘
                    │
                    ▼
 ┌─────────────────────────────────────┐
 │              算法层                 │
 │ ROI 提取 + Halcon 测量              │
 │ 尺寸检测 / 精确定位                 │
 └─────────────────────────────────────┘
                    │
                    ▼
 ┌─────────────────────────────────────┐
 │               系统层                │
 │ UI显示  PLC输出  日志  数据存储      │
 └─────────────────────────────────────┘

很多人第一次看到这个结构会发现:

原来工业视觉系统并不是一个“AI项目”,而是一个完整的软件系统。

二、设备层:工业视觉系统的入口

设备层负责和真实硬件交互。

通常包括:

工业相机
光源控制器
PLC
触发信号

典型流程:

PLC 触发
   ↓
相机采图
   ↓
图像进入处理流程

在 C# 项目中通常会有一个模块:

CameraService

负责:

相机连接
图像抓取
触发控制
异常恢复

很多系统一开始就出问题,其实是因为:

相机采集和算法处理耦合在一起。

正确做法应该是:

采集与处理解耦。

三、数据层:工业系统最容易被忽略的部分

很多 Demo 项目是这样写的:

GrabImage()
Detect()
Show()

但真实系统必须有一个 缓冲层

常见做法是:

RingBuffer
BlockingQueue
Channel

结构如下:

相机采集线程
       │
       ▼
   图像队列
       │
       ▼
AI推理线程

这样做有三个好处:

1️⃣ 防止采图阻塞
2️⃣ 支持多线程推理
3️⃣ 系统更稳定

很多系统 越跑越慢,就是因为没有这个设计。

四、AI 推理层:YOLO 负责“粗检”

AI 推理层一般负责:

目标检测
缺陷定位
区域识别

例如 YOLO 输出:

Bounding Box
Class
Confidence

在工业视觉中,YOLO 更适合做:

缺陷位置定位
ROI区域提取
目标分类

而不是直接做精密检测。

典型代码结构:

InferenceEngine
   ├─ ModelLoader
   ├─ Predictor
   └─ ResultParser

推理流程:

Image
 ↓
Preprocess
 ↓
ONNX Runtime
 ↓
Postprocess

五、算法层:Halcon 才是精密检测核心

在很多工业视觉项目中,真正做检测的是:

传统视觉算法。

例如:

Halcon
OpenCV

典型任务:

边缘检测
尺寸测量
位置校正
缺陷分析

一个常见架构是:

YOLO
 ↓
ROI区域
 ↓
Halcon 精确测量

这样可以同时利用:

AI 的泛化能力
传统算法的精度

这其实是很多成熟工业系统的标准方案。

六、系统层:决定系统能不能长期运行

系统层通常包括:

UI界面
PLC通讯
日志系统
数据保存
配置管理

例如:

UI系统

负责:

实时显示
结果可视化
参数调整

PLC通讯

负责:

OK / NG 输出
触发控制
设备联动

日志系统

工业系统必须有:

运行日志
异常日志
检测记录

否则现场出了问题几乎无法排查。

数据存储

很多系统还会保存:

NG 图片
检测结果
统计数据

用于质量追溯。

七、一个完整工业视觉项目的代码结构

一个典型 C# 项目结构可能是:

VisionSystem

├─ Device
│   ├─ CameraService
│   └─ PlcService
│
├─ Core
│   ├─ TaskQueue
│   └─ ImageBuffer
│
├─ AI
│   ├─ YoloPredictor
│   └─ OnnxInference
│
├─ Algorithms
│   ├─ ROIExtractor
│   └─ HalconInspector
│
├─ System
│   ├─ Logger
│   ├─ ConfigManager
│   └─ ResultStorage
│
└─ UI
    └─ MainWindow

这种结构有几个优点:

模块清晰
职责单一
方便维护

八、工业视觉 AI 项目最大的误区

很多人会把重点放在:

训练更好的模型
优化YOLO
增加数据

但真实情况是:

很多项目的问题根本不在模型。

而在:

系统架构
线程设计
数据流
异常处理

换句话说:

工业视觉 AI 项目,本质不是 AI 项目。

而是一个工业软件系统。

结语

如果你刚开始做工业视觉 AI,最重要的一件事不是:

学更多模型

而是理解:

一个完整系统是怎么设计的

因为只有架构正确:

AI 才能真正落地。

如果这个系列继续写下去,我下一篇准备讲一个很多人都会踩的坑:

《工业视觉 AI 系统为什么一定要做配置化设计?》

很多系统一旦上线就发现:

参数改不了
模型换不了
算法改不了

最后只能重新开发。

如果你做过工业视觉项目,应该会深有体会。

我正在整理一套《工业视觉AI实战工具包》,包括源码、案例、学习路线。
如果你想第一时间获取资料包,请关注公众号–视觉小码农

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐