.NET 開(kāi)源工業(yè)視覺(jué)系統(tǒng) OpenIVS 快速搭建自動(dòng)化檢測(cè)平臺(tái)
前言
隨著工業(yè)4.0和智能制造的發(fā)展,工業(yè)視覺(jué)在質(zhì)檢、定位、識(shí)別等場(chǎng)景中發(fā)揮著越來(lái)越重要的作用。然而,開(kāi)發(fā)一個(gè)完整的工業(yè)視覺(jué)系統(tǒng)往往需要集成相機(jī)控制、圖像采集、圖像處理、AI推理、PLC通信等多個(gè)模塊,這對(duì)開(kāi)發(fā)人員提出了較高的技術(shù)要求。
推薦一個(gè)基于 .NET 平臺(tái)的開(kāi)源工業(yè)視覺(jué)軟件框架OpenIVS,提供完整的視覺(jué)系統(tǒng)開(kāi)發(fā)所需的基礎(chǔ)功能模塊,幫助大家快速開(kāi)發(fā)高效、穩(wěn)定的工業(yè)檢測(cè)系統(tǒng)。
項(xiàng)目介紹
OpenIVS 全稱 Open Source Industrial Vision System,是一個(gè)面向工業(yè)視覺(jué)領(lǐng)域的開(kāi)源軟件框架,提供一套標(biāo)準(zhǔn)化、模塊化、可擴(kuò)展的視覺(jué)系統(tǒng)開(kāi)發(fā)平臺(tái)。
它基于 .NET 平臺(tái)開(kāi)發(fā),支持與主流工業(yè)相機(jī)(如海康MVS)、圖像處理庫(kù)(如Halcon、OpenCV)、AI推理SDK(如深度視覺(jué)AI平臺(tái))進(jìn)行集成,并提供 PLC 控制、圖像采集、模型推理、結(jié)果反饋等功能模塊,適用于各種自動(dòng)化檢測(cè)場(chǎng)景。

項(xiàng)目功能
OpenIVS 主要包含以下核心功能模塊:
1、相機(jī)連接與圖像采集
支持海康MVS相機(jī)驅(qū)動(dòng);
可配置觸發(fā)方式、曝光參數(shù)、圖像保存路徑;
支持單相機(jī)或多相機(jī)管理;
圖像質(zhì)量與存儲(chǔ)策略可自定義。
2、AI模型推理
集成深度視覺(jué)AI平臺(tái)高性能SDK;
支持加載多個(gè)模型并實(shí)現(xiàn)級(jí)聯(lián)推理;
支持圖像預(yù)處理與結(jié)果后處理;
模型路徑可通過(guò)界面動(dòng)態(tài)配置。
3、PLC控制與設(shè)備邏輯
支持Modbus串口通信協(xié)議;
可設(shè)置串口參數(shù)、設(shè)備ID、寄存器地址;
提供位置控制、OK/NG信號(hào)反饋等基礎(chǔ)邏輯;
支持?jǐn)U展自定義控制動(dòng)作。
4、系統(tǒng)配置與設(shè)置
提供圖形化設(shè)置頁(yè)面,便于修改相機(jī)參數(shù)、PLC設(shè)置、模型路徑;
支持圖像保存策略(是否保存OK圖或NG圖);
可靈活調(diào)整位置序列、處理流程、圖像處理算法等。
項(xiàng)目特點(diǎn)
OpenIVS 不僅功能全面,還具備以下優(yōu)勢(shì):
模塊化設(shè)計(jì)
各功能模塊(相機(jī)、AI、PLC、圖像處理)高度解耦,便于獨(dú)立開(kāi)發(fā)、調(diào)試與替換。
開(kāi)源免費(fèi)
作為開(kāi)源項(xiàng)目,開(kāi)發(fā)者可以自由查看源碼、進(jìn)行二次開(kāi)發(fā),適配自身業(yè)務(wù)需求。
易于擴(kuò)展
支持多相機(jī)、多模型、多任務(wù)并發(fā)處理,滿足復(fù)雜工業(yè)場(chǎng)景下的定制化需求。
跨平臺(tái)兼容性好
基于 .NET 平臺(tái),可在 Windows 上穩(wěn)定運(yùn)行,未來(lái)可拓展至 Linux 環(huán)境。
實(shí)時(shí)性強(qiáng)、穩(wěn)定性高
通過(guò)異步處理機(jī)制和良好的資源管理,確保系統(tǒng)在高頻率檢測(cè)任務(wù)中的實(shí)時(shí)性和穩(wěn)定性。

