跳到主要内容

高性能SDK套件 - C#接口

软件预览

接口概览

C# 接口有以下几个:

namespace dlcv_infer_csharp
{
public class Model
{
Model(string modelPath, int device_id)
JObject GetModelInfo();
Utils.CSharpResult Infer(Mat image);
Utils.CSharpResult InferBatch(List<Mat> image_list);
dynamic InferOntOutJson(Mat image);
}
public class Utils
{
public static void FreeAllModels();
public static JObject GetGpuInfo();
}
}

加载模型

加载模型输入模型地址即可,device_id是GPU编号,从0开始。

参考代码:

Model model = new Model(selectedFilePath, device_id);

样例结果:

{
"code": 0,
"message": "Succesfully loaded model.",
"model_index": 0
}

获取模型信息

JObject result = model.GetModelInfo();

样例结果:

{
"code": 0,
"message": "Successfully got model info.",
"model_info": {
"category_map": {
"划痕": "划痕",
"斑点": "斑点",
"油污": "油污"
},
"classes": [
"划痕",
"斑点",
"油污"
],
"in_channels": 3,
"model_type": "MaskRCNN",
"num_classes": 3,
"task_type": "实例分割"
}
}

推理结果

模型推理输入的格式是 OpenCV 的 Mat,通道顺序是 RGB

CSharpResult result = model.Infer(image);

推理结果的格式:

public struct CSharpObjectResult
{
public CSharpObjectResult(int categoryId, string categoryName, float score, float area, List<double> bbox, bool withMask, Mat mask);

public int CategoryId { get; set; }
public string CategoryName { get; set; }
public float Score { get; set; }
public float Area { get; set; }
public List<double> Bbox { get; set; }
public bool WithMask { get; set; }
public Mat Mask { get; set; }
}
public struct CSharpSampleResult
{
public CSharpSampleResult(List<CSharpObjectResult> results);

public List<CSharpObjectResult> Results { get; set; }
}
public struct CSharpResult
{
public CSharpResult(List<CSharpSampleResult> sampleResults);

public List<CSharpSampleResult> SampleResults { get; set; }
}
  • CSharpResult 表示本次推理的结果,可以是n张图的结果,存储在 sampleResults 中
  • CSharpSampleResult 表示某一张图的推理结果,结果可以有多个检测框,每个检测结果存储在 Results 中
  • 每个 CSharpObjectResult 表示一个类的结果,有类型、分数、面积、检测框、Mask结果等类型
    • CategoryId,类别索引
    • CategoryName,类别名称
    • Score,置信度分数
    • Area,面积
    • Bbox,检测框,按 x, y, w, h 排列,(x, y) 是左上角坐标,(w, h) 是检测框的宽度和高度尺寸
    • Mask,检测框内的mask矩阵

关于模型的类型和任务类型,有以下几种:

  • 实例分割、语义分割,所有结果都有
  • 目标检测,没有mask,没有面积,有检测框和类别
  • 分类,只有类别和分数

获取显卡信息

使用下面的代码获取显卡信息:

JObject device_info = Utils.GetGpuInfo();

返回结果样例:

{
"code": 0,
"devices": [
{
"device_id": 0,
"device_name": "NVIDIA GeForce RTX 4090"
},
{
"device_id": 1,
"device_name": "NVIDIA GeForce GTX 1050"
}
]
}

常见问题

在证书存储区中找不到清单签名证书

解决办法:右击项目属性—>签名—>为ClickOnce清单签名,将勾掉的选项去掉

参考链接: 解决Visual Studio编译错误:在证书存储区中找不到清单签名证书_vs在证书存储区中找不到清单签名证书-CSDN博客