SaveRandomForOutputResolutions
This commit is contained in:
@ -70,6 +70,7 @@ public class Configuration
|
||||
[Display(Name = "Save Mapped"), Required] public string[] SaveMappedForOutputResolutions { get; set; }
|
||||
[Display(Name = "Save Not Mapped"), Required] public string[] SaveNotMappedForOutputResolutions { get; set; }
|
||||
[Display(Name = "Save Resized Images by Person Key Formatted"), Required] public string[] SaveFilteredOriginalImagesFromJLinksForOutputResolutions { get; set; }
|
||||
[Display(Name = "Save Random For Output Resolutions"), Required] public string[] SaveRandomForOutputResolutions { get; set; }
|
||||
[Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; }
|
||||
[Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; }
|
||||
[Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; }
|
||||
@ -191,6 +192,7 @@ public class Configuration
|
||||
configuration.SaveMappedForOutputResolutions ??= Array.Empty<string>();
|
||||
configuration.SaveNotMappedForOutputResolutions ??= Array.Empty<string>();
|
||||
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions ??= Array.Empty<string>();
|
||||
configuration.SaveRandomForOutputResolutions ??= Array.Empty<string>();
|
||||
if (configuration.SaveResizedSubfiles is null)
|
||||
throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
|
||||
configuration.SaveShortcutsForOutputResolutions ??= Array.Empty<string>();
|
||||
@ -217,8 +219,8 @@ public class Configuration
|
||||
configuration.DistancePixelDistanceTolerance.Value,
|
||||
configuration.DistanceRenameToMatch.Value,
|
||||
configuration.FaceAreaPermille.Value,
|
||||
configuration.FaceDistanceHiddenImageFactor.Value,
|
||||
configuration.FaceConfidencePercent.Value,
|
||||
configuration.FaceDistanceHiddenImageFactor.Value,
|
||||
configuration.FaceDistancePermyriad.Value,
|
||||
configuration.ForceFaceLastWriteTimeToCreationTime.Value,
|
||||
configuration.ForceMetadataLastWriteTimeToCreationTime.Value,
|
||||
@ -256,16 +258,17 @@ public class Configuration
|
||||
configuration.PropertiesChangedForMetadata.Value,
|
||||
configuration.PropertiesChangedForResize.Value,
|
||||
configuration.RangeDaysDeltaTolerance,
|
||||
configuration.RangeDistanceTolerance,
|
||||
configuration.RangeFaceAreaPermilleTolerance,
|
||||
configuration.RangeFaceConfidence,
|
||||
configuration.RangeDistanceTolerance,
|
||||
configuration.Reverse.Value,
|
||||
configuration.SaveFaceDistancesForOutputResolutions,
|
||||
configuration.SaveFaceLandmarkForOutputResolutions,
|
||||
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions,
|
||||
configuration.SaveFullYearOfRandomFiles.Value,
|
||||
configuration.SaveMappedForOutputResolutions,
|
||||
configuration.SaveNotMappedForOutputResolutions,
|
||||
configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions,
|
||||
configuration.SaveRandomForOutputResolutions,
|
||||
configuration.SaveResizedSubfiles.Value,
|
||||
configuration.SaveShortcutsForOutputResolutions,
|
||||
configuration.SkipSearch.Value,
|
||||
|
@ -66,6 +66,7 @@ public class Configuration
|
||||
public string[] SaveMappedForOutputResolutions { init; get; }
|
||||
public string[] SaveNotMappedForOutputResolutions { init; get; }
|
||||
public string[] SaveFilteredOriginalImagesFromJLinksForOutputResolutions { init; get; }
|
||||
public string[] SaveRandomForOutputResolutions { init; get; }
|
||||
public bool SaveResizedSubfiles { init; get; }
|
||||
public string[] SaveShortcutsForOutputResolutions { init; get; }
|
||||
public bool SkipSearch { init; get; }
|
||||
@ -85,8 +86,8 @@ public class Configuration
|
||||
int distancePixelDistanceTolerance,
|
||||
bool distanceRenameToMatch,
|
||||
int faceAreaPermille,
|
||||
int faceDistanceHiddenImageFactor,
|
||||
int faceConfidencePercent,
|
||||
int faceDistanceHiddenImageFactor,
|
||||
int faceDistancePermyriad,
|
||||
bool forceFaceLastWriteTimeToCreationTime,
|
||||
bool forceMetadataLastWriteTimeToCreationTime,
|
||||
@ -124,16 +125,17 @@ public class Configuration
|
||||
bool propertiesChangedForMetadata,
|
||||
bool propertiesChangedForResize,
|
||||
int[] rangeDaysDeltaTolerance,
|
||||
double[] rangeDistanceTolerance,
|
||||
int[] rangeFaceAreaPermilleTolerance,
|
||||
double[] rangeFaceConfidence,
|
||||
double[] rangeDistanceTolerance,
|
||||
bool reverse,
|
||||
string[] saveFaceDistancesForOutputResolutions,
|
||||
string[] saveFaceLandmarkForOutputResolutions,
|
||||
string[] saveFilteredOriginalImagesFromJLinksForOutputResolutions,
|
||||
bool saveFullYearOfRandomFiles,
|
||||
string[] saveMappedForOutputResolutions,
|
||||
string[] saveNotMappedForOutputResolutions,
|
||||
string[] saveFilteredOriginalImagesFromJLinksForOutputResolutions,
|
||||
string[] saveRandomForOutputResolutions,
|
||||
bool saveResizedSubfiles,
|
||||
string[] saveShortcutsForOutputResolutions,
|
||||
bool skipSearch,
|
||||
@ -202,6 +204,7 @@ public class Configuration
|
||||
SaveNotMappedForOutputResolutions = saveNotMappedForOutputResolutions;
|
||||
SaveFilteredOriginalImagesFromJLinksForOutputResolutions = saveFilteredOriginalImagesFromJLinksForOutputResolutions;
|
||||
SaveResizedSubfiles = saveResizedSubfiles;
|
||||
SaveRandomForOutputResolutions = saveRandomForOutputResolutions;
|
||||
SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions;
|
||||
SkipSearch = skipSearch;
|
||||
SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh;
|
||||
|
@ -43,46 +43,74 @@ internal class F_Random
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void Random(Property.Models.Configuration configuration, string outputResolution, List<Shared.Models.MappingFromItem> mappingFromItemCollection)
|
||||
private static Dictionary<string, List<string>> Get(Map.Models.MapLogic mapLogic, Shared.Models.Mapping[] mappingCollection, string dateFormat)
|
||||
{
|
||||
Dictionary<string, List<string>> results = new();
|
||||
string key;
|
||||
DateTime dateTime;
|
||||
List<long>? personKeys;
|
||||
List<string>? relativePaths;
|
||||
Dictionary<int, List<long>> idToPersonKeys = mapLogic.GetIdToPeronKeys();
|
||||
foreach (Shared.Models.Mapping mapping in mappingCollection)
|
||||
{
|
||||
if (mapping.MappingFromItem.ImageFileHolder.DirectoryName is null || mapping.MappingFromPerson is null)
|
||||
continue;
|
||||
if (!idToPersonKeys.TryGetValue(mapping.MappingFromItem.Id, out personKeys))
|
||||
continue;
|
||||
if (!personKeys.Contains(mapping.MappingFromPerson.PersonBirthday.Value.Ticks))
|
||||
continue;
|
||||
dateTime = new(mapping.MappingFromPerson.PersonBirthday.Value.Ticks);
|
||||
key = dateTime.ToString(dateFormat);
|
||||
if (!results.TryGetValue(key, out relativePaths))
|
||||
{
|
||||
results.Add(key, new());
|
||||
if (!results.TryGetValue(key, out relativePaths))
|
||||
throw new Exception();
|
||||
}
|
||||
relativePaths.Add(mapping.MappingFromItem.RelativePath);
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
internal void Random(Property.Models.Configuration configuration, Map.Models.MapLogic mapLogic, string outputResolution, Shared.Models.Mapping[] mappingCollection)
|
||||
{
|
||||
string key;
|
||||
string json;
|
||||
string jsonFile;
|
||||
Random random = new();
|
||||
List<string>? collection;
|
||||
string dateFormat = "MM-dd";
|
||||
List<string> relativePaths = new();
|
||||
List<string> ignoreRelativePaths = new();
|
||||
DateTime dateTime = new(2024, 1, 1); //Leap year
|
||||
DateTime dateTime = new(2024, 1, 1); //Leap year
|
||||
Dictionary<string, List<string>> dayToRelativePaths = Get(mapLogic, mappingCollection, dateFormat);
|
||||
string fRandomCollectionDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(configuration, nameof(F_Random), "[]");
|
||||
string[] files = Directory.GetFiles(fRandomCollectionDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string file in files)
|
||||
File.Delete(file);
|
||||
foreach (Shared.Models.MappingFromItem mappingFromItem in mappingFromItemCollection)
|
||||
foreach (Shared.Models.Mapping mapping in mappingCollection)
|
||||
{
|
||||
if (mappingFromItem.ImageFileHolder.DirectoryName is null)
|
||||
if (mapping.MappingFromItem.ImageFileHolder.DirectoryName is null)
|
||||
continue;
|
||||
if (!_Configuration.IgnoreRelativePaths.Any(l => mappingFromItem.ImageFileHolder.DirectoryName.Contains(l)) || !IsIgnoreRelativePath(mappingFromItem.ImageFileHolder.DirectoryName))
|
||||
relativePaths.Add(mappingFromItem.RelativePath);
|
||||
else
|
||||
ignoreRelativePaths.Add(mappingFromItem.RelativePath);
|
||||
if (_Configuration.IgnoreRelativePaths.Any(l => mapping.MappingFromItem.ImageFileHolder.DirectoryName.Contains(l)) && IsIgnoreRelativePath(mapping.MappingFromItem.ImageFileHolder.DirectoryName))
|
||||
continue;
|
||||
relativePaths.Add(mapping.MappingFromItem.RelativePath);
|
||||
}
|
||||
if (relativePaths.Any())
|
||||
{
|
||||
for (int i = 0; i < 366; i++)
|
||||
{
|
||||
relativePaths = (from l in relativePaths orderby random.NextDouble() select l).ToList();
|
||||
jsonFile = Path.Combine(fRandomCollectionDirectory, $"{dateTime.AddDays(i):MM-dd}.json");
|
||||
json = JsonSerializer.Serialize(relativePaths, _WriteIndentedJsonSerializerOptions);
|
||||
key = dateTime.AddDays(i).ToString(dateFormat);
|
||||
if (dayToRelativePaths.TryGetValue(key, out collection) && collection.Count > 10)
|
||||
collection = (from l in collection orderby random.NextDouble() select l).ToList();
|
||||
else
|
||||
collection = (from l in relativePaths orderby random.NextDouble() select l).ToList();
|
||||
jsonFile = Path.Combine(fRandomCollectionDirectory, $"{key}.json");
|
||||
json = JsonSerializer.Serialize(collection, _WriteIndentedJsonSerializerOptions);
|
||||
_ = Shared.Models.Stateless.Methods.IPath.WriteAllText(jsonFile, json, updateDateWhenMatches: false, compareBeforeWrite: false);
|
||||
if (!_Configuration.SaveFullYearOfRandomFiles)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (ignoreRelativePaths.Any())
|
||||
{
|
||||
ignoreRelativePaths = (from l in ignoreRelativePaths orderby random.NextDouble() select l).ToList();
|
||||
jsonFile = Path.Combine(fRandomCollectionDirectory, "01-01.txt");
|
||||
json = JsonSerializer.Serialize(ignoreRelativePaths, _WriteIndentedJsonSerializerOptions);
|
||||
_ = Shared.Models.Stateless.Methods.IPath.WriteAllText(jsonFile, json, updateDateWhenMatches: false, compareBeforeWrite: false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user