Basic inference example.
Basic inference example.
This example demonstrates the basic usage of the Mech-DLK SDK C# wrapper for performing inference with a pre-trained deep learning model. It shows how to:
The example takes no command-line arguments. It loads every supported image file from ..\resources\DefectSegmentation\ (relative to the .exe).
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace Mmind.Dl.Examples
{
public class BasicInfer
{
public static int Run()
{
Console.WriteLine("=== MechMind DL SDK Basic Inference Example ===");
try
{
var imagePaths = GetImagePaths();
if (imagePaths.Count == 0)
{
Console.WriteLine("No images found in DefectSegmentation directory");
return 1;
}
Console.WriteLine($"Found {imagePaths.Count} image(s)");
var images = new List<MMindImage>();
foreach (var imagePath in imagePaths)
{
if (!File.Exists(imagePath))
{
Console.WriteLine($"Image file not found: {imagePath}");
continue;
}
var image = new MMindImage();
var status = image.CreateFromPath(imagePath);
{
Console.WriteLine($"Failed to load image: {Path.GetFileName(imagePath)}");
continue;
}
images.Add(image);
Console.WriteLine($"Loaded: {Path.GetFileName(imagePath)}");
}
if (images.Count == 0)
{
Console.WriteLine("No images loaded successfully");
return 1;
}
Console.WriteLine($"{images.Count} images loaded successfully");
using (var engine = new MMindInferEngine())
{
var modelPath = GetPackPath();
Console.WriteLine($"Model path: {Path.GetFileName(modelPath)}");
engine.Create(modelPath);
var loadStatus = engine.Load();
{
Console.WriteLine($"Failed to load model: {loadStatus}");
return 1;
}
Console.WriteLine("Model loaded successfully");
var moduleNames = engine.ModuleNames();
Console.WriteLine("Available module names:");
foreach (var name in moduleNames)
{
Console.WriteLine($" {name}");
}
var inferStatus = engine.Infer(images);
{
Console.WriteLine($"Inference failed: {inferStatus}");
return 1;
}
Console.WriteLine("Inference completed successfully");
List<MMindResult> results;
var getResultStatus = engine.GetModuleResult("DefectSegmentation_0", out results);
{
Console.WriteLine($"Failed to get module results: {getResultStatus}");
return 1;
}
Console.WriteLine($"Got results for {results.Count} images");
for (int i = 0; i < results.Count; i++)
{
var result = results[i];
Console.WriteLine($"\nResult {i}: {result.contours.Count} contours, {result.bboxes.Count} bboxes");
if (result.contours.Count > 0)
{
Console.WriteLine(" Contour details:");
for (int j = 0; j < result.contours.Count; j++)
{
var contour = result.contours[j];
var blobValue = MMindInferEngine.BlobValueFromContour(contour);
Console.WriteLine($" Contour {j}:");
Console.WriteLine($" Label: {contour.extraInfo.labelName} (index: {contour.extraInfo.labelIndex})");
Console.WriteLine($" Confidence: {contour.extraInfo.confidence:F4}");
Console.WriteLine($" Area: {blobValue.area:F2}");
Console.WriteLine($" Center: ({blobValue.centerX:F2}, {blobValue.centerY:F2})");
Console.WriteLine($" Size: {blobValue.width:F2} x {blobValue.height:F2}");
Console.WriteLine($" Circularity: {blobValue.circularity:F4}");
Console.WriteLine($" Angle: {blobValue.angle:F2}°");
}
}
}
var visStatus = engine.ResultVisualization(images);
{
Console.WriteLine($"Visualization failed: {visStatus}");
return 1;
}
Console.WriteLine("Result visualization completed");
for (int i = 0; i < images.Count; i++)
{
var savePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"result_{i}.jpg");
var saveStatus = images[i].Save(savePath);
{
Console.WriteLine($"Result image saved to: {savePath}");
}
else
{
Console.WriteLine($"Failed to save result image {i}: {saveStatus}");
}
}
}
Console.WriteLine("Basic inference example completed successfully!");
return 0;
}
catch (Exception ex)
{
Console.WriteLine($"Error in basic inference example: {ex.Message}");
Console.WriteLine($"Stack trace: {ex.StackTrace}");
return 1;
}
}
private static List<string> GetImagePaths()
{
var resourcesPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..", "resources");
var imageDir = Path.Combine(resourcesPath, "DefectSegmentation");
var imagePaths = new List<string>();
var imageExtensions = new[] { ".jpg", ".jpeg", ".png", ".bmp", ".tiff", ".tif" };
if (Directory.Exists(imageDir))
{
var files = Directory.GetFiles(imageDir);
foreach (var file in files)
{
var ext = Path.GetExtension(file).ToLower();
if (imageExtensions.Contains(ext))
{
imagePaths.Add(file);
}
}
imagePaths.Sort();
}
return imagePaths;
}
private static string GetPackPath()
{
var resourcesPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..", "resources");
var packPath = Path.Combine(resourcesPath, "DefectSegmentation", "defect_segmentation_model.dlkpack");
return packPath;
}
}
}
StatusCode
Status codes for MechMind DL SDK operations.