Winform部署图像分割模型一 Halcon导出C#*0设置参数dev_update_off()dev_close_window()dev_set_draw(margin)dev_set_line_width(1)*阈值分割置信度分数 MinArea:10tics:[]***1.加载模型read_dl_model(model_训练-260412-221025_opt.hdl,DLModelHandle)***2.设置参数set_dl_model_param(DLModelHandle,batch_size,1)GpuId:0if(GpuId0)set_dl_model_param(DLModelHandle,gpu,GpuId)endif***6.输入图像 ImageFile:Image_20251002184746892read_image(Image,ImageFile)SegTask(Image,ImagePreprocessed,SegRegion,DLModelHandle,MinArea,Names,Ids)***3.获取参数get_dl_model_param(DLModelHandle,image_dimensions,ImageDimensions)get_dl_model_param(DLModelHandle,class_ids,ClassIDs)get_dl_model_param(DLModelHandle,class_names,ClassNames)***5.创建图像输入采集对象字典create_dict(DLSample)zoom_image_size(Image,ImagePreprocessed,ImageDimensions[0],ImageDimensions[1],constant)convert_image_type(ImagePreprocessed,ImagePreprocessed,real)*0-255-127128scale_image(ImagePreprocessed,ImagePreprocessed,1,-127)*设置字典里set_dict_object(ImagePreprocessed,DLSample,image)***7.核心AI模型推理apply_dl_model(DLModelHandle,DLSample,[],DLResult)***8.解析预测结果get_dict_object(SegImage,DLResult,segmentation_image)get_dict_object(Confidence,DLResult,segmentation_confidence)*遍历所有的分割对象进行显示gen_empty_obj(SegRegion)Names:[]Ids:[]*按从1开始所有分割区域forI:1to|ClassIDs|-1by1*生成空区域gen_empty_region(Region)*核心 阈值分割把不同分割对象进行提取threshold(SegImage,Region,I,I)*打散connection(Region,ConnectedRegions)*筛选select_shape(ConnectedRegions,SelectedRegions,area,and,MinArea,99999999)union1(SelectedRegions,Region)area_center(Region,Area,Row,Column)if(Area0)concat_obj(SegRegion,Region,SegRegion)tuple_concat(Names,ClassNames[I],Names)tuple_concat(Ids,I,Ids)endif endforreturn()publicvoidSegTask(HObject ho_Image,out HObject ho_ImagePreprocessed,out HObject ho_SegRegion,HTuple hv_DLModelHandle,HTuple hv_MinArea,out HTuple hv_Names,out HTuple hv_Ids){// Stack for temporary objectsHObject[]OTempnewHObject[20];// Local iconic variablesHObject ho_SegImage,ho_Confidence,ho_Regionnull;HObject ho_ConnectedRegionsnull,ho_SelectedRegionsnull;// Local control variablesHTuple hv_ImageDimensionsnewHTuple(),hv_ClassIDsnewHTuple();HTuple hv_ClassNamesnewHTuple(),hv_DLSamplenewHTuple();HTuple hv_DLResultnewHTuple(),hv_InewHTuple();HTuple hv_AreanewHTuple(),hv_RownewHTuple(),hv_ColumnnewHTuple();// Initialize local and output iconic variablesHOperatorSet.GenEmptyObj(out ho_ImagePreprocessed);HOperatorSet.GenEmptyObj(out ho_SegRegion);HOperatorSet.GenEmptyObj(out ho_SegImage);HOperatorSet.GenEmptyObj(out ho_Confidence);HOperatorSet.GenEmptyObj(out ho_Region);HOperatorSet.GenEmptyObj(out ho_ConnectedRegions);HOperatorSet.GenEmptyObj(out ho_SelectedRegions);hv_NamesnewHTuple();hv_IdsnewHTuple();//** 3.获取参数hv_ImageDimensions.Dispose();HOperatorSet.GetDlModelParam(hv_DLModelHandle,image_dimensions,out hv_ImageDimensions);hv_ClassIDs.Dispose();HOperatorSet.GetDlModelParam(hv_DLModelHandle,class_ids,out hv_ClassIDs);hv_ClassNames.Dispose();HOperatorSet.GetDlModelParam(hv_DLModelHandle,class_names,out hv_ClassNames);//** 5.创建图像输入采集对象字典hv_DLSample.Dispose();HOperatorSet.CreateDict(out hv_DLSample);using(HDevDisposeHelper dhnewHDevDisposeHelper()){ho_ImagePreprocessed.Dispose();HOperatorSet.ZoomImageSize(ho_Image,out ho_ImagePreprocessed,hv_ImageDimensions.TupleSelect(0),hv_ImageDimensions.TupleSelect(1),constant);}{HObject ExpTmpOutVar_0;HOperatorSet.ConvertImageType(ho_ImagePreprocessed,out ExpTmpOutVar_0,real);ho_ImagePreprocessed.Dispose();ho_ImagePreprocessedExpTmpOutVar_0;}//0-255 -127 128{HObject ExpTmpOutVar_0;HOperatorSet.ScaleImage(ho_ImagePreprocessed,out ExpTmpOutVar_0,1,-127);ho_ImagePreprocessed.Dispose();ho_ImagePreprocessedExpTmpOutVar_0;}//设置字典里HOperatorSet.SetDictObject(ho_ImagePreprocessed,hv_DLSample,image);//** 7. 核心AI模型推理hv_DLResult.Dispose();HOperatorSet.ApplyDlModel(hv_DLModelHandle,hv_DLSample,newHTuple(),out hv_DLResult);//** 8.解析预测结果ho_SegImage.Dispose();HOperatorSet.GetDictObject(out ho_SegImage,hv_DLResult,segmentation_image);ho_Confidence.Dispose();HOperatorSet.GetDictObject(out ho_Confidence,hv_DLResult,segmentation_confidence);//遍历所有的分割对象进行显示ho_SegRegion.Dispose();HOperatorSet.GenEmptyObj(out ho_SegRegion);hv_Names.Dispose();hv_NamesnewHTuple();hv_Ids.Dispose();hv_IdsnewHTuple();//按从1开始所有分割区域for(hv_I1;(int)hv_I(int)((newHTuple(hv_ClassIDs.TupleLength()))-1);hv_I(int)hv_I1){//生成空区域ho_Region.Dispose();HOperatorSet.GenEmptyRegion(out ho_Region);//核心 阈值分割把不同分割对象进行提取ho_Region.Dispose();HOperatorSet.Threshold(ho_SegImage,out ho_Region,hv_I,hv_I);//打散ho_ConnectedRegions.Dispose();HOperatorSet.Connection(ho_Region,out ho_ConnectedRegions);//筛选ho_SelectedRegions.Dispose();HOperatorSet.SelectShape(ho_ConnectedRegions,out ho_SelectedRegions,area,and,hv_MinArea,99999999);ho_Region.Dispose();HOperatorSet.Union1(ho_SelectedRegions,out ho_Region);hv_Area.Dispose();hv_Row.Dispose();hv_Column.Dispose();HOperatorSet.AreaCenter(ho_Region,out hv_Area,out hv_Row,out hv_Column);if((int)(newHTuple(hv_Area.TupleGreater(0)))!0){{HObject ExpTmpOutVar_0;HOperatorSet.ConcatObj(ho_SegRegion,ho_Region,out ExpTmpOutVar_0);ho_SegRegion.Dispose();ho_SegRegionExpTmpOutVar_0;}using(HDevDisposeHelper dhnewHDevDisposeHelper()){HTuple ExpTmpOutVar_0;HOperatorSet.TupleConcat(hv_Names,hv_ClassNames.TupleSelect(hv_I),out ExpTmpOutVar_0);hv_Names.Dispose();hv_NamesExpTmpOutVar_0;}{HTuple ExpTmpOutVar_0;HOperatorSet.TupleConcat(hv_Ids,hv_I,out ExpTmpOutVar_0);hv_Ids.Dispose();hv_IdsExpTmpOutVar_0;}}}ho_SegImage.Dispose();ho_Confidence.Dispose();ho_Region.Dispose();ho_ConnectedRegions.Dispose();ho_SelectedRegions.Dispose();hv_ImageDimensions.Dispose();hv_ClassIDs.Dispose();hv_ClassNames.Dispose();hv_DLSample.Dispose();hv_DLResult.Dispose();hv_I.Dispose();hv_Area.Dispose();hv_Row.Dispose();hv_Column.Dispose();return;}二 SegTaskModelpublicclassSegTaskModel{[Category(图像分割任务参数),Description(最小面积)]publicdoubleMinArea{get;set;}10;[Category(图像分割任务参数),Description(推理图像数量)]publicintbatch_size{get;set;}1;[Category(图像分割任务参数),Description(GPU索引)]publicintgpu{get;set;}0;[Category(图像分割任务参数),Description(模型路径)]publicstring ModelPath{get;set;};}三 加载参数/// summary/// 分割任务参数/// /summarySegTaskModel segTaskModelnewSegTaskModel();/// summary/// 分割模型/// /summaryHTuple Seg_DLModelHandlenewHTuple();if(File.Exists(D:\\模型推理参数\\SegTaskModel.xml)){segTaskModelXmlSerializerHelper.ReadXML(D:\\模型推理参数\\SegTaskModel.xml,typeof(SegTaskModel))as SegTaskModel;propertyGrid3.SelectedObjectsegTaskModel;}else{segTaskModelnewSegTaskModel();propertyGrid3.SelectedObjectsegTaskModel;}/// 读取模型HOperatorSet.ReadDlModel(segTaskModel.ModelPath,out Seg_DLModelHandle);//** 2.设置参数//空间换时间 gpu显存有要求HOperatorSet.SetDlModelParam(Seg_DLModelHandle,batch_size,segTaskModel.batch_size);//** 设置GPUHOperatorSet.SetDlModelParam(Seg_DLModelHandle,gpu,segTaskModel.gpu);四 保存参数SegTaskModel TaskModel(SegTaskModel)propertyGrid3.SelectedObject;XmlSerializerHelper.WriteXML(TaskModel,D:\\模型推理参数\\SegTaskModel.xml,typeof(SegTaskModel));MessageBox.Show(保存成功);五 图像加载System.Windows.Forms.OpenFileDialog ofdnewSystem.Windows.Forms.OpenFileDialog();if(ofd.ShowDialog()System.Windows.Forms.DialogResult.OK){string filePathofd.FileName;// 读取图像HOperatorSet.ReadImage(out CurrImage,filePath);// 显示图像hWindow_Final3.HobjectToHimage(CurrImage);}六 模型推理SegTask(CurrImage,out HObject ho_ImagePreprocessed,out HObject ho_SegRegion,Seg_DLModelHandle,segTaskModel.MinArea,out HTuple hv_Names,out HTuple hv_Ids);hWindow_Final3.HobjectToHimage(ho_ImagePreprocessed);hWindow_Final3.DispObj(ho_SegRegion);七 设置参数SegTaskModel TaskModelpropertyGrid3.SelectedObject as SegTaskModel;HOperatorSet.ReadDlModel(TaskModel.ModelPath,out Seg_DLModelHandle);//空间换时间 gpu显存有要求HOperatorSet.SetDlModelParam(Seg_DLModelHandle,batch_size,TaskModel.batch_size);//** 设置GPUHOperatorSet.SetDlModelParam(Seg_DLModelHandle,gpu,TaskModel.gpu);segTaskModelTaskModel;