Range
This commit is contained in:
@ -6,25 +6,27 @@ namespace View_by_Distance.Map.Models;
|
||||
public class Configuration
|
||||
{
|
||||
|
||||
public int FaceConfidencePercent { init; get; }
|
||||
public int FaceDistancePermyriad { init; get; }
|
||||
public double FaceDistanceTolerance { init; get; }
|
||||
public string FacePartsFileNameExtension { init; get; }
|
||||
public string FacesFileNameExtension { init; get; }
|
||||
public string FacesHiddenFileNameExtension { init; get; }
|
||||
public string MappingDefaultName { init; get; }
|
||||
public int PersonBirthdayFirstYear { init; get; }
|
||||
public string PersonBirthdayFormat { init; get; }
|
||||
public int SortingDaysDeltaTolerance { init; get; }
|
||||
public int RangeDaysDeltaTolerance { init; get; }
|
||||
public double RangeDistanceTolerance { init; get; }
|
||||
public int SortingMaximumPerKey { init; get; }
|
||||
public int SortingMinimumToUseSigma { init; get; }
|
||||
public string FacesFileNameExtension { init; get; }
|
||||
public string FacePartsFileNameExtension { init; get; }
|
||||
public string FacesHiddenFileNameExtension { init; get; }
|
||||
|
||||
[JsonConstructor]
|
||||
public Configuration(int faceDistancePermyriad,
|
||||
double faceDistanceTolerance,
|
||||
public Configuration(int faceConfidencePercent,
|
||||
int faceDistancePermyriad,
|
||||
string mappingDefaultName,
|
||||
int personBirthdayFirstYear,
|
||||
string personBirthdayFormat,
|
||||
int sortingDaysDeltaTolerance,
|
||||
int[] rangeDaysDeltaTolerance,
|
||||
double[] rangeDistanceTolerance,
|
||||
int sortingMaximumPerKey,
|
||||
int sortingMinimumToUseSigma,
|
||||
string facesFileNameExtension,
|
||||
@ -34,12 +36,13 @@ public class Configuration
|
||||
MappingDefaultName = mappingDefaultName;
|
||||
PersonBirthdayFormat = personBirthdayFormat;
|
||||
SortingMaximumPerKey = sortingMaximumPerKey;
|
||||
FaceConfidencePercent = faceConfidencePercent;
|
||||
FaceDistancePermyriad = faceDistancePermyriad;
|
||||
FaceDistanceTolerance = faceDistanceTolerance;
|
||||
FacesFileNameExtension = facesFileNameExtension;
|
||||
PersonBirthdayFirstYear = personBirthdayFirstYear;
|
||||
RangeDistanceTolerance = rangeDistanceTolerance[1];
|
||||
SortingMinimumToUseSigma = sortingMinimumToUseSigma;
|
||||
SortingDaysDeltaTolerance = sortingDaysDeltaTolerance;
|
||||
RangeDaysDeltaTolerance = rangeDaysDeltaTolerance[1];
|
||||
FacePartsFileNameExtension = facePartsFileNameExtension;
|
||||
FacesHiddenFileNameExtension = facesHiddenFileNameExtension;
|
||||
}
|
||||
|
@ -25,12 +25,14 @@ public class MapLogic
|
||||
private readonly int _MaxDegreeOfParallelism;
|
||||
private readonly Configuration? _Configuration;
|
||||
private readonly string _EDistanceContentTicksDirectory;
|
||||
private readonly Shared.Models.Methods.IMapLogicSupport? _MapLogicSupport;
|
||||
private readonly Shared.Models.Properties.IPropertyConfiguration _PropertyConfiguration;
|
||||
|
||||
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, long ticks, PersonContainer[] personContainers, string a2PeopleSingletonDirectory, string eDistanceContentDirectory, Mapping[] mappingCollection, Shared.Models.Methods.IMapLogicSupport? faceDistance)
|
||||
public MapLogic(int maxDegreeOfParallelism, Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, long ticks, PersonContainer[] personContainers, string a2PeopleSingletonDirectory, string eDistanceContentDirectory, Mapping[] mappingCollection, Shared.Models.Methods.IMapLogicSupport? mapLogicSupport)
|
||||
{
|
||||
_Ticks = ticks;
|
||||
_Configuration = configuration;
|
||||
_MapLogicSupport = mapLogicSupport;
|
||||
_Log = Serilog.Log.ForContext<MapLogic>();
|
||||
_PropertyConfiguration = propertyConfiguration;
|
||||
_MaxDegreeOfParallelism = maxDegreeOfParallelism;
|
||||
@ -59,7 +61,7 @@ public class MapLogic
|
||||
_ = Directory.CreateDirectory(eDistanceContentDirectory);
|
||||
if (!Directory.Exists(eDistanceContentTicksDirectory))
|
||||
_ = Directory.CreateDirectory(eDistanceContentTicksDirectory);
|
||||
if (configuration is not null && faceDistance is not null)
|
||||
if (configuration is not null && mapLogicSupport is not null)
|
||||
{
|
||||
List<PersonContainer> personContainerCollection = new(personContainers);
|
||||
Stateless.MapLogic.Set(propertyConfiguration,
|
||||
@ -69,7 +71,7 @@ public class MapLogic
|
||||
a2PeopleSingletonDirectory,
|
||||
eDistanceContentDirectory,
|
||||
mappingCollection,
|
||||
faceDistance,
|
||||
mapLogicSupport,
|
||||
personKeyToPersonContainer,
|
||||
personKeyToRanges,
|
||||
notMappedPersonContainers,
|
||||
@ -193,6 +195,8 @@ public class MapLogic
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Copy(sourceFile, checkFile);
|
||||
if (saveContainer.MakeAllHidden)
|
||||
File.SetAttributes(checkFile, FileAttributes.Hidden);
|
||||
if (saveContainer.HiddenFaceFileHolder is not null && saveContainer.HiddenFaceFileHolder.Exists)
|
||||
{
|
||||
sourceFile = saveContainer.HiddenFaceFileHolder.FullName;
|
||||
@ -206,16 +210,23 @@ public class MapLogic
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Copy(sourceFile, checkFile);
|
||||
if (saveContainer.MakeAllHidden)
|
||||
File.SetAttributes(checkFile, FileAttributes.Hidden);
|
||||
}
|
||||
foreach (SaveContainer saveContainer in saveContainers)
|
||||
if (updated is null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(saveContainer.Directory) || string.IsNullOrEmpty(saveContainer.CheckFile) || saveContainer.ResizedFileHolder is null || !saveContainer.ResizedFileHolder.Exists)
|
||||
continue;
|
||||
checkFile = saveContainer.CheckFile;
|
||||
sourceFile = saveContainer.ResizedFileHolder.FullName;
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Copy(sourceFile, checkFile);
|
||||
foreach (SaveContainer saveContainer in saveContainers)
|
||||
{
|
||||
if (string.IsNullOrEmpty(saveContainer.Directory) || string.IsNullOrEmpty(saveContainer.CheckFile) || saveContainer.ResizedFileHolder is null || !saveContainer.ResizedFileHolder.Exists)
|
||||
continue;
|
||||
checkFile = saveContainer.CheckFile;
|
||||
sourceFile = saveContainer.ResizedFileHolder.FullName;
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
File.Copy(sourceFile, checkFile);
|
||||
if (saveContainer.MakeAllHidden)
|
||||
File.SetAttributes(checkFile, FileAttributes.Hidden);
|
||||
}
|
||||
}
|
||||
foreach (SaveContainer saveContainer in saveContainers)
|
||||
{
|
||||
@ -226,6 +237,8 @@ public class MapLogic
|
||||
windowsShortcut = new() { Path = saveContainer.ResizedFileHolder.FullName };
|
||||
windowsShortcut.Save(saveContainer.ShortcutFile);
|
||||
windowsShortcut.Dispose();
|
||||
if (saveContainer.MakeAllHidden)
|
||||
File.SetAttributes(saveContainer.ShortcutFile, FileAttributes.Hidden);
|
||||
}
|
||||
catch (Exception)
|
||||
{ }
|
||||
@ -413,8 +426,13 @@ public class MapLogic
|
||||
|
||||
public void UpdateFromSortingContainersThenSaveContainers(string dFacesContentDirectory, string d2FacePartsContentDirectory, Mapping[] mappingCollection, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping, int? useFiltersCounter, SortingContainer[] sortingContainers, int totalNotMapped)
|
||||
{
|
||||
int updated = UpdateFromSortingContainers(sortingContainers);
|
||||
if (_MapLogicSupport is not null)
|
||||
{
|
||||
string counts = _MapLogicSupport.GetCounts();
|
||||
_ = Directory.CreateDirectory(Path.Combine(_EDistanceContentTicksDirectory, counts));
|
||||
}
|
||||
Dictionary<long, int> personKeyToCount = new();
|
||||
int updated = UpdateFromSortingContainers(sortingContainers);
|
||||
List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, personKeyToCount, useFiltersCounter, saveMapped: false);
|
||||
SaveContainers(totalNotMapped, updated, saveContainers);
|
||||
}
|
||||
@ -507,7 +525,7 @@ public class MapLogic
|
||||
else
|
||||
personKeysRangesCollection = GetPersonKeysRangesCollection(normalizedPixelPercentageToPersonContainers[faceDistanceLength.NormalizedPixelPercentage.Value]);
|
||||
}
|
||||
sorting = ISorting.Get(_Configuration.FaceDistancePermyriad, _Configuration.FaceDistanceTolerance, faceDistanceEncoding, faceDistanceLength, personKeysRangesCollection);
|
||||
sorting = ISorting.Get(_Configuration.FaceDistancePermyriad, _Configuration.RangeDistanceTolerance, faceDistanceEncoding, faceDistanceLength, personKeysRangesCollection);
|
||||
if (sorting.DistancePermyriad == 0)
|
||||
continue;
|
||||
if (sorting.Id == faceDistanceEncoding.Id)
|
||||
@ -968,7 +986,7 @@ public class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
private List<(string, FileHolder, string)> GetCollection(int faceDistanceAreaPermilleTolerance, string dFacesContentDirectory, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping)
|
||||
private List<(string, FileHolder, string)> GetCollection(string dFacesContentDirectory, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping)
|
||||
{
|
||||
if (_Configuration is null)
|
||||
throw new NullReferenceException(nameof(_Configuration));
|
||||
@ -988,8 +1006,6 @@ public class MapLogic
|
||||
foreach (KeyValuePair<int, Mapping> normalizedPixelPercentageAndMapping in keyValuePair.Value)
|
||||
{
|
||||
mapping = normalizedPixelPercentageAndMapping.Value;
|
||||
if (mapping.MappingFromLocation.AreaPermille < faceDistanceAreaPermilleTolerance)
|
||||
continue;
|
||||
if (normalizedPixelPercentageToPersonContainers is not null && normalizedPixelPercentageToPersonContainers.ContainsKey(mapping.MappingFromLocation.NormalizedPixelPercentage))
|
||||
continue;
|
||||
_ = _SkipCollection.TryGetValue(keyValuePair.Key, out normalizedPixelPercentages);
|
||||
@ -1008,11 +1024,11 @@ public class MapLogic
|
||||
return results;
|
||||
}
|
||||
|
||||
public void CopyNotMappedFaces(int faceDistanceAreaPermilleTolerance, string dFacesContentDirectory, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping)
|
||||
public void CopyNotMappedFaces(int[] rangeFaceAreaPermilleTolerance, string dFacesContentDirectory, Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping)
|
||||
{
|
||||
if (_Configuration is null)
|
||||
throw new NullReferenceException(nameof(_Configuration));
|
||||
List<(string Directory, FileHolder FaceFileHolder, string CheckFile)> collection = GetCollection(faceDistanceAreaPermilleTolerance, dFacesContentDirectory, idToNormalizedPixelPercentageToMapping);
|
||||
List<(string Directory, FileHolder FaceFileHolder, string CheckFile)> collection = GetCollection(dFacesContentDirectory, idToNormalizedPixelPercentageToMapping);
|
||||
string[] directories = (from l in collection select l.Directory).Distinct().ToArray();
|
||||
foreach (string directory in directories)
|
||||
{
|
||||
|
@ -451,7 +451,7 @@ internal abstract class MapLogic
|
||||
if (keyValuePair.Value.Count < configuration.SortingMinimumToUseSigma)
|
||||
{
|
||||
maximum = keyValuePair.Value.Max();
|
||||
personKeyToRanges.Add(keyValuePair.Key, new(new DateTime(minimum).AddDays(-configuration.SortingDaysDeltaTolerance).Ticks, minimum, maximum, new DateTime(maximum).AddDays(configuration.SortingDaysDeltaTolerance).Ticks));
|
||||
personKeyToRanges.Add(keyValuePair.Key, new(new DateTime(minimum).AddDays(-configuration.RangeDaysDeltaTolerance).Ticks, minimum, maximum, new DateTime(maximum).AddDays(configuration.RangeDaysDeltaTolerance).Ticks));
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -570,7 +570,7 @@ internal abstract class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
internal static void Set(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, long ticks, List<PersonContainer> personContainers, string? a2PeopleContentDirectory, string eDistanceContentDirectory, Mapping[] mappingCollection, Shared.Models.Methods.IMapLogicSupport faceDistance, Dictionary<long, PersonContainer> personKeyToPersonContainer, Dictionary<long, (long LCL, long Minimum, long Maximum, long UCL)> personKeyToRanges, List<PersonContainer> notMappedPersonContainers, Dictionary<int, List<int>> skipCollection, Dictionary<int, Dictionary<int, PersonContainer[]>> idThenNormalizedPixelPercentageToPersonContainers)
|
||||
internal static void Set(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, Configuration? configuration, long ticks, List<PersonContainer> personContainers, string? a2PeopleContentDirectory, string eDistanceContentDirectory, Mapping[] mappingCollection, Shared.Models.Methods.IMapLogicSupport mapLogicSupport, Dictionary<long, PersonContainer> personKeyToPersonContainer, Dictionary<long, (long LCL, long Minimum, long Maximum, long UCL)> personKeyToRanges, List<PersonContainer> notMappedPersonContainers, Dictionary<int, List<int>> skipCollection, Dictionary<int, Dictionary<int, PersonContainer[]>> idThenNormalizedPixelPercentageToPersonContainers)
|
||||
{
|
||||
if (configuration is null)
|
||||
throw new NullReferenceException(nameof(configuration));
|
||||
@ -616,7 +616,7 @@ internal abstract class MapLogic
|
||||
notMappedPersonContainers.AddRange(GetNotMappedPersonContainers(configuration, personContainers, personKeyCollection));
|
||||
AppendToSkipCollection(skipCollection, idThenNormalizedPixelPercentageToPersonContainers, incorrectIdThenNormalizedPixelPercentageToPersonContainers);
|
||||
if (possiblyNewPersonDisplayDirectoryNamesAndPersonContainer.Any())
|
||||
faceDistance.SavePossiblyNewPersonContainers(propertyConfiguration, configuration.PersonBirthdayFormat, configuration.FacesFileNameExtension, a2PeopleContentDirectory, personKeyToPersonContainer, possiblyNewPersonDisplayDirectoryNamesAndPersonContainer);
|
||||
mapLogicSupport.SavePossiblyNewPersonContainers(propertyConfiguration, configuration.PersonBirthdayFormat, configuration.FacesFileNameExtension, a2PeopleContentDirectory, personKeyToPersonContainer, possiblyNewPersonDisplayDirectoryNamesAndPersonContainer);
|
||||
}
|
||||
|
||||
private static string GetMappingSegmentB(long ticks, PersonBirthday personBirthday, int? approximateYears, long minimumDateTimeTicks, bool? isWrongYear)
|
||||
@ -660,12 +660,8 @@ internal abstract class MapLogic
|
||||
internal static SaveContainer GetDebugSaveContainer(string directory, SortingContainer sortingContainer, Mapping mapping)
|
||||
{
|
||||
SaveContainer result;
|
||||
string checkFile = string.Empty;
|
||||
FileHolder? faceFileHolder = null;
|
||||
FileHolder? facePartsFileHolder = null;
|
||||
FileHolder? hiddenFaceFileHolder = null;
|
||||
string shortcutFile = Path.Combine(directory, $"{sortingContainer.Mapping.MappingFromLocation.DeterministicHashCodeKey}{sortingContainer.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}.debug.lnk");
|
||||
result = new(checkFile, directory, faceFileHolder, hiddenFaceFileHolder, facePartsFileHolder, mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
|
||||
result = new(directory, mapping.MappingFromItem.ResizedFileHolder, shortcutFile);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user