|
|
|
|
using System;
|
|
|
|
|
|
|
|
|
|
namespace ZeroLevel.ML.DNN.Detectors
|
|
|
|
|
{
|
|
|
|
|
public static class DetectorFactory
|
|
|
|
|
{
|
|
|
|
|
public static IDetector Create(IObjectDetector model, float threshold, ImageToTensorConversionOptions imageConverterOptions)
|
|
|
|
|
{
|
|
|
|
|
return new Detector(model, threshold, imageConverterOptions);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static ObjectDetectionModels GetDetectorModel(string depectorPath)
|
|
|
|
|
{
|
|
|
|
|
var detectorType = ObjectDetectionModels.YoloV7;
|
|
|
|
|
if (depectorPath.Contains("nanodet", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
detectorType = ObjectDetectionModels.Nanodet;
|
|
|
|
|
}
|
|
|
|
|
else if (depectorPath.Contains("yolov8", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
detectorType = ObjectDetectionModels.YoloV8;
|
|
|
|
|
}
|
|
|
|
|
else if (depectorPath.Contains("yolov6", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
detectorType = ObjectDetectionModels.YoloV6;
|
|
|
|
|
}
|
|
|
|
|
else if (depectorPath.Contains("yolov5", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
detectorType = ObjectDetectionModels.YoloV5;
|
|
|
|
|
}
|
|
|
|
|
else if (depectorPath.Contains("mmyolo", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
detectorType = ObjectDetectionModels.MMYolo;
|
|
|
|
|
}
|
|
|
|
|
else if (depectorPath.Contains("damoyolo", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
detectorType = ObjectDetectionModels.DamoYolo;
|
|
|
|
|
}
|
|
|
|
|
else if (depectorPath.Contains("edgeyolo", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
detectorType = ObjectDetectionModels.EdgeYolo;
|
|
|
|
|
}
|
|
|
|
|
else if (depectorPath.Contains("fastestdet", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
detectorType = ObjectDetectionModels.FastestDet;
|
|
|
|
|
}
|
|
|
|
|
else if (depectorPath.Contains("damodet", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
detectorType = ObjectDetectionModels.DamoDet;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return detectorType;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static IDetector Create(ObjectDetectionModels modelType, float threshold, string modelPath, ImageToTensorConversionOptions imageConverterOptions, int deviceId = 0)
|
|
|
|
|
{
|
|
|
|
|
IObjectDetector model;
|
|
|
|
|
bool invertAxes = false;
|
|
|
|
|
switch (modelType)
|
|
|
|
|
{
|
|
|
|
|
case ObjectDetectionModels.YoloV5: { model = new Yolov5Detector(modelPath, deviceId); break; }
|
|
|
|
|
case ObjectDetectionModels.YoloV6: { model = new Yolov6Detector(modelPath, deviceId); break; }
|
|
|
|
|
case ObjectDetectionModels.YoloV7: { model = new Yolov7Detector(modelPath, deviceId); break; }
|
|
|
|
|
case ObjectDetectionModels.YoloV8: { model = new Yolov8Detector(modelPath, deviceId); break; }
|
|
|
|
|
case ObjectDetectionModels.MMYolo: { model = new MMYoloDetector(modelPath, deviceId); break; }
|
|
|
|
|
case ObjectDetectionModels.Nanodet: { model = new NanodetDetector(modelPath, deviceId); break; }
|
|
|
|
|
case ObjectDetectionModels.DamoYolo: { model = new DamoYoloDetector(modelPath, deviceId); break; }
|
|
|
|
|
case ObjectDetectionModels.EdgeYolo: { model = new EdgeYoloDetector(modelPath, deviceId); break; }
|
|
|
|
|
case ObjectDetectionModels.DamoDet: { model = new DamodetDetector(modelPath, deviceId); break; }
|
|
|
|
|
case ObjectDetectionModels.FastestDet: { model = new FastestDetDetector(modelPath, deviceId); invertAxes = modelPath.Contains("modified", StringComparison.OrdinalIgnoreCase) == false; break; }
|
|
|
|
|
default:
|
|
|
|
|
throw new Exception($"Model type '{modelType}' not implemented yet");
|
|
|
|
|
}
|
|
|
|
|
return new Detector(model, threshold, imageConverterOptions, invertAxes);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|