高性能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博客