安裝需求
在使用 OpenIVS 前,需要安裝以下軟件:
1、海康相機(jī)MVS
版本:MVS_STD_4.4.0_240913.exe
下載地址:MVS_STD_4.4.0_240913.zip
用于相機(jī)連接和圖像采集

2、Halcon(可選)
版本:halcon-20.11.1.0-windows.exe
下載地址:https://www.mvtec.com/downloads
如果需要使用Halcon接口進(jìn)行圖像處理,則需要安裝
3、深度視覺(jué)AI平臺(tái)
官方網(wǎng)站:https://dlcv.com.cn
需要安裝高性能SDK套件才能加載模型進(jìn)行推理
需要使用深度視覺(jué)AI平臺(tái)訓(xùn)練模型
該SDK提供了模型推理所需的各項(xiàng)功能
參考文檔:https://docs.dlcv.com.cn/deploy/csharp_sdk

項(xiàng)目使用
1、修改PLC配置
在 ModbusManager.cs 中可以修改PLC相關(guān)配置:
串口通信參數(shù)設(shè)置
_modbusApi.SetSerialPort(
settings.PortName, // 串口名稱
settings.BaudRate, // 波特率
settings.DataBits, // 數(shù)據(jù)位
settings.StopBits, // 停止位
settings.Parity, // 校驗(yàn)位
(byte)settings.DeviceId // 設(shè)備ID
);
也可以在設(shè)置頁(yè)面修改:

位置控制參數(shù)
修改MoveToPositionAsync方法可調(diào)整位置控制邏輯
調(diào)整位置精度:Math.Abs(currentPosition - position) < 1.0f
增加其他動(dòng)作
可在ModbusManager中增加其他PLC控制動(dòng)作,以滿足特定需求。例如:增加 OK/NG 信號(hào)控制。
假設(shè) PLC 通過(guò)寫(xiě)入寄存器 16 實(shí)現(xiàn) OK/NG 信號(hào)控制,可以在ModbusManager中增加如下方法:
_modbusApi.WriteSingleRegister(16, isOK);
2、修改相機(jī)配置
修改相機(jī)配置
單相機(jī)的情況下,可以在設(shè)置頁(yè)面修改,包括相機(jī)名稱,觸發(fā)方式等:

同時(shí)也可以在設(shè)置頁(yè)面修改:
- 存圖路徑
- 存圖質(zhì)量
- 是否存儲(chǔ)OK圖或NG圖
多相機(jī)支持
- 多相機(jī)的情況下,可以在
CameraInitializer.cs中修改相機(jī)連接參數(shù): - 當(dāng)前系統(tǒng)使用單例模式管理相機(jī):
CameraInstance.Instance
若需支持多相機(jī),可修改為列表管理多個(gè)相機(jī)實(shí)例
// 多相機(jī)管理示例
private List<CameraManager> _cameraManagers = new List<CameraManager>();
// 初始化多個(gè)相機(jī)
public void InitializeMultipleCameras(Settings settings)
{
foreach (var cameraConfig in settings.CameraConfigs)
{
var cameraManager = new CameraManager();
// 設(shè)置相機(jī)參數(shù)
_cameraManagers.Add(cameraManager);
}
}
3、修改模型推理方法
設(shè)置模型路徑
在設(shè)置頁(yè)面,可以修改模型路徑:

自定義模型推理
在 ModelManager.cs 中可以修改AI模型推理相關(guān)配置:
加載多個(gè)模型
// 多模型管理示例
private Dictionary<string, Model> _models = new Dictionary<string, Model>();
// 加載多個(gè)模型
public void LoadModels(List<string> modelPaths)
{
foreach (var path in modelPaths)
{
string modelName = Path.GetFileNameWithoutExtension(path);
_models[modelName] = new Model(path, 0);
}
}
實(shí)現(xiàn)模型級(jí)聯(lián)
可修改PerformInference方法實(shí)現(xiàn)多模型級(jí)聯(lián)推理
// 級(jí)聯(lián)推理示例
public string PerformCascadeInference(Bitmap image)
{
// 第一階段:檢測(cè)
var detectionResult = _models["DetModel"].InferBatch(imageList);
// 第二階段:分割
var smallImages = CropImage(image, detectionResult);
var segmentationResult = _models["SegModel"].InferBatch(smallImages);
return segmentationResult;
}
自定義結(jié)果處理
可修改結(jié)果提取和處理邏輯,實(shí)現(xiàn)更復(fù)雜的決策規(guī)則
4、修改設(shè)備邏輯
簡(jiǎn)單的設(shè)備邏輯可以在設(shè)置里修改:

