public static string Compose(YoloConfig yoloConfig) { var sb = new StringBuilder(); var cachedCulture = CultureInfo.CurrentCulture; CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; foreach (var element in yoloConfig.YoloConfigElements) { var type = element.GetType(); if (sb.Length > 0) { sb.AppendLine(); } sb.AppendLine($"[{PascalCaseToSnakeCase(type.Name)}]"); var properties = type.GetProperties(); foreach (var property in properties) { var propertyType = property.PropertyType; var value = property.GetValue(element); var composedProperty = ComposeProperty(propertyType, value); sb.AppendLine($"{PascalCaseToSnakeCase(property.Name)}={PascalCaseToSnakeCase(composedProperty)}"); } } CultureInfo.CurrentCulture = cachedCulture; return(sb.ToString()); }
public static YoloConfig Parse(string filePath) { var lines = File.ReadAllLines(filePath); var yoloConfig = new YoloConfig(); foreach (var line in lines) { if (line.Length == 0) { continue; } var firstLetter = line[0]; switch (firstLetter) { case '[': var lineWithoutBrackets = line.Replace("[", "").Replace("]", ""); var className = SnakeCaseToPascalCase(lineWithoutBrackets); var type = Type.GetType($"Alturos.ImageAnnotation.Model.YoloConfig.{className}"); var item = Activator.CreateInstance(type) as YoloConfigElement; yoloConfig.YoloConfigElements.Add(item); break; case '#': break; default: var splitString = line.Replace(" = ", "=").Split('='); var propertyName = SnakeCaseToPascalCase(splitString[0]); var value = splitString[1]; var obj = yoloConfig.YoloConfigElements.Last(); var property = obj.GetType().GetProperty(propertyName); var parsedProperty = ParseProperty(property.PropertyType, value); property.SetValue(obj, parsedProperty); break; } } return(yoloConfig); }
public Config(string root) { YOLO = new YoloConfig(root); TRAIN = new TrainConfig(root); }