做过上位机开发的人,一般都被视觉检测项目“磨”过。
项目前期跑得好好的,后面加功能就开始难受。海康的千兆网相机接进来了,条码识别要加上去,尺寸测量也得安排,主程序里的 case 越堆越多,改一处,别处就炸,测试全跑一遍,越往后越不敢动手。耦合一高,每次新增需求都是一边拆东墙、一边补西墙。
最近在 GitHub 上翻到一个 C# 视觉框架,名字叫 InsightFactory,恰好就是冲着这类问题去的。

从一个检测流程开始
它把图片、参数、检测结果和设备连接都放进了同一个上位机框架里,不只是几个孤立的算法示例。没有工业相机的时候,可以先用本地图片或者模拟模式调试,等相机和现场设备都到位了再切到实时采集,前期开发不必一直干等硬件。

目前能直接跑的是灰度处理和轮廓提取这类基础功能,适合先做流程验证。系统会按照设定好的阈值,计算数量、面积、圆度、长宽比等结果,最后给出 OK 或 NG 的判断。

检测参数不需要硬编码在代码里。灰度阈值、最小面积、圆度这些都可以在界面上直接改,生产批次、产品型号和操作员信息也能一并保存。现场调试时,算法人员不用为了改一个阈值反复改程序、编译、再整套重新部署——这在实际产线上能省不少事。
产品换了,先切配方
工业现场很少只生产一种产品,不同型号对应的检测区域和判定标准完全不同。InsightFactory 提供了配方管理,支持创建、保存和另存检测方案。

配方可以和相机配置绑定,参数保存在 SQLite 中。换产品时切换对应配方就行,用不着一堆散落的配置文件。如果当前配置跟产品不匹配,系统会直接拒绝加载,避免误用。
检测过程中,底部日志栏会实时显示异常,历史检测记录也能查询。再配合系统自检,数据目录、SQLite、视觉库、相机 SDK 以及默认配方统统可以一次性检查。

PLC 连接也留好了位置
视觉检测最终要跟产线动作配合起来,结果出来后一般得通知 PLC。项目目前支持欧姆龙 FINS 协议,可以连接、断开并测试 PLC。

PLC 地址支持集中管理,配置也能导入导出。当前支持的协议还不多,但这层连接已经预设了扩展位置,作为后续接入其他协议的基础。
真正有意思的是插件架构
InsightFactory 把检测业务拆成了插件,主程序只负责加载、调度和运行。比如后续要加条码识别,可以单独做一个插件;更换算法也不必再动主体工程。
插件由 InsightFactory.Contracts 约束,生命周期、视觉任务、参数配置和日志回调接口都在这一层定义。插件不直接依赖主程序,可以独立编译、更新和动态加载,后续维护会轻松很多。

这才是它解耦的关键——不是简单把代码拆成几个 DLL,而是让主程序和具体检测逻辑之间有一份稳定的契约。项目里还带了一个 SamplePlugin 模板,注册、初始化、执行、配置和释放都给出了参考示例。第一次照着模板改,比从空项目开始摸索快得多。
本地跑起来不复杂
环境要求是 Visual Studio 2022 及以上、.NET 6/7/8 和 Windows 10/11。项目本身没有第三方依赖,配置起来比较省心,可以先在本地跑起来。
git clone https://github.com/agentthink/insight-factory
打开解决方案,还原 NuGet 包并生成,主程序会自动扫描插件目录,加载符合要求的插件,然后启动检测服务。
需要提前说明的是,这个项目目前还只是基础框架,刚刚创建不久,没有正式发行版和许可证。如果要学习 C# 工业视觉上位机,或者做检测原型验证,它值得拿来研究。但如果准备直接接管一条稳定运行的产线,暂时还不合适,更适合前期验证。
有需要的朋友可以下载试一试。更多工业视觉与 C# 上位机开发的实战内容,云栈社区也有不少同行在持续分享。
开源地址:https://github.com/agentthink/insight-factory