前言
VisionMaster(后簡稱VM)作為一款功能強大的工業(yè)圖像算法平臺,可對工業(yè)中遇到的各種圖像進行處理,同時擁有性能強大的算子以及豐富的教學例程,作為圖像處理的通用平臺是非常不錯的選擇。但Vision Master軟件依舊有不足,就是難以配置復雜或定制化的圖形界面,故需要結合其他軟件聯(lián)合編程開發(fā)。因此,VM同步推出面向對象編程的平臺SDK(Software Development Kit)開發(fā)。VM SDK開發(fā)理念是以極少的代碼實現(xiàn)視覺軟件的集成開發(fā),從而降低視覺開發(fā)人員對視覺處理邏輯代碼的維護成本。本文將詳細介紹如何使用VM SDK聯(lián)合C#二次開發(fā)。
一、VM SDK(4.2版本)介紹
VM算法平臺和VM SDK的區(qū)別
VM算法平臺是??禉C器人自主開發(fā)的機器視覺軟件,致力于為客戶提供快速搭建視覺應用、解決視覺檢測難題的算法工具,能滿足視覺定位、尺寸測量、缺陷檢測以及信息識別等機器視覺應用。
VM SDK是基于VM算法平臺中的方案、流程和模塊工具等進行對象級封裝的二次開發(fā)工具包,用戶可通過VM SDK提供的方案、流程和模塊工具中各個對象的功能接口進行相應的數(shù)據(jù)交互與運行控制。同時提供相應的流程配置控件、參數(shù)配置控件、渲染控件、全局工具控件以及前端運行界面控件等,方便進行方案編輯、參數(shù)配置以及渲染展示,便于靈活進行開發(fā),并擴展機器視覺應用。VM SDK在安裝VM軟件后會同步安裝在安裝路徑下的Development文件夾下,并提供了開發(fā)文檔及豐富的二次開發(fā)示例。
二、開發(fā)步驟
VM SDK開發(fā)的載體是方案(VmSolution),且同一臺電腦同一時刻只支持一個二次開發(fā)進程運行,因此其二次開發(fā)是都是圍繞VmSolution這個單例開發(fā)的,大概開發(fā)思路如下圖(參考VM二次開發(fā)文檔)所示:
2.1 方案加載
VM二次開發(fā)方案加載: 方案后綴為sol(一般建議在VM軟件中創(chuàng)建好算法方案,在二次開發(fā)中調用),路徑為絕對路徑。
VmSolution.Load(“方案路徑”);
加載完成后就可以對方案進行操作了,當然VM SDK也提供了用來顯示方案的控件(VmProcedureConfigControl 流程配置控件和VmMainViewCongfigControl 主界面控件),無需綁定,只要界面中有這兩個中任意控件,加載完方案后會自動綁定顯示,如圖所示為實際加載效果。
2.2 參數(shù)修改
VM二次開發(fā)為修改算法參數(shù)提供了兩種方式:
2.2.1 方式1: 用自帶的參數(shù)配置控件( VmParamsConfigControl 參數(shù)配置控件、VmParamsConfigWithRenderControl 參數(shù)配置帶渲染控件)調參。
控件綁定模塊代碼示例:
IMVSCircleFindModuCs.IMVSCircleFindModuTool circleFindTool = (IMVSCircleFindModuCs.IMVSCircleFindModuTool)VmSolution.Instance["流程1.圓查找1"];
vmParamsConfigWithRenderControl1.ModuleSource = circleFindTool;
綁定完成后,控件就會自動填充當前模塊的參數(shù)配置信息,然后進行修改即可(注意這里修改的參數(shù)并不會實時保存到方案文件里,需要調用方案保存接口才會保存)。
2.2.2 方式2: 調用工具類的模塊參數(shù)對象(ModuParams)提供的接口或Public屬性(可以在開發(fā)文檔中查閱、也可以在VS中進入相關參數(shù)類的定義中進行查閱)來修改。示例代碼如下:
IMVSCircleFindModuCs.IMVSCircleFindModuTool circleFindTool = (IMVSCircleFindModuCs.IMVSCircleFindModuTool)VmSolution.Instance["流程1.圓查找1"];
circleFindTool.ModuParams.RadNum = 10;
2.3 流程執(zhí)行
VM算法執(zhí)行方式有多種:二次開發(fā)仍然支持VM中配置的硬觸發(fā)和通訊觸發(fā),同時提供了Run接口來支持軟觸發(fā)。軟觸發(fā)示例代碼如下:
VmSolution.Instance.Run();
上述的方案Run接口會觸發(fā)所有流程同時執(zhí)行一次,當然也提供了單個控制流程/模塊執(zhí)行的方式,需要先實例化需要Run的流程/模塊對象,然后調用該對象的Run接口即可觸發(fā)流程/模塊執(zhí)行,示例代碼如下:
VmProcedure vmProcess1 = (VmProcedure)VmSolution.Instance["流程1"];
vmProcess1.Run();
var circleFind = (IMVSCirrleFindModuTool)VmSolution.Instance["流程1.圓查找1"];
circleFind.Run();
2.4 結果獲取
2.4.1 渲染結果獲?。?/strong>
方式1: VM SDK提供了渲染控件(vmRemderControl),可以通過給該控件直接綁定流程/模塊對象資源來實現(xiàn)相應對象顯示設置配置的渲染。示例代碼如下:
VmProcedure vmProcess1 = (VmProcedure)VmSolution.Instance["流程1"];
vmRenderControl1.ModuleSource = vmProcess1;
//綁定模塊渲染結果
Var circleFind = (IMVSCircleFindModuTool) VmSolution.Instance["流程1.圓查找1"];
vmRenderControl1.ModuleSource = circleFind;
需要注意的是:這里的渲染綁定是動態(tài)綁定,只需在流程/方案執(zhí)行前綁定一次即可,后續(xù)流程/方案運行時渲染界面會實時更新對應綁定對象的渲染結果(對應的是模塊/流程的顯示設置信息:圖像、形狀信息和文字信息)。
方式2: 自己獲取圖形或文字數(shù)據(jù)在VM SDK提供的渲染控件上繪制。示例代碼如下:
//設置圖像
var imageSource = (ImageSourceModuleCs.ImageSourceModuleTool)VmSolution.Instance["流程1.圖像源1"];
vmRenderControl1.ModuleSource = imageSource;
//自定義圖形
VMControls.WPF.LineEx line = new VMControls.WPF.LineEx();
line.StartPointX = 100;
line.StartPointY = 100;
line.EndPointX = 300;
line.EndPointY = 300;
line.StrokeThickness = 10;
vmRenderControl1.DrawShape(line);
//自定義文本
VMControls.WPF.TextEx text = new VMControls.WPF.TextEx();
text.Content = "歡迎使用VM4.2二次開發(fā)!";
text.FontSize = 30;
text.Position = new System.Windows.Point(100, 100);
text.Height = 100;
text.Width = 100;
text.Stroke = "#FF0000";//設置顏色
text.StrokeThickness = 10;
vmRenderControl1.DrawShape(text);
2.4.2 數(shù)據(jù)結果獲?。?/strong> 需要通過對應工具類的結果對象類獲取。
方式1: 可以在搭建流程時將流程內的模塊結果都綁定到流程的輸出設置里,然后統(tǒng)一使用流程對象提供的結果獲取接口進行獲取。部分接口示例如下:
//通過流程獲取結果
VmProcedure vmProcess1 = (VmProcedure)VmSolution.Instance["流程1"];
string ocrResult = vmProcess1.ModuResult.GetOutputString("out").astStringVal[0].strValue;
string ocrNum = vmProcess1.ModuResult.GetOutputInt("out0").pIntVal[0].ToString();
方式2: 通過每個工具類的模塊結果對象(ModuResult)獲取,示例代碼如下:
//通過模塊獲取結果
IMVSOcrModuCs.IMVSOcrModuTool ocrTool = (IMVSOcrModuCs.IMVSOcrModuTool)VmSolution.Instance["流程1.字符識別1"];
string ocrScore1 = ocrTool.ModuResult.CharNum.ToString();
總結
本文遞進式地介紹VM SDK的使用,同時VM SDK安裝包里提供了大量能使我們快速上手的開發(fā)文檔及示例Demo,用戶也可以參考官方提供的開發(fā)資源,利用好這些資源基本能實現(xiàn)大部分的開發(fā)需求。
附開發(fā)資源路徑:文章來源:http://www.zghlxwxcb.cn/news/detail-453269.html
- 開發(fā)手冊:VisionMaster4.2.0\Development\V4.x\Documentations
- 開發(fā)案例:VisionMaster4.2.0\Development\V4.x\Samples(…\C#\ApplicationDemo為新增的應用案例,包含定位引導、OCR識別和深度學習分類案例)
- V社區(qū)(VM開發(fā)者技術園地)鏈接:https://www.v-club.com/home
- 資料薈萃鏈接:https://one.hikvision.com/#/link/XcwZ3QdfwYzO8f6TqlI3 提取密碼:kGHn(包含開發(fā)教程、軟件Demo、講解視頻和問答集FAQ,無需注冊,直接下載)
最后附上一張VM二次開發(fā)的案例效果圖:
?文章來源地址http://www.zghlxwxcb.cn/news/detail-453269.html
到了這里,關于【VisionMaster SDK開發(fā)】第三講 C#二次開發(fā)介紹及應用案例的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!