版本260406
This commit is contained in:
48
OrpaonVision.SiteApp/Runtime/Contracts/CameraFrameDto.cs
Normal file
48
OrpaonVision.SiteApp/Runtime/Contracts/CameraFrameDto.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
52
OrpaonVision.SiteApp/Runtime/Contracts/HikCameraDevice.cs
Normal file
52
OrpaonVision.SiteApp/Runtime/Contracts/HikCameraDevice.cs
Normal 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; }
|
||||
}
|
||||
82
OrpaonVision.SiteApp/Runtime/Contracts/HikCameraOptions.cs
Normal file
82
OrpaonVision.SiteApp/Runtime/Contracts/HikCameraOptions.cs
Normal file
@@ -0,0 +1,82 @@
|
||||
namespace OrpaonVision.SiteApp.Runtime.Contracts;
|
||||
|
||||
/// <summary>
|
||||
/// 海康相机配置选项。
|
||||
/// </summary>
|
||||
public sealed class HikCameraOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// 运行模式(Real=真实海康SDK,Mock=模拟模式)。
|
||||
/// </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";
|
||||
}
|
||||
114
OrpaonVision.SiteApp/Runtime/Contracts/InferenceResultDto.cs
Normal file
114
OrpaonVision.SiteApp/Runtime/Contracts/InferenceResultDto.cs
Normal 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; }
|
||||
}
|
||||
}
|
||||
23
OrpaonVision.SiteApp/Runtime/Contracts/RuntimeDecisionDto.cs
Normal file
23
OrpaonVision.SiteApp/Runtime/Contracts/RuntimeDecisionDto.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
Reference in New Issue
Block a user