mirror of
https://github.com/azaion/annotations.git
synced 2026-04-22 21:56:31 +00:00
268 lines
10 KiB
C#
268 lines
10 KiB
C#
using System.Diagnostics;
|
|
using System.IO;
|
|
using Azaion.Common.DTO;
|
|
using Azaion.Common.DTO.Config;
|
|
using Azaion.Common.Extensions;
|
|
using Newtonsoft.Json;
|
|
using Serilog;
|
|
using System.Windows;
|
|
|
|
namespace Azaion.Common;
|
|
|
|
public static class Constants
|
|
{
|
|
public const string CONFIG_PATH = "config.json";
|
|
public const string LOADER_CONFIG_PATH = "loaderconfig.json";
|
|
public const string DEFAULT_API_URL = "https://api.azaion.com";
|
|
public const string AZAION_SUITE_EXE = "Azaion.Suite.exe";
|
|
|
|
public const int AI_TILE_SIZE = 1280;
|
|
|
|
#region ExternalClientsConfig
|
|
|
|
private const string DEFAULT_ZMQ_LOADER_HOST = "127.0.0.1";
|
|
private const int DEFAULT_ZMQ_LOADER_PORT = 5025;
|
|
|
|
public const string EXTERNAL_LOADER_PATH = "azaion-loader.exe";
|
|
public const string EXTERNAL_INFERENCE_PATH = "azaion-inference.exe";
|
|
public const string EXTERNAL_GPS_DENIED_FOLDER = "gps-denied";
|
|
public static readonly string ExternalGpsDeniedPath = Path.Combine(EXTERNAL_GPS_DENIED_FOLDER, "image-matcher.exe");
|
|
|
|
public const string DEFAULT_ZMQ_INFERENCE_HOST = "127.0.0.1";
|
|
private const int DEFAULT_ZMQ_INFERENCE_PORT = 5227;
|
|
|
|
private const string DEFAULT_ZMQ_GPS_DENIED_HOST = "127.0.0.1";
|
|
private const int DEFAULT_ZMQ_GPS_DENIED_PORT = 5255;
|
|
private const int DEFAULT_ZMQ_GPS_DENIED_PUBLISH_PORT = 5256;
|
|
|
|
#endregion ExternalClientsConfig
|
|
|
|
# region Cache keys
|
|
|
|
public const string CURRENT_USER_CACHE_KEY = "CurrentUser";
|
|
public const string HARDWARE_INFO_KEY = "HardwareInfo";
|
|
|
|
# endregion
|
|
|
|
public const string JPG_EXT = ".jpg";
|
|
public const string TXT_EXT = ".txt";
|
|
#region DirectoriesConfig
|
|
|
|
private const string DEFAULT_VIDEO_DIR = "video";
|
|
private const string DEFAULT_LABELS_DIR = "labels";
|
|
private const string DEFAULT_IMAGES_DIR = "images";
|
|
private const string DEFAULT_RESULTS_DIR = "results";
|
|
private const string DEFAULT_THUMBNAILS_DIR = "thumbnails";
|
|
private const string DEFAULT_GPS_SAT_DIRECTORY = "satellitesDir";
|
|
private const string DEFAULT_GPS_ROUTE_DIRECTORY = "routeDir";
|
|
|
|
#endregion
|
|
|
|
#region AnnotatorConfig
|
|
|
|
private static readonly List<DetectionClass> DefaultAnnotationClasses =
|
|
[
|
|
new() { Id = 0, Name = "ArmorVehicle", ShortName = "Броня", Color = "#FF0000".ToColor() },
|
|
new() { Id = 1, Name = "Truck", ShortName = "Вантаж.", Color = "#00FF00".ToColor() },
|
|
new() { Id = 2, Name = "Vehicle", ShortName = "Машина", Color = "#0000FF".ToColor() },
|
|
new() { Id = 3, Name = "Artillery", ShortName = "Арта", Color = "#FFFF00".ToColor() },
|
|
new() { Id = 4, Name = "Shadow", ShortName = "Тінь", Color = "#FF00FF".ToColor() },
|
|
new() { Id = 5, Name = "Trenches", ShortName = "Окопи", Color = "#00FFFF".ToColor() },
|
|
new() { Id = 6, Name = "MilitaryMan", ShortName = "Військов", Color = "#188021".ToColor() },
|
|
new() { Id = 7, Name = "TyreTracks", ShortName = "Накати", Color = "#800000".ToColor() },
|
|
new() { Id = 8, Name = "AdditionArmoredTank",ShortName = "Танк.захист", Color = "#008000".ToColor() },
|
|
new() { Id = 9, Name = "Smoke", ShortName = "Дим", Color = "#000080".ToColor() },
|
|
new() { Id = 10, Name = "Plane", ShortName = "Літак", Color = "#000080".ToColor() },
|
|
new() { Id = 11, Name = "Moto", ShortName = "Мото", Color = "#808000".ToColor() },
|
|
new() { Id = 12, Name = "CamouflageNet", ShortName = "Сітка", Color = "#800080".ToColor() },
|
|
new() { Id = 13, Name = "CamouflageBranches", ShortName = "Гілки", Color = "#2f4f4f".ToColor() },
|
|
new() { Id = 14, Name = "Roof", ShortName = "Дах", Color = "#1e90ff".ToColor() },
|
|
new() { Id = 15, Name = "Building", ShortName = "Будівля", Color = "#ffb6c1".ToColor() },
|
|
new() { Id = 16, Name = "Caponier", ShortName = "Капонір", Color = "#ffb6c1".ToColor() },
|
|
];
|
|
|
|
private static readonly List<string> DefaultVideoFormats = ["mp4", "mov", "avi"];
|
|
private static readonly List<string> DefaultImageFormats = ["jpg", "jpeg", "png", "bmp"];
|
|
|
|
private static readonly AnnotationConfig DefaultAnnotationConfig = new()
|
|
{
|
|
DetectionClasses = DefaultAnnotationClasses,
|
|
VideoFormats = DefaultVideoFormats,
|
|
ImageFormats = DefaultImageFormats,
|
|
AnnotationsDbFile = DEFAULT_ANNOTATIONS_DB_FILE
|
|
};
|
|
|
|
private const int DEFAULT_LEFT_PANEL_WIDTH = 250;
|
|
private const int DEFAULT_RIGHT_PANEL_WIDTH = 250;
|
|
|
|
private const string DEFAULT_ANNOTATIONS_DB_FILE = "annotations.db";
|
|
|
|
# endregion AnnotatorConfig
|
|
|
|
# region AIRecognitionConfig
|
|
|
|
private static readonly AIRecognitionConfig DefaultAIRecognitionConfig = new()
|
|
{
|
|
FrameRecognitionSeconds = DEFAULT_FRAME_RECOGNITION_SECONDS,
|
|
TrackingDistanceConfidence = TRACKING_DISTANCE_CONFIDENCE,
|
|
TrackingProbabilityIncrease = TRACKING_PROBABILITY_INCREASE,
|
|
TrackingIntersectionThreshold = TRACKING_INTERSECTION_THRESHOLD,
|
|
BigImageTileOverlapPercent = DEFAULT_BIG_IMAGE_TILE_OVERLAP_PERCENT,
|
|
FramePeriodRecognition = DEFAULT_FRAME_PERIOD_RECOGNITION
|
|
};
|
|
|
|
private const double DEFAULT_FRAME_RECOGNITION_SECONDS = 2;
|
|
private const double TRACKING_DISTANCE_CONFIDENCE = 0.15;
|
|
private const double TRACKING_PROBABILITY_INCREASE = 15;
|
|
private const double TRACKING_INTERSECTION_THRESHOLD = 0.8;
|
|
private const int DEFAULT_BIG_IMAGE_TILE_OVERLAP_PERCENT = 20;
|
|
private const int DEFAULT_FRAME_PERIOD_RECOGNITION = 4;
|
|
|
|
# endregion AIRecognitionConfig
|
|
|
|
# region GpsDeniedConfig
|
|
|
|
private static readonly GpsDeniedConfig DefaultGpsDeniedConfig = new()
|
|
{
|
|
MinKeyPoints = 11
|
|
};
|
|
|
|
# endregion
|
|
|
|
#region Thumbnails
|
|
|
|
private static readonly Size DefaultThumbnailSize = new(240, 135);
|
|
|
|
private static readonly ThumbnailConfig DefaultThumbnailConfig = new()
|
|
{
|
|
Size = DefaultThumbnailSize,
|
|
Border = DEFAULT_THUMBNAIL_BORDER
|
|
};
|
|
|
|
private const int DEFAULT_THUMBNAIL_BORDER = 10;
|
|
|
|
public const string THUMBNAIL_PREFIX = "_thumb";
|
|
public const string RESULT_PREFIX = "_result";
|
|
|
|
#endregion
|
|
|
|
public const string MQ_ANNOTATIONS_QUEUE = "azaion-annotations";
|
|
|
|
#region Database
|
|
|
|
public const string ANNOTATIONS_TABLENAME = "annotations";
|
|
public const string ANNOTATIONS_QUEUE_TABLENAME = "annotations_queue";
|
|
public const string ADMIN_EMAIL = "admin@azaion.com";
|
|
public const string DETECTIONS_TABLENAME = "detections";
|
|
|
|
#endregion
|
|
|
|
#region Mode Captions
|
|
|
|
public const string REGULAR_MODE_CAPTION = "Норма";
|
|
public const string WINTER_MODE_CAPTION = "Зима";
|
|
public const string NIGHT_MODE_CAPTION = "Ніч";
|
|
|
|
#endregion
|
|
|
|
public const string SPLIT_SUFFIX = "!split!";
|
|
|
|
|
|
private static readonly InitConfig DefaultInitConfig = new()
|
|
{
|
|
LoaderClientConfig = new LoaderClientConfig
|
|
{
|
|
ZeroMqHost = DEFAULT_ZMQ_LOADER_HOST,
|
|
ZeroMqPort = DEFAULT_ZMQ_LOADER_PORT,
|
|
ApiUrl = DEFAULT_API_URL
|
|
},
|
|
InferenceClientConfig = new InferenceClientConfig
|
|
{
|
|
ZeroMqHost = DEFAULT_ZMQ_INFERENCE_HOST,
|
|
ZeroMqPort = DEFAULT_ZMQ_INFERENCE_PORT,
|
|
ApiUrl = DEFAULT_API_URL
|
|
},
|
|
GpsDeniedClientConfig = new GpsDeniedClientConfig
|
|
{
|
|
ZeroMqHost = DEFAULT_ZMQ_GPS_DENIED_HOST,
|
|
ZeroMqPort = DEFAULT_ZMQ_GPS_DENIED_PORT,
|
|
ZeroMqReceiverPort = DEFAULT_ZMQ_GPS_DENIED_PUBLISH_PORT
|
|
},
|
|
DirectoriesConfig = new DirectoriesConfig
|
|
{
|
|
ApiResourcesDirectory = ""
|
|
}
|
|
};
|
|
|
|
public static readonly AppConfig FailsafeAppConfig = new()
|
|
{
|
|
AnnotationConfig = DefaultAnnotationConfig,
|
|
|
|
UIConfig = new UIConfig
|
|
{
|
|
LeftPanelWidth = DEFAULT_LEFT_PANEL_WIDTH,
|
|
RightPanelWidth = DEFAULT_RIGHT_PANEL_WIDTH,
|
|
GenerateAnnotatedImage = false
|
|
},
|
|
|
|
DirectoriesConfig = new DirectoriesConfig
|
|
{
|
|
VideosDirectory = DEFAULT_VIDEO_DIR,
|
|
ImagesDirectory = DEFAULT_IMAGES_DIR,
|
|
LabelsDirectory = DEFAULT_LABELS_DIR,
|
|
ResultsDirectory = DEFAULT_RESULTS_DIR,
|
|
ThumbnailsDirectory = DEFAULT_THUMBNAILS_DIR,
|
|
GpsSatDirectory = DEFAULT_GPS_SAT_DIRECTORY,
|
|
GpsRouteDirectory = DEFAULT_GPS_ROUTE_DIRECTORY
|
|
},
|
|
|
|
ThumbnailConfig = DefaultThumbnailConfig,
|
|
AIRecognitionConfig = DefaultAIRecognitionConfig,
|
|
GpsDeniedConfig = DefaultGpsDeniedConfig,
|
|
|
|
LoaderClientConfig = new LoaderClientConfig
|
|
{
|
|
ZeroMqHost = DEFAULT_ZMQ_LOADER_HOST,
|
|
ZeroMqPort = DEFAULT_ZMQ_LOADER_PORT,
|
|
ApiUrl = DEFAULT_API_URL
|
|
},
|
|
InferenceClientConfig = new InferenceClientConfig
|
|
{
|
|
ZeroMqHost = DEFAULT_ZMQ_INFERENCE_HOST,
|
|
ZeroMqPort = DEFAULT_ZMQ_INFERENCE_PORT,
|
|
ApiUrl = DEFAULT_API_URL
|
|
},
|
|
GpsDeniedClientConfig = new GpsDeniedClientConfig
|
|
{
|
|
ZeroMqHost = DEFAULT_ZMQ_GPS_DENIED_HOST,
|
|
ZeroMqPort = DEFAULT_ZMQ_GPS_DENIED_PORT,
|
|
ZeroMqReceiverPort = DEFAULT_ZMQ_GPS_DENIED_PUBLISH_PORT
|
|
}
|
|
};
|
|
|
|
public static InitConfig ReadInitConfig(ILogger logger)
|
|
{
|
|
try
|
|
{
|
|
if (!File.Exists(CONFIG_PATH))
|
|
throw new FileNotFoundException(CONFIG_PATH);
|
|
var configStr = File.ReadAllText(CONFIG_PATH);
|
|
var config = JsonConvert.DeserializeObject<InitConfig>(configStr);
|
|
|
|
return config ?? DefaultInitConfig;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
logger.Error(e, e.Message);
|
|
return DefaultInitConfig;
|
|
}
|
|
}
|
|
|
|
public static Version GetLocalVersion()
|
|
{
|
|
var localFileInfo = FileVersionInfo.GetVersionInfo(AZAION_SUITE_EXE);
|
|
if (string.IsNullOrWhiteSpace(localFileInfo.ProductVersion))
|
|
throw new Exception($"Can't find {AZAION_SUITE_EXE} and its version");
|
|
return new Version(localFileInfo.FileVersion!);
|
|
}
|
|
} |