C#视觉缺陷检测框架源码,多工位电池缺陷检测,各工位可独立进行离线图片调试功能动态配置,相机飞… 程序测试正常,无,需自行安装搭建。 视觉软件框架应用于新能源行业电池缺陷检测多工位缺陷检测,相机,光源,通讯都能动态配置,同样适用于3C行业,C#应用高级反射可单独配置算法,各个相机采图可离线加载图片离线调试,解决了UI与算法耦合,每个相机运行时可以采集多张图处理数据,可在算法里进行处理,另外每个相机处理完结果后可以经过反射自定义over事件处理数据结果。 本产品由本人开发,应用C#高级功能,反射,特性。 此框架本人现场实际也在用

最近在新能源电池产线上折腾视觉检测系统,发现市面上的框架总有些水土不服。自己动手撸了个C#视觉检测框架,支持多工位离线调试和动态配置,在3C行业居然也能无缝切换,这就带大家看看核心实现。

动态配置这块用了C#反射黑科技。比如光源触发参数配置界面直接通过特性生成:

[Display("曝光时间", Group = "光源参数")]
public int ExposureTime { get; set; } = 8000;

[Display("触发延时", Group = "IO配置")]
public int TriggerDelay { get; set; } = 200;

通过遍历属性上的DisplayAttribute,自动生成带分组标签的UI控件。运行时修改参数直接序列化到本地json,产线换型时直接加载配置文件就行,不用重新编译。

算法模块解耦是关键。每个检测工位继承这个基类:

public abstract class AlgorithmBase
{
    [Input("原始图像")]
    public Bitmap SourceImage { get; set; }

    [Output("缺陷面积")]
    public double DefectArea { get; set; }

    public abstract void Process();
}

开发新算法只需要继承重写Process方法,输入输出用特性标记。主程序通过反射加载dll:

var algoTypes = Assembly.LoadFrom(dllPath)
                       .GetTypes()
                       .Where(t => t.IsSubclassOf(typeof(AlgorithmBase)));

这样UI完全不知道具体算法实现,算法工程师提交dll就能直接集成到系统。

离线调试模式贼实用,产线相机没到位时直接加载本地图片模拟:

void SimulateCameraCapture(string imagePath)
{
    var img = new Bitmap(imagePath);
    // 注入到算法输入
    CurrentAlgorithm.SourceImage = img; 
    // 触发处理流程
    AlgorithmRunner.Execute(CurrentAlgorithm);
}

处理结果实时显示在UI上,还能保存处理过程中的中间图像,方便后续缺陷分析。

事件处理用了反射+委托的组合拳。比如检测到划痕时触发自定义逻辑:

[ResultHandler("表面检测")]
void HandleSurfaceDefect(DefectData data)
{
    if(data.Severity > 0.8)
    {
        _alarmTrigger.Fire();
        MESSystem.ReportDefect(data);
    }
}

在算法配置界面勾选需要绑定的事件处理器,运行时通过反射动态挂载,不同产线可以灵活配置报警逻辑。

现场跑了大半年,这套框架最爽的是升级维护时不用停线——改完算法直接替换dll,参数调整就像改游戏外挂似的实时生效。下次可以聊聊怎么用Emit动态生成处理流水线,把处理速度提升了3倍多。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