C# Inference Client 示例项目

本章会详细介绍DaoAI World SDK中包含的C# Inference Client 代码示例。

引入库

在C#示例中,我们使用了以下几个库

using System;
using System.IO;
using DaoAI.InferenceClient;

读取图片

C# Inference Client 的模型预测函数需要将图片表示为64位编码图片(base64_encoded_image) 您可以使用Convert.ToBase64String() 方法来转换。

首先定义文件路径 文件的格式是转换成64位图片后的txt文件,然后读取。

string fileName = "C:/Users/daoai/Documents/DWSDK_Demo/data/image.bmp";

string base64Image = Convert.ToBase64String(File.ReadAllBytes(fileName));

加载深度学习模型

DaoAI World 输出的深度学习模型通常是 dwm 格式。我们需要创建一个 DaoAI.InferenceClient.KeypointDetection 对象,然后使用constructor 方法来读取 DaoAI World 输出的深度学习模型 dwm 文件。

// model path in server file system
string filemodel = "../../../../../../data/KeypointDetection.dwm";

DaoAI.InferenceClient.KeypointDetection model = new DaoAI.InferenceClient.KeypointDetection(filePath_model, DaoAI.InferenceClient.DeviceType.GPU);

注意,这里每一个检测任务都有对应的对象:

//实例分割
DaoAI.InferenceClient.InstanceSegmentation model(model_path);

//关键点检测
DaoAI.InferenceClient.KeypointDetection model(model_path);

//图像分类
DaoAI.InferenceClient.Classification model(model_path);

//目标检测
DaoAI.InferenceClient.ObjectDetection model(model_path);

//非监督缺陷检测
DaoAI.InferenceClient.UnsupervisedDefectSegmentation model(model_path);

//监督缺陷检测
DaoAI.InferenceClient.SupervisedDefectSegmentation model(model_path);

//OCR
DaoAI.InferenceClient.OCR model(model_path);

//定位模型 (只在工业版支持)
DaoAI.InferenceClient.Positioning model(model_path);

//漏错装检测 (只在工业版支持)
DaoAI.InferenceClient.PresenceChecking model(model_path);

如果尝试加载非对应的模型对象,那么会报错,报错信息中会提示您应该用的模型类型。

使用深度学习模型进行预测

// get inference
DaoAI.InferenceClient.KeypointDetection prediction = model.inference(base64Image);

注意,这里每一个检测任务返回的结果都有对应的对象:

//实例分割
DaoAI.InferenceClient.InstanceSegmentationResult prediction = model.inference(base64Image);

//关键点检测
DaoAI.InferenceClient.KeypointDetectionResult prediction = model.inference(base64Image);

//图像分类
DaoAI.InferenceClient.ClassificationResult prediction = model.inference(base64Image);

//目标检测
DaoAI.InferenceClient.ObjectDetectionResult prediction = model.inference(base64Image);

//异常检测
DaoAI.InferenceClient.AnomalyDetectionResult prediction = model.inference(base64Image);

//语义分割
DaoAI.InferenceClient.SemanticSegmentationResult prediction = model.inference(base64Image);

//OCR
DaoAI.InferenceClient.OCRResult prediction = model.inference(base64Image);

//定位模型 (只在工业版支持)
DaoAI.InferenceClient.PositioningResult prediction = model.inference(base64Image);

//漏错装检测 (只在工业版支持)
DaoAI.InferenceClient.PresenceCheckingResult prediction = model.inference(base64Image);

返回结果示例

以下是关键点检测模型预测后返回的结果.

这个结果展示了,标签名称,置信度,以及预测框,关键点和多边形掩膜。

for (int i = 0; i < result.NumDetections; i++)
{
    Console.WriteLine($"Object {i + 1}");
    Console.WriteLine($"Class: {result.ClassLabels[i]}");
    Console.WriteLine($"Bounding box: {result.Boxes[i].X1} {result.Boxes[i].Y1} {result.Boxes[i].X2} {result.Boxes[i].Y2}");
    Console.WriteLine($"Confidence: {result.Confidences[i]}");
    Console.WriteLine("Keypoints:");

    foreach (var keypoint in result.Keypoints[i])
    {
        Console.WriteLine($"{keypoint.X} {keypoint.Y} {keypoint.Confidence}");
    }
    Console.WriteLine();
}