版本260406

This commit is contained in:
2026-04-06 22:04:05 +08:00
parent 7dc5e73af7
commit 0b150470be
216 changed files with 98993 additions and 33 deletions

View File

@@ -0,0 +1,48 @@
namespace OrpaonVision.SiteApp.Runtime.Contracts
{
/// <summary>
/// 相机采集帧信息。
/// </summary>
public sealed class CameraFrameDto
{
/// <summary>
/// 帧唯一标识。
/// </summary>
public Guid FrameId { get; set; }
/// <summary>
/// 采集时间UTC
/// </summary>
public DateTime CapturedAtUtc { get; set; }
/// <summary>
/// 相机标识。
/// </summary>
public string CameraId { get; set; } = string.Empty;
/// <summary>
/// 图像时间戳。
/// </summary>
public DateTime Timestamp { get; set; }
/// <summary>
/// 图像数据。
/// </summary>
public byte[] ImageData { get; set; } = Array.Empty<byte>();
/// <summary>
/// 图像宽度。
/// </summary>
public int Width { get; set; }
/// <summary>
/// 图像高度。
/// </summary>
public int Height { get; set; }
/// <summary>
/// 像素格式。
/// </summary>
public string PixelFormat { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,52 @@
namespace OrpaonVision.SiteApp.Runtime.Contracts;
/// <summary>
/// 海康相机设备信息。
/// </summary>
public sealed class HikCameraDevice
{
/// <summary>
/// 设备序列号。
/// </summary>
public string SerialNumber { get; set; } = string.Empty;
/// <summary>
/// 设备名称。
/// </summary>
public string DeviceName { get; set; } = string.Empty;
/// <summary>
/// IP地址。
/// </summary>
public string IpAddress { get; set; } = string.Empty;
/// <summary>
/// 子网掩码。
/// </summary>
public string SubnetMask { get; set; } = string.Empty;
/// <summary>
/// 默认网关。
/// </summary>
public string DefaultGateway { get; set; } = string.Empty;
/// <summary>
/// MAC地址。
/// </summary>
public string MacAddress { get; set; } = string.Empty;
/// <summary>
/// 固件版本。
/// </summary>
public string FirmwareVersion { get; set; } = string.Empty;
/// <summary>
/// 是否已连接。
/// </summary>
public bool IsConnected { get; set; }
/// <summary>
/// 连接时间。
/// </summary>
public DateTime? ConnectedAt { get; set; }
}

View File

@@ -0,0 +1,82 @@
namespace OrpaonVision.SiteApp.Runtime.Contracts;
/// <summary>
/// 海康相机配置选项。
/// </summary>
public sealed class HikCameraOptions
{
/// <summary>
/// 运行模式Real=真实海康SDKMock=模拟模式)。
/// </summary>
public string RunMode { get; set; } = "Mock"; // Real | Mock
/// <summary>
/// 设备序列号(用于指定特定相机)。
/// </summary>
public string? SerialNumber { get; set; }
/// <summary>
/// IP地址用于网络相机
/// </summary>
public string? IpAddress { get; set; }
/// <summary>
/// 用户名。
/// </summary>
public string? UserName { get; set; }
/// <summary>
/// 密码。
/// </summary>
public string? Password { get; set; }
/// <summary>
/// 连接超时时间(毫秒)。
/// </summary>
public int ConnectTimeoutMs { get; set; } = 5000;
/// <summary>
/// 采集超时时间(毫秒)。
/// </summary>
public int GrabTimeoutMs { get; set; } = 3000;
/// <summary>
/// 图像宽度。
/// </summary>
public int ImageWidth { get; set; } = 1920;
/// <summary>
/// 图像高度。
/// </summary>
public int ImageHeight { get; set; } = 1080;
/// <summary>
/// 像素格式。
/// </summary>
public string PixelFormat { get; set; } = "BGR8Packed";
/// <summary>
/// 触发模式0=连续1=软触发)。
/// </summary>
public int TriggerMode { get; set; } = 0;
/// <summary>
/// 自动重连次数。
/// </summary>
public int AutoReconnectCount { get; set; } = 3;
/// <summary>
/// 自动重连间隔(毫秒)。
/// </summary>
public int AutoReconnectIntervalMs { get; set; } = 1000;
/// <summary>
/// 海康SDK库文件路径仅在Real模式下使用
/// </summary>
public string? SdkLibraryPath { get; set; } = "C:\\Program Files (x86)\\MVS\\Development\\Libraries\\win64";
/// <summary>
/// 海康SDK驱动路径仅在Real模式下使用
/// </summary>
public string? SdkDriverPath { get; set; } = "C:\\Program Files (x86)\\MVS\\Development\\Drivers\\win64";
}

View File

@@ -0,0 +1,114 @@
namespace OrpaonVision.SiteApp.Runtime.Contracts
{
/// <summary>
/// 推理结果对象。
/// </summary>
public sealed class InferenceResultDto
{
/// <summary>
/// 关联的帧标识。
/// </summary>
public Guid FrameId { get; set; }
/// <summary>
/// 推理标识。
/// </summary>
public Guid InferenceId { get; set; }
/// <summary>
/// 推理时间UTC
/// </summary>
public DateTime InferredAtUtc { get; set; }
/// <summary>
/// 模型名称。
/// </summary>
public string ModelName { get; set; } = string.Empty;
/// <summary>
/// 模型版本。
/// </summary>
public string ModelVersion { get; set; } = string.Empty;
/// <summary>
/// 推理耗时(毫秒)。
/// </summary>
public double InferenceTimeMs { get; set; }
/// <summary>
/// 检测结果列表。
/// </summary>
public IReadOnlyList<DetectionDto> Detections { get; set; } = [];
/// <summary>
/// 是否为NG不良品
/// </summary>
public bool IsNg { get; set; }
/// <summary>
/// 预测标签(兼容性属性)。
/// </summary>
public string Label { get; set; } = string.Empty;
/// <summary>
/// 置信度(兼容性属性)。
/// </summary>
public decimal Confidence { get; set; }
}
/// <summary>
/// 检测结果对象。
/// </summary>
public sealed class DetectionDto
{
/// <summary>
/// 类别ID。
/// </summary>
public int ClassId { get; set; }
/// <summary>
/// 类别名称。
/// </summary>
public string ClassName { get; set; } = string.Empty;
/// <summary>
/// 置信度。
/// </summary>
public float Confidence { get; set; }
/// <summary>
/// 边界框X坐标。
/// </summary>
public float X { get; set; }
/// <summary>
/// 边界框Y坐标。
/// </summary>
public float Y { get; set; }
/// <summary>
/// 边界框宽度。
/// </summary>
public float Width { get; set; }
/// <summary>
/// 边界框高度。
/// </summary>
public float Height { get; set; }
/// <summary>
/// 边界框中心X坐标。
/// </summary>
public float CenterX { get; set; }
/// <summary>
/// 边界框中心Y坐标。
/// </summary>
public float CenterY { get; set; }
/// <summary>
/// 边界框面积。
/// </summary>
public float Area { get; set; }
}
}

View File

@@ -0,0 +1,23 @@
namespace OrpaonVision.SiteApp.Runtime.Contracts
{
/// <summary>
/// 规则判定结果。
/// </summary>
public sealed class RuntimeDecisionDto
{
/// <summary>
/// 是否通过。
/// </summary>
public bool IsPass { get; init; }
/// <summary>
/// 判定编码。
/// </summary>
public string Code { get; init; } = string.Empty;
/// <summary>
/// 判定说明。
/// </summary>
public string Message { get; init; } = string.Empty;
}
}

View File

@@ -0,0 +1,23 @@
namespace OrpaonVision.SiteApp.Runtime.Contracts
{
/// <summary>
/// 运行状态机快照。
/// </summary>
public sealed class RuntimeStateSnapshotDto
{
/// <summary>
/// 当前层号(从 1 开始)。
/// </summary>
public int CurrentLayer { get; init; }
/// <summary>
/// 总层数。
/// </summary>
public int TotalLayers { get; init; }
/// <summary>
/// 状态文本。
/// </summary>
public string StateText { get; init; } = string.Empty;
}
}

View File

@@ -0,0 +1,57 @@
namespace OrpaonVision.SiteApp.Runtime.Contracts;
/// <summary>
/// YOLO检测结果。
/// </summary>
public sealed class YoloDetectionResult
{
/// <summary>
/// 类别ID。
/// </summary>
public int ClassId { get; set; }
/// <summary>
/// 类别名称。
/// </summary>
public string ClassName { get; set; } = string.Empty;
/// <summary>
/// 置信度。
/// </summary>
public float Confidence { get; set; }
/// <summary>
/// 边界框X坐标。
/// </summary>
public float X { get; set; }
/// <summary>
/// 边界框Y坐标。
/// </summary>
public float Y { get; set; }
/// <summary>
/// 边界框宽度。
/// </summary>
public float Width { get; set; }
/// <summary>
/// 边界框高度。
/// </summary>
public float Height { get; set; }
/// <summary>
/// 边界框中心X坐标。
/// </summary>
public float CenterX => X + Width / 2;
/// <summary>
/// 边界框中心Y坐标。
/// </summary>
public float CenterY => Y + Height / 2;
/// <summary>
/// 边界框面积。
/// </summary>
public float Area => Width * Height;
}

View File

@@ -0,0 +1,87 @@
namespace OrpaonVision.SiteApp.Runtime.Contracts;
/// <summary>
/// YOLO推理配置选项。
/// </summary>
public sealed class YoloInferenceOptions
{
/// <summary>
/// 运行模式Real=真实YOLO推理Mock=模拟模式)。
/// </summary>
public string RunMode { get; set; } = "Mock"; // Real | Mock
/// <summary>
/// 模型文件路径。
/// </summary>
public string ModelPath { get; set; } = string.Empty;
/// <summary>
/// 标签文件路径。
/// </summary>
public string LabelsPath { get; set; } = string.Empty;
/// <summary>
/// 置信度阈值。
/// </summary>
public float ConfidenceThreshold { get; set; } = 0.5f;
/// <summary>
/// NMS阈值。
/// </summary>
public float NmsThreshold { get; set; } = 0.45f;
/// <summary>
/// 输入图像宽度。
/// </summary>
public int InputWidth { get; set; } = 640;
/// <summary>
/// 输入图像高度。
/// </summary>
public int InputHeight { get; set; } = 640;
/// <summary>
/// 是否使用GPU。
/// </summary>
public bool UseGpu { get; set; } = false;
/// <summary>
/// GPU设备ID。
/// </summary>
public int GpuDeviceId { get; set; } = 0;
/// <summary>
/// 批处理大小。
/// </summary>
public int BatchSize { get; set; } = 1;
/// <summary>
/// 模型类型ONNX、TorchScript等
/// </summary>
public string ModelType { get; set; } = "ONNX";
/// <summary>
/// 是否启用自动预热。
/// </summary>
public bool EnableWarmup { get; set; } = true;
/// <summary>
/// 预热次数。
/// </summary>
public int WarmupCount { get; set; } = 3;
/// <summary>
/// YOLO推理引擎类型YoloDotNet、OpenCV、TensorRT等
/// </summary>
public string InferenceEngine { get; set; } = "YoloDotNet";
/// <summary>
/// ONNX Runtime执行提供程序CPU、CUDA等
/// </summary>
public string OnnxRuntimeProvider { get; set; } = "CPU";
/// <summary>
/// 模型版本信息。
/// </summary>
public string ModelVersion { get; set; } = "v1.0";
}