自定義處理邏輯
在 MainLoopManager.cs 中可以修改整體處理邏輯:
1、修改位置序列
// 位置序列定義可以根據(jù)需要調(diào)整
private readonly float[] _positionSequence = new float[] { 195, 305, 415, 305 };
2、調(diào)整處理流程
主流程在RunMainLoopAsync方法中定義
可修改移動(dòng)-拍照-推理的順序或添加額外步驟
3、添加圖像預(yù)處理
在ProcessImageAsync方法中添加圖像處理邏輯
// 圖像預(yù)處理示例
private Bitmap PreprocessImage(Bitmap image)
{
using (var mat = BitmapConverter.ToMat(image))
{
// 添加預(yù)處理步驟,如二值化等
Cv2.CvtColor(mat, mat, ColorConversionCodes.BGR2GRAY);
Cv2.Threshold(mat, mat, 128, 255, ThresholdTypes.Binary);
return BitmapConverter.ToBitmap(mat);
}
}
4、自定義后處理邏輯
在推理結(jié)果處理后添加自定義邏輯,如結(jié)果聚合、條件判斷等
// 后處理邏輯示例
private bool PostProcessResult(string result)
{
// 實(shí)現(xiàn)自定義決策邏輯
if (result.Contains("缺陷") && _currentPositionIndex == 2)
{
// 特定位置的特定缺陷處理
return false;
}
return string.IsNullOrEmpty(result);
}
項(xiàng)目源碼
Gitee: https://gitee.com/dl-cv/OpenIVS
總結(jié)
OpenIVS 是一個(gè)功能強(qiáng)大、結(jié)構(gòu)清晰、易于擴(kuò)展的開(kāi)源工業(yè)視覺(jué)系統(tǒng)框架。無(wú)論你是剛?cè)腴T(mén)的視覺(jué)開(kāi)發(fā)新手,還是有經(jīng)驗(yàn)的工程師,都可以借助 OpenIVS 快速搭建起屬于自己的工業(yè)檢測(cè)系統(tǒng)。
它不僅提供了從圖像采集到缺陷識(shí)別的全流程能力,還開(kāi)放了豐富的配置接口和擴(kuò)展點(diǎn),極大地降低了開(kāi)發(fā)門(mén)檻和項(xiàng)目周期成本。
以上僅展示了OpenIVS 平臺(tái)的部分功能。更多實(shí)用特性和詳細(xì)信息,請(qǐng)大家訪問(wèn)項(xiàng)目源碼。
希望本文能為從工業(yè)視覺(jué)開(kāi)發(fā)的技術(shù)人員提供有價(jià)值的參考,感謝您閱讀本篇文章,也歡迎交流討論更多關(guān)于工業(yè)視覺(jué)平臺(tái)設(shè)計(jì)與落地的經(jīng)驗(yàn)!
關(guān)鍵詞:OpenIVS、工業(yè)視覺(jué)、圖像處理、AI推理、PLC控制、C#、.NET、相機(jī)采集、開(kāi)源框架、自動(dòng)化檢測(cè)
最后
如果你覺(jué)得這篇文章對(duì)你有幫助,不妨點(diǎn)個(gè)贊支持一下!你的支持是我繼續(xù)分享知識(shí)的動(dòng)力。如果有任何疑問(wèn)或需要進(jìn)一步的幫助,歡迎隨時(shí)留言。
也可以加入微信公眾號(hào)[DotNet技術(shù)匠] 社區(qū),與其他熱愛(ài)技術(shù)的同行一起交流心得,共同成長(zhǎng)!


浙公網(wǎng)安備 33010602011771號(hào)