上个月在常州一条电子元器件产线做AOI改造,客户运维团队全是.NET技术栈,之前供应商给的方案是Python跑推理、C#做上位机交互,跨进程用命名管道通信。部署的时候光装Python环境、配CUDA、解决依赖冲突就花了一下午,产线停了四个小时,客户现场负责人脸都黑了。
后来我们把整条链路全部重构为纯C#实现:大华相机原生SDK采图、ONNX Runtime DirectML跑YOLO26、业务逻辑和IO控制全在一个进程里。不用装Python,不用装CUDA开发包,整个程序打包完200多MB,拷到工控机改个IP就能跑。实测新工位部署全程3分钟,连续运行32天无异常,单帧端到端延迟不到10ms。
选型逻辑:每个选择都是工程痛点驱动的
很多人做方案先看技术新不新,工业现场先看维护麻不麻烦、出了问题能不能快速解决。
纯C#是底线要求。工业现场不是开发机,Python的包管理、环境变量、版本冲突在离线产线就是灾难。运维人员不会调pip,不会改环境变量,出了问题只能等研发远程,停线成本按分钟算。纯C#单进程部署,所有依赖打包进exe,双击就跑,维护成本几乎为零。
选大华相机不是因为它参数最好,是工业现场保有量高,SDK封装完善,.NET接口原生支持,不需要自己做C++互操作封装。硬触发精度到微秒级,直接对接产线光电传感器,不用额外加转换模块。
YOLO26的核心工程价值是无NMS架构。后处理代码量少60%,没有NMS阈值调参的玄学,性能稳定不波动。ONNX导出零算子兼容问题,在DirectML上跑没有任何坑。小目标检测能力也够,0402封装的焊点、引脚虚焊都能覆盖。
DirectML而不是CUDA,是部署成本的权衡。CUDA确实快10%