Range
This commit is contained in:
		| @ -10,18 +10,23 @@ namespace View_by_Distance.Distance.Models; | |||||||
| public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport | public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport | ||||||
| { | { | ||||||
|  |  | ||||||
|  |     private int _Area; | ||||||
|  |     private int _Days; | ||||||
|  |     private int _Distance; | ||||||
|  |     private int _Confidence; | ||||||
|  |  | ||||||
|  |     private readonly int _FaceConfidencePercent; | ||||||
|     private readonly int _FaceDistancePermyriad; |     private readonly int _FaceDistancePermyriad; | ||||||
|     private readonly int _SortingDaysDeltaTolerance; |     private readonly int[] _RangeDaysDeltaTolerance; | ||||||
|     private readonly double _FaceDistanceMinimumConfidence; |     private readonly int[] _RangeFaceAreaPermilleTolerance; | ||||||
|     private readonly int _FaceDistanceAreaPermilleTolerance; |  | ||||||
|     private readonly int _SortingMaximumPerFaceShouldBeHigh; |     private readonly int _SortingMaximumPerFaceShouldBeHigh; | ||||||
|  |  | ||||||
|     public MapLogicSupport(int faceDistanceAreaPermilleTolerance, double faceDistanceMinimumConfidence, int faceDistancePermyriad, int sortingDaysDeltaTolerance, int sortingMaximumPerFaceShouldBeHigh) |     public MapLogicSupport(int faceConfidencePercent, int faceDistancePermyriad, int[] rangeDaysDeltaTolerance, int[] rangeFaceAreaPermilleTolerance, int sortingMaximumPerFaceShouldBeHigh) | ||||||
|     { |     { | ||||||
|  |         _FaceConfidencePercent = faceConfidencePercent; | ||||||
|         _FaceDistancePermyriad = faceDistancePermyriad; |         _FaceDistancePermyriad = faceDistancePermyriad; | ||||||
|         _SortingDaysDeltaTolerance = sortingDaysDeltaTolerance; |         _RangeDaysDeltaTolerance = rangeDaysDeltaTolerance; | ||||||
|         _FaceDistanceMinimumConfidence = faceDistanceMinimumConfidence; |         _RangeFaceAreaPermilleTolerance = rangeFaceAreaPermilleTolerance; | ||||||
|         _FaceDistanceAreaPermilleTolerance = faceDistanceAreaPermilleTolerance; |  | ||||||
|         _SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh; |         _SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -46,10 +51,10 @@ public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport | |||||||
|         double b; |         double b; | ||||||
|         double c; |         double c; | ||||||
|         double d; |         double d; | ||||||
|  |         double faceAreaPermille; | ||||||
|  |         double faceConfidencePercent; | ||||||
|         double faceDistancePermyriad; |         double faceDistancePermyriad; | ||||||
|         double sortingDaysDeltaTolerance; |         double rangeDaysDeltaTolerance; | ||||||
|         double faceDistanceMinimumConfidence; |  | ||||||
|         double faceDistanceAreaPermilleTolerance; |  | ||||||
|         if (useFiltersCounter is null) |         if (useFiltersCounter is null) | ||||||
|         { |         { | ||||||
|             a = 1f; |             a = 1f; | ||||||
| @ -87,52 +92,70 @@ public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport | |||||||
|         } |         } | ||||||
|         if (useFiltersCounter is null) |         if (useFiltersCounter is null) | ||||||
|         { |         { | ||||||
|             sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance; |             rangeDaysDeltaTolerance = _RangeDaysDeltaTolerance[1]; | ||||||
|             faceDistancePermyriad = _FaceDistancePermyriad; |             faceDistancePermyriad = _FaceDistancePermyriad; | ||||||
|             faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence; |             faceConfidencePercent = _FaceConfidencePercent; | ||||||
|             faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance; |             faceAreaPermille = _RangeFaceAreaPermilleTolerance[1]; | ||||||
|         } |         } | ||||||
|         else if (useFiltersCounter.Value is 1 or 5 or 9 or 13) |         else if (useFiltersCounter.Value is 1 or 5 or 9 or 13) | ||||||
|         { |         { | ||||||
|             sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * a; |             rangeDaysDeltaTolerance = _RangeDaysDeltaTolerance[1] * a; | ||||||
|             faceDistancePermyriad = _FaceDistancePermyriad * c; |             faceDistancePermyriad = _FaceDistancePermyriad * c; | ||||||
|             faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * d; |             faceConfidencePercent = _FaceConfidencePercent * d; | ||||||
|             faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance * d; |             faceAreaPermille = _RangeFaceAreaPermilleTolerance[1] * d; | ||||||
|         } |         } | ||||||
|         else if (useFiltersCounter.Value is 2 or 6 or 10 or 14) |         else if (useFiltersCounter.Value is 2 or 6 or 10 or 14) | ||||||
|         { |         { | ||||||
|             sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * c; |             rangeDaysDeltaTolerance = _RangeDaysDeltaTolerance[1] * c; | ||||||
|             faceDistancePermyriad = _FaceDistancePermyriad * a; |             faceDistancePermyriad = _FaceDistancePermyriad * a; | ||||||
|             faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * d; |             faceConfidencePercent = _FaceConfidencePercent * d; | ||||||
|             faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance * d; |             faceAreaPermille = _RangeFaceAreaPermilleTolerance[1] * d; | ||||||
|         } |         } | ||||||
|         else if (useFiltersCounter.Value is 3 or 7 or 11 or 15) |         else if (useFiltersCounter.Value is 3 or 7 or 11 or 15) | ||||||
|         { |         { | ||||||
|             sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * c; |             rangeDaysDeltaTolerance = _RangeDaysDeltaTolerance[1] * c; | ||||||
|             faceDistancePermyriad = _FaceDistancePermyriad * c; |             faceDistancePermyriad = _FaceDistancePermyriad * c; | ||||||
|             faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * b; |             faceConfidencePercent = _FaceConfidencePercent * b; | ||||||
|             faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance * d; |             faceAreaPermille = _RangeFaceAreaPermilleTolerance[1] * d; | ||||||
|         } |         } | ||||||
|         else if (useFiltersCounter.Value is 4 or 8 or 12 or 16) |         else if (useFiltersCounter.Value is 4 or 8 or 12 or 16) | ||||||
|         { |         { | ||||||
|             sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * c; |             rangeDaysDeltaTolerance = _RangeDaysDeltaTolerance[1] * c; | ||||||
|             faceDistancePermyriad = _FaceDistancePermyriad * c; |             faceDistancePermyriad = _FaceDistancePermyriad * c; | ||||||
|             faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * d; |             faceConfidencePercent = _FaceConfidencePercent * d; | ||||||
|             faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance * b; |             faceAreaPermille = _RangeFaceAreaPermilleTolerance[1] * b; | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             sortingDaysDeltaTolerance = int.MaxValue; |             rangeDaysDeltaTolerance = int.MaxValue; | ||||||
|             faceDistancePermyriad = int.MaxValue; |             faceDistancePermyriad = int.MaxValue; | ||||||
|             faceDistanceAreaPermilleTolerance = 0; |             faceAreaPermille = 0; | ||||||
|             faceDistanceMinimumConfidence = 0; |             faceConfidencePercent = 0; | ||||||
|         } |         } | ||||||
|         foreach (Sorting sorting in collection) |         foreach (Sorting sorting in collection) | ||||||
|         { |         { | ||||||
|             if (face.Mapping is null || faceDistanceEncoding.NormalizedPixelPercentage is null) |             if (face.Mapping is null || faceDistanceEncoding.NormalizedPixelPercentage is null) | ||||||
|                 throw new NotSupportedException(); |                 throw new NotSupportedException(); | ||||||
|             if (sorting.DaysDelta > sortingDaysDeltaTolerance || sorting.DistancePermyriad > faceDistancePermyriad || face.Mapping.MappingFromLocation.Confidence < faceDistanceMinimumConfidence || face.Mapping.MappingFromLocation.AreaPermille < faceDistanceAreaPermilleTolerance) |             if (sorting.DaysDelta > rangeDaysDeltaTolerance) | ||||||
|  |             { | ||||||
|  |                 _Days += 1; | ||||||
|                 continue; |                 continue; | ||||||
|  |             } | ||||||
|  |             if (sorting.DistancePermyriad > faceDistancePermyriad) | ||||||
|  |             { | ||||||
|  |                 _Distance += 1; | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |             if (face.Mapping.MappingFromLocation.ConfidencePercent < faceConfidencePercent) | ||||||
|  |             { | ||||||
|  |                 _Confidence += 1; | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |             if (face.Mapping.MappingFromLocation.AreaPermille < faceAreaPermille) | ||||||
|  |             { | ||||||
|  |                 _Area += 1; | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|             sortingContainer = new(face.Mapping, sorting); |             sortingContainer = new(face.Mapping, sorting); | ||||||
|             results.Add(sortingContainer); |             results.Add(sortingContainer); | ||||||
|             if (results.Count >= _SortingMaximumPerFaceShouldBeHigh) |             if (results.Count >= _SortingMaximumPerFaceShouldBeHigh) | ||||||
| @ -163,7 +186,7 @@ public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport | |||||||
|                 throw new NotSupportedException(); |                 throw new NotSupportedException(); | ||||||
|             if (face.FaceDistance?.Encoding is not FaceRecognitionDotNet.FaceEncoding faceEncoding) |             if (face.FaceDistance?.Encoding is not FaceRecognitionDotNet.FaceEncoding faceEncoding) | ||||||
|                 continue; |                 continue; | ||||||
|             faceDistance = new(face.Mapping.MappingFromLocation.Confidence, faceEncoding, face.Mapping.MappingFromItem.Id, face.Mapping.MappingFromItem.IsWrongYear, face.Mapping.MappingFromItem.MinimumDateTime, face.Mapping.MappingFromLocation.NormalizedPixelPercentage); |             faceDistance = new(face.Mapping.MappingFromLocation.ConfidencePercent, faceEncoding, face.Mapping.MappingFromItem.Id, face.Mapping.MappingFromItem.IsWrongYear, face.Mapping.MappingFromItem.MinimumDateTime, face.Mapping.MappingFromLocation.NormalizedPixelPercentage); | ||||||
|             faceDistanceContainer = new(face, faceDistance); |             faceDistanceContainer = new(face, faceDistance); | ||||||
|             collection.Add(faceDistanceContainer); |             collection.Add(faceDistanceContainer); | ||||||
|         } |         } | ||||||
| @ -244,7 +267,7 @@ public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport | |||||||
|                 return; |                 return; | ||||||
|             progressBar.Tick(); |             progressBar.Tick(); | ||||||
|             faceEncoding = FaceRecognition.LoadFaceEncoding(face.FaceEncoding.RawEncoding); |             faceEncoding = FaceRecognition.LoadFaceEncoding(face.FaceEncoding.RawEncoding); | ||||||
|             FaceDistance faceDistance = new(face.Mapping.MappingFromLocation.Confidence, faceEncoding, face.Mapping.MappingFromItem.Id, face.Mapping.MappingFromItem.IsWrongYear, face.Mapping.MappingFromItem.MinimumDateTime, face.Mapping.MappingFromLocation.NormalizedPixelPercentage); |             FaceDistance faceDistance = new(face.Mapping.MappingFromLocation.ConfidencePercent, faceEncoding, face.Mapping.MappingFromItem.Id, face.Mapping.MappingFromItem.IsWrongYear, face.Mapping.MappingFromItem.MinimumDateTime, face.Mapping.MappingFromLocation.NormalizedPixelPercentage); | ||||||
|             lock (face) |             lock (face) | ||||||
|                 face.SetFaceDistance(faceDistance); |                 face.SetFaceDistance(faceDistance); | ||||||
|         }); |         }); | ||||||
| @ -317,4 +340,18 @@ public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport | |||||||
|         return results; |         return results; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     string Shared.Models.Methods.IMapLogicSupport.GetCounts() | ||||||
|  |     { | ||||||
|  |         string result; | ||||||
|  |         List<(int Value, string Name)> results = new() | ||||||
|  |         { | ||||||
|  |             new(_Area, nameof(_Area)), | ||||||
|  |             new(_Confidence, nameof(_Confidence)), | ||||||
|  |             new(_Days, nameof(_Days)), | ||||||
|  |             new(_Distance, nameof(_Distance)) | ||||||
|  |         }; | ||||||
|  |         result = string.Join(' ', from l in results orderby l.Value descending select $"{l.Name}_{l.Value};"); | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -12,15 +12,17 @@ public partial class E_Distance | |||||||
|     private readonly List<double?> _Debug; |     private readonly List<double?> _Debug; | ||||||
|     private readonly List<string> _Renamed; |     private readonly List<string> _Renamed; | ||||||
|     private readonly Serilog.ILogger? _Log; |     private readonly Serilog.ILogger? _Log; | ||||||
|  |     private readonly int _FaceConfidencePercent; | ||||||
|     private readonly bool _DistanceRenameToMatch; |     private readonly bool _DistanceRenameToMatch; | ||||||
|     private readonly double _FaceDistanceTolerance; |     private readonly double[] _RangeFaceConfidence; | ||||||
|     private readonly bool _DistanceMoveUnableToMatch; |     private readonly bool _DistanceMoveUnableToMatch; | ||||||
|     private readonly List<string> _AllMappedFaceFiles; |     private readonly List<string> _AllMappedFaceFiles; | ||||||
|  |     private readonly double[] _RangeDistanceTolerance; | ||||||
|     private readonly int _DistancePixelDistanceTolerance; |     private readonly int _DistancePixelDistanceTolerance; | ||||||
|     private readonly List<string> _AllMappedFaceFileNames; |     private readonly List<string> _AllMappedFaceFileNames; | ||||||
|     private readonly List<string> _DuplicateMappedFaceFiles; |     private readonly List<string> _DuplicateMappedFaceFiles; | ||||||
|  |  | ||||||
|     public E_Distance(bool distanceMoveUnableToMatch, int distancePixelDistanceTolerance, bool distanceRenameToMatch, double faceDistanceTolerance) |     public E_Distance(bool distanceMoveUnableToMatch, int distancePixelDistanceTolerance, bool distanceRenameToMatch, int faceConfidencePercent, double[] rangeDistanceTolerance, double[] rangeFaceConfidence) | ||||||
|     { |     { | ||||||
|         _Debug = new(); |         _Debug = new(); | ||||||
|         _Moved = new(); |         _Moved = new(); | ||||||
| @ -28,9 +30,11 @@ public partial class E_Distance | |||||||
|         _AllMappedFaceFiles = new(); |         _AllMappedFaceFiles = new(); | ||||||
|         _AllMappedFaceFileNames = new(); |         _AllMappedFaceFileNames = new(); | ||||||
|         _DuplicateMappedFaceFiles = new(); |         _DuplicateMappedFaceFiles = new(); | ||||||
|  |         _RangeFaceConfidence = rangeFaceConfidence; | ||||||
|         _Log = Serilog.Log.ForContext<E_Distance>(); |         _Log = Serilog.Log.ForContext<E_Distance>(); | ||||||
|         _DistanceRenameToMatch = distanceRenameToMatch; |         _DistanceRenameToMatch = distanceRenameToMatch; | ||||||
|         _FaceDistanceTolerance = faceDistanceTolerance; |         _FaceConfidencePercent = faceConfidencePercent; | ||||||
|  |         _RangeDistanceTolerance = rangeDistanceTolerance; | ||||||
|         _DistanceMoveUnableToMatch = distanceMoveUnableToMatch; |         _DistanceMoveUnableToMatch = distanceMoveUnableToMatch; | ||||||
|         _DistancePixelDistanceTolerance = distancePixelDistanceTolerance; |         _DistancePixelDistanceTolerance = distancePixelDistanceTolerance; | ||||||
|     } |     } | ||||||
| @ -67,7 +71,7 @@ public partial class E_Distance | |||||||
|                 } |                 } | ||||||
|                 else |                 else | ||||||
|                 { |                 { | ||||||
|                     checkDirectoryName = Path.Combine(checkDirectoryName, $"({directoryTicks}{_FaceDistanceTolerance.ToString()[1..]})"); |                     checkDirectoryName = Path.Combine(checkDirectoryName, $"({directoryTicks}_{string.Join('-', _RangeDistanceTolerance)})"); | ||||||
|                     for (int i = directoryNames.Count - 1 - 1; i > -1; i--) |                     for (int i = directoryNames.Count - 1 - 1; i > -1; i--) | ||||||
|                         checkDirectoryName = Path.Combine(checkDirectoryName, directoryNames[i]); |                         checkDirectoryName = Path.Combine(checkDirectoryName, directoryNames[i]); | ||||||
|                     if (!Directory.Exists(checkDirectoryName)) |                     if (!Directory.Exists(checkDirectoryName)) | ||||||
| @ -133,9 +137,10 @@ public partial class E_Distance | |||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static FaceDistanceContainer[] GetFaceDistanceContainers(MappingFromItem mappingFromItem, Face[] filteredFaces) |     private FaceDistanceContainer[] GetFaceDistanceContainers(MappingFromItem mappingFromItem, Face[] filteredFaces) | ||||||
|     { |     { | ||||||
|         FaceDistanceContainer[] results; |         FaceDistanceContainer[] results; | ||||||
|  |         int confidencePercent; | ||||||
|         FaceDistance faceDistance; |         FaceDistance faceDistance; | ||||||
|         int normalizedPixelPercentage; |         int normalizedPixelPercentage; | ||||||
|         FaceDistanceContainer faceDistanceContainer; |         FaceDistanceContainer faceDistanceContainer; | ||||||
| @ -144,13 +149,14 @@ public partial class E_Distance | |||||||
|         { |         { | ||||||
|             if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null) |             if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null) | ||||||
|                 throw new NotSupportedException(); |                 throw new NotSupportedException(); | ||||||
|  |             confidencePercent = Shared.Models.Stateless.Methods.ILocation.GetConfidencePercent(_FaceConfidencePercent, _RangeFaceConfidence, face.Location.Confidence); | ||||||
|             normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(face.Location, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, face.OutputResolution); |             normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(face.Location, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, face.OutputResolution); | ||||||
|             if (face.FaceDistance?.Encoding is not null && face.FaceDistance.Encoding is FaceRecognitionDotNet.FaceEncoding faceEncoding) |             if (face.FaceDistance?.Encoding is not null && face.FaceDistance.Encoding is FaceRecognitionDotNet.FaceEncoding faceEncoding) | ||||||
|                 faceDistance = new(face.Location.Confidence, faceEncoding, mappingFromItem.Id, mappingFromItem.IsWrongYear, mappingFromItem.MinimumDateTime, normalizedPixelPercentage); |                 faceDistance = new(confidencePercent, faceEncoding, mappingFromItem.Id, mappingFromItem.IsWrongYear, mappingFromItem.MinimumDateTime, normalizedPixelPercentage); | ||||||
|             else |             else | ||||||
|             { |             { | ||||||
|                 faceEncoding = FaceRecognition.LoadFaceEncoding(face.FaceEncoding.RawEncoding); |                 faceEncoding = FaceRecognition.LoadFaceEncoding(face.FaceEncoding.RawEncoding); | ||||||
|                 faceDistance = new(face.Location.Confidence, faceEncoding, mappingFromItem.Id, mappingFromItem.IsWrongYear, mappingFromItem.MinimumDateTime, normalizedPixelPercentage); |                 faceDistance = new(confidencePercent, faceEncoding, mappingFromItem.Id, mappingFromItem.IsWrongYear, mappingFromItem.MinimumDateTime, normalizedPixelPercentage); | ||||||
|                 lock (filteredFaces) |                 lock (filteredFaces) | ||||||
|                     face.SetFaceDistance(faceDistance); |                     face.SetFaceDistance(faceDistance); | ||||||
|             } |             } | ||||||
| @ -173,7 +179,7 @@ public partial class E_Distance | |||||||
|         return faceDistanceEncodings; |         return faceDistanceEncodings; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static List<(Face Face, double? Length)> GetValues(MappingFromItem mappingFromItem, Face[] filteredFaces, string json) |     private List<(Face Face, double? Length)> GetValues(MappingFromItem mappingFromItem, Face[] filteredFaces, string json) | ||||||
|     { |     { | ||||||
|         List<(Face Face, double? Length)> results = new(); |         List<(Face Face, double? Length)> results = new(); | ||||||
|         Face face; |         Face face; | ||||||
|  | |||||||
| @ -23,7 +23,6 @@ public class Configuration | |||||||
|     [Display(Name = "Load Or Create Then Save Distance Results"), Required] public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; } |     [Display(Name = "Load Or Create Then Save Distance Results"), Required] public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Load Or Create Then Save Image Faces Results"), Required] public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; } |     [Display(Name = "Load Or Create Then Save Image Faces Results"), Required] public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Load Or Create Then Save Index"), Required] public bool? LoadOrCreateThenSaveIndex { get; set; } |     [Display(Name = "Load Or Create Then Save Index"), Required] public bool? LoadOrCreateThenSaveIndex { get; set; } | ||||||
|     [Display(Name = "Location Confidence Factor"), Required] public int? LocationConfidenceFactor { get; set; } |  | ||||||
|     [Display(Name = "Mapped Max Index"), Required] public int? MappedMaxIndex { get; set; } |     [Display(Name = "Mapped Max Index"), Required] public int? MappedMaxIndex { get; set; } | ||||||
|     [Display(Name = "Mixed Year Relative Paths"), Required] public string[] MixedYearRelativePaths { get; set; } |     [Display(Name = "Mixed Year Relative Paths"), Required] public string[] MixedYearRelativePaths { get; set; } | ||||||
|     [Display(Name = "Model Directory"), Required] public string ModelDirectory { get; set; } |     [Display(Name = "Model Directory"), Required] public string ModelDirectory { get; set; } | ||||||
| @ -88,8 +87,6 @@ public class Configuration | |||||||
|             configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>(); |             configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>(); | ||||||
|         if (configuration.LoadOrCreateThenSaveIndex is null) |         if (configuration.LoadOrCreateThenSaveIndex is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveIndex)); |             throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveIndex)); | ||||||
|         if (configuration.LocationConfidenceFactor is null) |  | ||||||
|             throw new NullReferenceException(nameof(configuration.LocationConfidenceFactor)); |  | ||||||
|         if (configuration.MixedYearRelativePaths is null) |         if (configuration.MixedYearRelativePaths is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths)); |             throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths)); | ||||||
|         if (configuration.NumberOfJitters is null) |         if (configuration.NumberOfJitters is null) | ||||||
| @ -148,7 +145,6 @@ public class Configuration | |||||||
|                      configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions, |                      configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions, | ||||||
|                      configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions, |                      configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions, | ||||||
|                      configuration.LoadOrCreateThenSaveIndex.Value, |                      configuration.LoadOrCreateThenSaveIndex.Value, | ||||||
|                      configuration.LocationConfidenceFactor.Value, |  | ||||||
|                      configuration.MappedMaxIndex, |                      configuration.MappedMaxIndex, | ||||||
|                      configuration.MixedYearRelativePaths, |                      configuration.MixedYearRelativePaths, | ||||||
|                      configuration.ModelDirectory, |                      configuration.ModelDirectory, | ||||||
|  | |||||||
| @ -22,7 +22,6 @@ public class Configuration | |||||||
|     public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { init; get; } |     public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { init; get; } | ||||||
|     public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { init; get; } |     public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { init; get; } | ||||||
|     public bool LoadOrCreateThenSaveIndex { init; get; } |     public bool LoadOrCreateThenSaveIndex { init; get; } | ||||||
|     public int LocationConfidenceFactor { init; get; } |  | ||||||
|     public int? MappedMaxIndex { init; get; } |     public int? MappedMaxIndex { init; get; } | ||||||
|     public string[] MixedYearRelativePaths { init; get; } |     public string[] MixedYearRelativePaths { init; get; } | ||||||
|     public string ModelDirectory { init; get; } |     public string ModelDirectory { init; get; } | ||||||
| @ -66,7 +65,6 @@ public class Configuration | |||||||
|                          string[] loadOrCreateThenSaveDistanceResultsForOutputResolutions, |                          string[] loadOrCreateThenSaveDistanceResultsForOutputResolutions, | ||||||
|                          string[] loadOrCreateThenSaveImageFacesResultsForOutputResolutions, |                          string[] loadOrCreateThenSaveImageFacesResultsForOutputResolutions, | ||||||
|                          bool loadOrCreateThenSaveIndex, |                          bool loadOrCreateThenSaveIndex, | ||||||
|                          int locationConfidenceFactor, |  | ||||||
|                          int? mappedMaxIndex, |                          int? mappedMaxIndex, | ||||||
|                          string[] mixedYearRelativePaths, |                          string[] mixedYearRelativePaths, | ||||||
|                          string modelDirectory, |                          string modelDirectory, | ||||||
| @ -109,7 +107,6 @@ public class Configuration | |||||||
|         LoadOrCreateThenSaveDistanceResultsForOutputResolutions = loadOrCreateThenSaveDistanceResultsForOutputResolutions; |         LoadOrCreateThenSaveDistanceResultsForOutputResolutions = loadOrCreateThenSaveDistanceResultsForOutputResolutions; | ||||||
|         LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = loadOrCreateThenSaveImageFacesResultsForOutputResolutions; |         LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = loadOrCreateThenSaveImageFacesResultsForOutputResolutions; | ||||||
|         LoadOrCreateThenSaveIndex = loadOrCreateThenSaveIndex; |         LoadOrCreateThenSaveIndex = loadOrCreateThenSaveIndex; | ||||||
|         LocationConfidenceFactor = locationConfidenceFactor; |  | ||||||
|         MappedMaxIndex = mappedMaxIndex; |         MappedMaxIndex = mappedMaxIndex; | ||||||
|         MixedYearRelativePaths = mixedYearRelativePaths; |         MixedYearRelativePaths = mixedYearRelativePaths; | ||||||
|         ModelDirectory = modelDirectory; |         ModelDirectory = modelDirectory; | ||||||
|  | |||||||
| @ -33,9 +33,9 @@ public class D_Face | |||||||
|     private readonly int _NumberOfJitters; |     private readonly int _NumberOfJitters; | ||||||
|     private readonly Serilog.ILogger? _Log; |     private readonly Serilog.ILogger? _Log; | ||||||
|     private readonly bool _OverrideForFaceImages; |     private readonly bool _OverrideForFaceImages; | ||||||
|     private readonly bool _RetryImagesWithoutAFace; |  | ||||||
|     private readonly Configuration _Configuration; |     private readonly Configuration _Configuration; | ||||||
|     private readonly int _NumberOfTimesToUpsample; |     private readonly int _NumberOfTimesToUpsample; | ||||||
|  |     private readonly bool _RetryImagesWithoutAFace; | ||||||
|     private readonly ImageCodecInfo _ImageCodecInfo; |     private readonly ImageCodecInfo _ImageCodecInfo; | ||||||
|     private readonly ModelParameter _ModelParameter; |     private readonly ModelParameter _ModelParameter; | ||||||
|     private readonly PredictorModel _PredictorModel; |     private readonly PredictorModel _PredictorModel; | ||||||
| @ -45,7 +45,6 @@ public class D_Face | |||||||
|     private readonly int _FaceDistanceHiddenImageFactor; |     private readonly int _FaceDistanceHiddenImageFactor; | ||||||
|     private readonly EncoderParameters _EncoderParameters; |     private readonly EncoderParameters _EncoderParameters; | ||||||
|     private readonly ImageCodecInfo _HiddenImageCodecInfo; |     private readonly ImageCodecInfo _HiddenImageCodecInfo; | ||||||
|     private readonly int _FaceDistanceAreaPermilleTolerance; |  | ||||||
|     private readonly bool _ForceFaceLastWriteTimeToCreationTime; |     private readonly bool _ForceFaceLastWriteTimeToCreationTime; | ||||||
|     private readonly EncoderParameters _HiddenEncoderParameters; |     private readonly EncoderParameters _HiddenEncoderParameters; | ||||||
|     private readonly JsonSerializerOptions _WriteIndentedAndWhenWritingNull; |     private readonly JsonSerializerOptions _WriteIndentedAndWhenWritingNull; | ||||||
| @ -55,7 +54,6 @@ public class D_Face | |||||||
|         bool checkDFaceAndUpWriteDates, |         bool checkDFaceAndUpWriteDates, | ||||||
|         Configuration configuration, |         Configuration configuration, | ||||||
|         EncoderParameters encoderParameters, |         EncoderParameters encoderParameters, | ||||||
|         int faceDistanceAreaPermilleTolerance, |  | ||||||
|         int faceDistanceHiddenImageFactor, |         int faceDistanceHiddenImageFactor, | ||||||
|         string filenameExtension, |         string filenameExtension, | ||||||
|         bool forceFaceLastWriteTimeToCreationTime, |         bool forceFaceLastWriteTimeToCreationTime, | ||||||
| @ -88,7 +86,6 @@ public class D_Face | |||||||
|         _NumberOfTimesToUpsample = numberOfTimesToUpsample; |         _NumberOfTimesToUpsample = numberOfTimesToUpsample; | ||||||
|         _CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates; |         _CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates; | ||||||
|         _PropertiesChangedForFaces = propertiesChangedForFaces; |         _PropertiesChangedForFaces = propertiesChangedForFaces; | ||||||
|         _FaceDistanceAreaPermilleTolerance = faceDistanceAreaPermilleTolerance; |  | ||||||
|         _FaceDistanceHiddenImageFactor = faceDistanceHiddenImageFactor; |         _FaceDistanceHiddenImageFactor = faceDistanceHiddenImageFactor; | ||||||
|         _ForceFaceLastWriteTimeToCreationTime = forceFaceLastWriteTimeToCreationTime; |         _ForceFaceLastWriteTimeToCreationTime = forceFaceLastWriteTimeToCreationTime; | ||||||
|         (Model model, PredictorModel predictorModel, ModelParameter modelParameter) = GetModel(modelDirectory, modelName, predictorModelName); |         (Model model, PredictorModel predictorModel, ModelParameter modelParameter) = GetModel(modelDirectory, modelName, predictorModelName); | ||||||
|  | |||||||
| @ -80,7 +80,6 @@ public partial class DlibDotNet | |||||||
|                 configuration.CheckDFaceAndUpWriteDates, |                 configuration.CheckDFaceAndUpWriteDates, | ||||||
|                 configuration.PropertyConfiguration, |                 configuration.PropertyConfiguration, | ||||||
|                 encoderParameters, |                 encoderParameters, | ||||||
|                 configuration.FaceDistanceAreaPermilleTolerance, |  | ||||||
|                 configuration.FaceDistanceHiddenImageFactor, |                 configuration.FaceDistanceHiddenImageFactor, | ||||||
|                 filenameExtension, |                 filenameExtension, | ||||||
|                 configuration.ForceFaceLastWriteTimeToCreationTime, |                 configuration.ForceFaceLastWriteTimeToCreationTime, | ||||||
| @ -103,7 +102,7 @@ public partial class DlibDotNet | |||||||
|         } |         } | ||||||
|         _Metadata = new(configuration.ForceMetadataLastWriteTimeToCreationTime, configuration.PropertiesChangedForMetadata); |         _Metadata = new(configuration.ForceMetadataLastWriteTimeToCreationTime, configuration.PropertiesChangedForMetadata); | ||||||
|         _MapConfiguration = Get(configuration, _Faces.FileNameExtension, _Faces.HiddenFileNameExtension, _FaceParts.FileNameExtension); |         _MapConfiguration = Get(configuration, _Faces.FileNameExtension, _Faces.HiddenFileNameExtension, _FaceParts.FileNameExtension); | ||||||
|         _Distance = new(configuration.DistanceMoveUnableToMatch, configuration.DistancePixelDistanceTolerance, configuration.DistanceRenameToMatch, configuration.FaceDistanceTolerance); |         _Distance = new(configuration.DistanceMoveUnableToMatch, configuration.DistancePixelDistanceTolerance, configuration.DistanceRenameToMatch, _Configuration.FaceConfidencePercent, configuration.RangeDistanceTolerance, configuration.RangeFaceConfidence); | ||||||
|         if (_FirstRun || !_ArgZeroIsConfigurationRootDirectory) |         if (_FirstRun || !_ArgZeroIsConfigurationRootDirectory) | ||||||
|             personContainers = Array.Empty<PersonContainer>(); |             personContainers = Array.Empty<PersonContainer>(); | ||||||
|         else |         else | ||||||
| @ -217,8 +216,6 @@ public partial class DlibDotNet | |||||||
|             throw new Exception($"One or more {nameof(configuration.SaveShortcutsForOutputResolutions)} are not in the ValidResolutions list!"); |             throw new Exception($"One or more {nameof(configuration.SaveShortcutsForOutputResolutions)} are not in the ValidResolutions list!"); | ||||||
|         if ((from l in configuration.SaveFaceLandmarkForOutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any()) |         if ((from l in configuration.SaveFaceLandmarkForOutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any()) | ||||||
|             throw new Exception($"One or more {nameof(configuration.SaveFaceLandmarkForOutputResolutions)} are not in the ValidResolutions list!"); |             throw new Exception($"One or more {nameof(configuration.SaveFaceLandmarkForOutputResolutions)} are not in the ValidResolutions list!"); | ||||||
|         if (configuration.DistanceFactor + configuration.LocationConfidenceFactor != 10) |  | ||||||
|             throw new NullReferenceException(nameof(configuration.DistanceFactor)); |  | ||||||
|         if (string.IsNullOrEmpty(configuration.ModelName)) |         if (string.IsNullOrEmpty(configuration.ModelName)) | ||||||
|             throw new NullReferenceException(nameof(configuration.ModelName)); |             throw new NullReferenceException(nameof(configuration.ModelName)); | ||||||
|         if (string.IsNullOrEmpty(configuration.OutputExtension)) |         if (string.IsNullOrEmpty(configuration.OutputExtension)) | ||||||
| @ -266,12 +263,13 @@ public partial class DlibDotNet | |||||||
|     private static Map.Models.Configuration Get(Models.Configuration configuration, string facesFileNameExtension, string facesHiddenFileNameExtension, string facePartsFileNameExtension) |     private static Map.Models.Configuration Get(Models.Configuration configuration, string facesFileNameExtension, string facesHiddenFileNameExtension, string facePartsFileNameExtension) | ||||||
|     { |     { | ||||||
|         Map.Models.Configuration result = new( |         Map.Models.Configuration result = new( | ||||||
|  |             configuration.FaceConfidencePercent, | ||||||
|             configuration.FaceDistancePermyriad, |             configuration.FaceDistancePermyriad, | ||||||
|             configuration.FaceDistanceTolerance, |  | ||||||
|             configuration.MappingDefaultName, |             configuration.MappingDefaultName, | ||||||
|             configuration.PersonBirthdayFirstYear, |             configuration.PersonBirthdayFirstYear, | ||||||
|             configuration.PersonBirthdayFormat, |             configuration.PersonBirthdayFormat, | ||||||
|             configuration.SortingDaysDeltaTolerance, |             configuration.RangeDaysDeltaTolerance, | ||||||
|  |             configuration.RangeDistanceTolerance, | ||||||
|             configuration.SortingMaximumPerKey, |             configuration.SortingMaximumPerKey, | ||||||
|             configuration.SortingMinimumToUseSigma, |             configuration.SortingMinimumToUseSigma, | ||||||
|             facesFileNameExtension, |             facesFileNameExtension, | ||||||
| @ -782,9 +780,10 @@ public partial class DlibDotNet | |||||||
|         List<Item> items = new(); |         List<Item> items = new(); | ||||||
|         Shared.Models.Face[] faces; |         Shared.Models.Face[] faces; | ||||||
|         Mapping mapping; |         Mapping mapping; | ||||||
|         int areaPermille; |         int faceAreaPermille; | ||||||
|         bool? isWrongYear; |         bool? isWrongYear; | ||||||
|         Item[] filteredItems; |         Item[] filteredItems; | ||||||
|  |         int confidencePercent; | ||||||
|         DateTime minimumDateTime; |         DateTime minimumDateTime; | ||||||
|         int normalizedPixelPercentage; |         int normalizedPixelPercentage; | ||||||
|         string deterministicHashCodeKey; |         string deterministicHashCodeKey; | ||||||
| @ -820,10 +819,11 @@ public partial class DlibDotNet | |||||||
|                         break; |                         break; | ||||||
|                     if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null) |                     if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null) | ||||||
|                         continue; |                         continue; | ||||||
|                     areaPermille = Shared.Models.Stateless.Methods.IMapping.GetAreaPermille(face.Location, face.OutputResolution); |                     confidencePercent = Shared.Models.Stateless.Methods.ILocation.GetConfidencePercent(_Configuration.FaceConfidencePercent, _Configuration.RangeFaceConfidence, face.Location.Confidence); | ||||||
|  |                     faceAreaPermille = Shared.Models.Stateless.Methods.IMapping.GetAreaPermille(_Configuration.FaceAreaPermille, face.Location, face.OutputResolution); | ||||||
|                     normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(face.Location, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, face.OutputResolution); |                     normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(face.Location, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, face.OutputResolution); | ||||||
|                     deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(item.Property.Id.Value, face.Location, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, face.OutputResolution); |                     deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(item.Property.Id.Value, face.Location, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, face.OutputResolution); | ||||||
|                     mappingFromLocation = new(areaPermille, face.Location.Confidence, deterministicHashCodeKey, normalizedPixelPercentage); |                     mappingFromLocation = new(faceAreaPermille, confidencePercent, deterministicHashCodeKey, normalizedPixelPercentage); | ||||||
|                     mapping = new(mappingFromItem, mappingFromLocation); |                     mapping = new(mappingFromItem, mappingFromLocation); | ||||||
|                     face.SetMapping(mapping); |                     face.SetMapping(mapping); | ||||||
|                     collection.Add(face); |                     collection.Add(face); | ||||||
| @ -842,10 +842,10 @@ public partial class DlibDotNet | |||||||
|         (List<Item> filteredItems, Shared.Models.Face[] distinctFilteredFaces) = SetMappingThenGetDistinctFilteredFacesWithMapping(argZero, containers); |         (List<Item> filteredItems, Shared.Models.Face[] distinctFilteredFaces) = SetMappingThenGetDistinctFilteredFacesWithMapping(argZero, containers); | ||||||
|         Mapping[] mappingCollection = MapLogicSupport.GetSelectedMappingCollection(distinctFilteredFaces); |         Mapping[] mappingCollection = MapLogicSupport.GetSelectedMappingCollection(distinctFilteredFaces); | ||||||
|         MapLogicSupport mapLogicSupport = new( |         MapLogicSupport mapLogicSupport = new( | ||||||
|             _Configuration.FaceDistanceAreaPermilleTolerance, |             _Configuration.FaceConfidencePercent, | ||||||
|             _Configuration.FaceDistanceMinimumConfidence, |  | ||||||
|             _Configuration.FaceDistancePermyriad, |             _Configuration.FaceDistancePermyriad, | ||||||
|             _Configuration.SortingDaysDeltaTolerance, |             _Configuration.RangeDaysDeltaTolerance, | ||||||
|  |             _Configuration.RangeFaceAreaPermilleTolerance, | ||||||
|             _Configuration.SortingMaximumPerFaceShouldBeHigh); |             _Configuration.SortingMaximumPerFaceShouldBeHigh); | ||||||
|         MapLogic mapLogic = new( |         MapLogic mapLogic = new( | ||||||
|             _AppSettings.MaxDegreeOfParallelism, |             _AppSettings.MaxDegreeOfParallelism, | ||||||
| @ -859,13 +859,11 @@ public partial class DlibDotNet | |||||||
|             mapLogicSupport); |             mapLogicSupport); | ||||||
|         Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping = MapLogicSupport.GetIdToNormalizedPixelPercentageToFace(mappingCollection); |         Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping = MapLogicSupport.GetIdToNormalizedPixelPercentageToFace(mappingCollection); | ||||||
|         mapLogic.CopyManualFiles(dFacesContentDirectory, idToNormalizedPixelPercentageToMapping); |         mapLogic.CopyManualFiles(dFacesContentDirectory, idToNormalizedPixelPercentageToMapping); | ||||||
|         if (!_Configuration.SaveFaceDistancesForOutputResolutions.Contains(outputResolution)) |         if (_Configuration.SaveNotMappedForOutputResolutions.Contains(outputResolution)) | ||||||
|             mapLogic.CopyNotMappedFaces(_Configuration.FaceDistanceAreaPermilleTolerance, dFacesContentDirectory, idToNormalizedPixelPercentageToMapping); |             mapLogic.CopyNotMappedFaces(_Configuration.RangeFaceAreaPermilleTolerance, dFacesContentDirectory, idToNormalizedPixelPercentageToMapping); | ||||||
|         (Dictionary<long, int> personKeyToCount, int totalNotMapped) = mapLogic.AddToMapping(mappingCollection); |         (Dictionary<long, int> personKeyToCount, int totalNotMapped) = mapLogic.AddToMapping(mappingCollection); | ||||||
|         if (_Configuration.SaveMappedForOutputResolutions.Contains(outputResolution)) |         if (_Configuration.SaveMappedForOutputResolutions.Contains(outputResolution)) | ||||||
|             mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, personKeyToCount, totalNotMapped); |             mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, personKeyToCount, totalNotMapped); | ||||||
|         if (_Configuration.SaveNotMappedForOutputResolutions.Contains(outputResolution)) |  | ||||||
|             mapLogic.SaveNotMappedTicks(); |  | ||||||
|         if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution)) |         if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution)) | ||||||
|             mapLogic.SaveShortcuts(a2PeopleSingletonDirectory, personContainers, filteredItems, mappingCollection, personKeyToCount); |             mapLogic.SaveShortcuts(a2PeopleSingletonDirectory, personContainers, filteredItems, mappingCollection, personKeyToCount); | ||||||
|         if (_Configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions.Contains(outputResolution)) |         if (_Configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions.Contains(outputResolution)) | ||||||
| @ -887,6 +885,8 @@ public partial class DlibDotNet | |||||||
|             if (totalNotMapped > 0) |             if (totalNotMapped > 0) | ||||||
|                 mapLogic.UpdateFromSortingContainersThenSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, useFiltersCounter, sortingContainers, totalNotMapped); |                 mapLogic.UpdateFromSortingContainersThenSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, useFiltersCounter, sortingContainers, totalNotMapped); | ||||||
|         } |         } | ||||||
|  |         if (_Configuration.SaveNotMappedForOutputResolutions.Contains(outputResolution)) | ||||||
|  |             mapLogic.SaveNotMappedTicks(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static Container? AreAllSameEndsWith(string argZero, Container[] containers) |     private static Container? AreAllSameEndsWith(string argZero, Container[] containers) | ||||||
|  | |||||||
| @ -17,11 +17,10 @@ public class Configuration | |||||||
|     [Display(Name = "Distance Move Unable to Match by 1 Tick"), Required] public bool? DistanceMoveUnableToMatch { get; set; } |     [Display(Name = "Distance Move Unable to Match by 1 Tick"), Required] public bool? DistanceMoveUnableToMatch { get; set; } | ||||||
|     [Display(Name = "Distance Pixel Distance Tolerance"), Required] public int? DistancePixelDistanceTolerance { get; set; } |     [Display(Name = "Distance Pixel Distance Tolerance"), Required] public int? DistancePixelDistanceTolerance { get; set; } | ||||||
|     [Display(Name = "Distance Rename to Match"), Required] public bool? DistanceRenameToMatch { get; set; } |     [Display(Name = "Distance Rename to Match"), Required] public bool? DistanceRenameToMatch { get; set; } | ||||||
|     [Display(Name = "Face Area Permille Tolerance"), Required] public int? FaceDistanceAreaPermilleTolerance { get; set; } |     [Display(Name = "Face Area Permille"), Required] public int? FaceAreaPermille { get; set; } | ||||||
|     [Display(Name = "Face Distance Hidden Image Factor"), Required] public int? FaceDistanceHiddenImageFactor { get; set; } |     [Display(Name = "Face Distance Hidden Image Factor"), Required] public int? FaceDistanceHiddenImageFactor { get; set; } | ||||||
|     [Display(Name = "Location Minimum Confidence"), Required] public double? FaceDistanceMinimumConfidence { get; set; } |     [Display(Name = "Face Confidence Percent"), Required] public int? FaceConfidencePercent { get; set; } | ||||||
|     [Display(Name = "Face Distance Permyriad"), Required] public int? FaceDistancePermyriad { get; set; } |     [Display(Name = "Face Distance Permyriad"), Required] public int? FaceDistancePermyriad { get; set; } | ||||||
|     [Display(Name = "Face Distance Tolerance"), Required] public double? FaceDistanceTolerance { get; set; } |  | ||||||
|     [Display(Name = "Force Face Last Write Time to Creation Time"), Required] public bool? ForceFaceLastWriteTimeToCreationTime { get; set; } |     [Display(Name = "Force Face Last Write Time to Creation Time"), Required] public bool? ForceFaceLastWriteTimeToCreationTime { get; set; } | ||||||
|     [Display(Name = "Force Metadata Last Write Time to Creation Time"), Required] public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; } |     [Display(Name = "Force Metadata Last Write Time to Creation Time"), Required] public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; } | ||||||
|     [Display(Name = "Force Resize Last Write Time to Creation Time"), Required] public bool? ForceResizeLastWriteTimeToCreationTime { get; set; } |     [Display(Name = "Force Resize Last Write Time to Creation Time"), Required] public bool? ForceResizeLastWriteTimeToCreationTime { get; set; } | ||||||
| @ -31,7 +30,6 @@ public class Configuration | |||||||
|     [Display(Name = "Load Or Create Then Save Distance Results"), Required] public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; } |     [Display(Name = "Load Or Create Then Save Distance Results"), Required] public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Load Or Create Then Save Image Faces Results"), Required] public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; } |     [Display(Name = "Load Or Create Then Save Image Faces Results"), Required] public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Load Or Create Then Save Index"), Required] public bool? LoadOrCreateThenSaveIndex { get; set; } |     [Display(Name = "Load Or Create Then Save Index"), Required] public bool? LoadOrCreateThenSaveIndex { get; set; } | ||||||
|     [Display(Name = "Location Confidence Factor"), Required] public int? LocationConfidenceFactor { get; set; } |  | ||||||
|     [Display(Name = "Location Digits"), Required] public int? LocationDigits { get; set; } |     [Display(Name = "Location Digits"), Required] public int? LocationDigits { get; set; } | ||||||
|     [Display(Name = "Location Factor"), Required] public int? LocationFactor { get; set; } |     [Display(Name = "Location Factor"), Required] public int? LocationFactor { get; set; } | ||||||
|     [Display(Name = "Mapped Max Index"), Required] public int? MappedMaxIndex { get; set; } |     [Display(Name = "Mapped Max Index"), Required] public int? MappedMaxIndex { get; set; } | ||||||
| @ -59,18 +57,21 @@ public class Configuration | |||||||
|     [Display(Name = "Properties Changed For Metadata"), Required] public bool? PropertiesChangedForMetadata { get; set; } |     [Display(Name = "Properties Changed For Metadata"), Required] public bool? PropertiesChangedForMetadata { get; set; } | ||||||
|     [Display(Name = "Properties Changed For Resize"), Required] public bool? PropertiesChangedForResize { get; set; } |     [Display(Name = "Properties Changed For Resize"), Required] public bool? PropertiesChangedForResize { get; set; } | ||||||
|     [Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; } |     [Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; } | ||||||
|  |     [Display(Name = "Sorting Days Delta Tolerance"), Required] public int[] RangeDaysDeltaTolerance { get; set; } | ||||||
|  |     [Display(Name = "Face Area Permille Tolerance"), Required] public int[] RangeFaceAreaPermilleTolerance { get; set; } | ||||||
|  |     [Display(Name = "Location Minimum Confidence"), Required] public double[] RangeFaceConfidence { get; set; } | ||||||
|  |     [Display(Name = "Face Distance Tolerance"), Required] public double[] RangeDistanceTolerance { get; set; } | ||||||
|     [Display(Name = "Retry Images Without a Face"), Required] public bool? RetryImagesWithoutAFace { get; set; } |     [Display(Name = "Retry Images Without a Face"), Required] public bool? RetryImagesWithoutAFace { get; set; } | ||||||
|     [Display(Name = "Reverse"), Required] public bool? Reverse { get; set; } |     [Display(Name = "Reverse"), Required] public bool? Reverse { get; set; } | ||||||
|  |     [Display(Name = "Save Face Distances"), Required] public string[] SaveFaceDistancesForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; } |     [Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; } |     [Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; } | ||||||
|     [Display(Name = "Save Face Distances"), Required] public string[] SaveFaceDistancesForOutputResolutions { get; set; } |  | ||||||
|     [Display(Name = "Save Mapped"), Required] public string[] SaveMappedForOutputResolutions { get; set; } |     [Display(Name = "Save Mapped"), Required] public string[] SaveMappedForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Save Not Mapped"), Required] public string[] SaveNotMappedForOutputResolutions { 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[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { get; set; } |     [Display(Name = "Save Resized Images by Person Key Formatted"), Required] public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { 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 = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; } |     [Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; } | ||||||
|     [Display(Name = "Sorting Days Delta Tolerance"), Required] public int? SortingDaysDeltaTolerance { get; set; } |  | ||||||
|     [Display(Name = "SortingMaximumPerFaceShould be High"), Required] public int? SortingMaximumPerFaceShouldBeHigh { get; set; } |     [Display(Name = "SortingMaximumPerFaceShould be High"), Required] public int? SortingMaximumPerFaceShouldBeHigh { get; set; } | ||||||
|     [Display(Name = "Sorting Maximum Per Key"), Required] public int? SortingMaximumPerKey { get; set; } |     [Display(Name = "Sorting Maximum Per Key"), Required] public int? SortingMaximumPerKey { get; set; } | ||||||
|     [Display(Name = "Sorting Minimum to use Sigma"), Required] public int? SortingMinimumToUseSigma { get; set; } |     [Display(Name = "Sorting Minimum to use Sigma"), Required] public int? SortingMinimumToUseSigma { get; set; } | ||||||
| @ -102,16 +103,14 @@ public class Configuration | |||||||
|             throw new NullReferenceException(nameof(configuration.DistancePixelDistanceTolerance)); |             throw new NullReferenceException(nameof(configuration.DistancePixelDistanceTolerance)); | ||||||
|         if (configuration.DistanceRenameToMatch is null) |         if (configuration.DistanceRenameToMatch is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.DistanceRenameToMatch)); |             throw new NullReferenceException(nameof(configuration.DistanceRenameToMatch)); | ||||||
|         if (configuration.FaceDistanceAreaPermilleTolerance is null) |         if (configuration.FaceAreaPermille is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.FaceDistanceAreaPermilleTolerance)); |             throw new NullReferenceException(nameof(configuration.FaceAreaPermille)); | ||||||
|         if (configuration.FaceDistanceHiddenImageFactor is null) |         if (configuration.FaceDistanceHiddenImageFactor is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.FaceDistanceHiddenImageFactor)); |             throw new NullReferenceException(nameof(configuration.FaceDistanceHiddenImageFactor)); | ||||||
|         if (configuration.FaceDistanceMinimumConfidence is null) |         if (configuration.FaceConfidencePercent is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.FaceDistanceMinimumConfidence)); |             throw new NullReferenceException(nameof(configuration.FaceConfidencePercent)); | ||||||
|         if (configuration.FaceDistancePermyriad is null) |         if (configuration.FaceDistancePermyriad is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.FaceDistancePermyriad)); |             throw new NullReferenceException(nameof(configuration.FaceDistancePermyriad)); | ||||||
|         if (configuration.FaceDistanceTolerance is null) |  | ||||||
|             throw new NullReferenceException(nameof(configuration.FaceDistanceTolerance)); |  | ||||||
|         if (configuration.ForceFaceLastWriteTimeToCreationTime is null) |         if (configuration.ForceFaceLastWriteTimeToCreationTime is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.ForceFaceLastWriteTimeToCreationTime)); |             throw new NullReferenceException(nameof(configuration.ForceFaceLastWriteTimeToCreationTime)); | ||||||
|         if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) |         if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) | ||||||
| @ -128,8 +127,6 @@ public class Configuration | |||||||
|             configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>(); |             configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>(); | ||||||
|         if (configuration.LoadOrCreateThenSaveIndex is null) |         if (configuration.LoadOrCreateThenSaveIndex is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveIndex)); |             throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveIndex)); | ||||||
|         if (configuration.LocationConfidenceFactor is null) |  | ||||||
|             throw new NullReferenceException(nameof(configuration.LocationConfidenceFactor)); |  | ||||||
|         if (configuration.LocationDigits is null) |         if (configuration.LocationDigits is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.LocationDigits)); |             throw new NullReferenceException(nameof(configuration.LocationDigits)); | ||||||
|         if (configuration.LocationFactor is null) |         if (configuration.LocationFactor is null) | ||||||
| @ -172,20 +169,28 @@ public class Configuration | |||||||
|             throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata)); |             throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata)); | ||||||
|         if (configuration.PropertiesChangedForResize is null) |         if (configuration.PropertiesChangedForResize is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize)); |             throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize)); | ||||||
|  |         if (configuration.RangeDaysDeltaTolerance is null || configuration.RangeDaysDeltaTolerance.Length != 3) | ||||||
|  |             throw new NullReferenceException(nameof(configuration.RangeDaysDeltaTolerance)); | ||||||
|  |         if (configuration.RangeFaceAreaPermilleTolerance is null || configuration.RangeFaceAreaPermilleTolerance.Length != 3) | ||||||
|  |             throw new NullReferenceException(nameof(configuration.RangeFaceAreaPermilleTolerance)); | ||||||
|  |         if (configuration.RangeFaceConfidence is null || configuration.RangeFaceConfidence.Length != 3) | ||||||
|  |             throw new NullReferenceException(nameof(configuration.RangeFaceConfidence)); | ||||||
|  |         if (configuration.RangeDistanceTolerance is null || configuration.RangeDistanceTolerance.Length != 3) | ||||||
|  |             throw new NullReferenceException(nameof(configuration.RangeDistanceTolerance)); | ||||||
|         if (configuration.RetryImagesWithoutAFace is null) |         if (configuration.RetryImagesWithoutAFace is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.RetryImagesWithoutAFace)); |             throw new NullReferenceException(nameof(configuration.RetryImagesWithoutAFace)); | ||||||
|         if (configuration.Reverse is null) |         if (configuration.Reverse is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.Reverse)); |             throw new NullReferenceException(nameof(configuration.Reverse)); | ||||||
|         if (configuration.SaveFaceLandmarkForOutputResolutions is null) |  | ||||||
|             configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>(); |  | ||||||
|         if (configuration.SaveFaceDistancesForOutputResolutions is null) |         if (configuration.SaveFaceDistancesForOutputResolutions is null) | ||||||
|             configuration.SaveFaceDistancesForOutputResolutions = Array.Empty<string>(); |             configuration.SaveFaceDistancesForOutputResolutions = Array.Empty<string>(); | ||||||
|  |         if (configuration.SaveFaceLandmarkForOutputResolutions is null) | ||||||
|  |             configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>(); | ||||||
|  |         if (configuration.SaveFullYearOfRandomFiles is null) | ||||||
|  |             throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles)); | ||||||
|         if (configuration.SaveMappedForOutputResolutions is null) |         if (configuration.SaveMappedForOutputResolutions is null) | ||||||
|             configuration.SaveMappedForOutputResolutions = Array.Empty<string>(); |             configuration.SaveMappedForOutputResolutions = Array.Empty<string>(); | ||||||
|         if (configuration.SaveNotMappedForOutputResolutions is null) |         if (configuration.SaveNotMappedForOutputResolutions is null) | ||||||
|             configuration.SaveNotMappedForOutputResolutions = Array.Empty<string>(); |             configuration.SaveNotMappedForOutputResolutions = Array.Empty<string>(); | ||||||
|         if (configuration.SaveFullYearOfRandomFiles is null) |  | ||||||
|             throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles)); |  | ||||||
|         if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null) |         if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null) | ||||||
|             configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>(); |             configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>(); | ||||||
|         if (configuration.SaveResizedSubfiles is null) |         if (configuration.SaveResizedSubfiles is null) | ||||||
| @ -196,8 +201,6 @@ public class Configuration | |||||||
|             configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>(); |             configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>(); | ||||||
|         if (configuration.SkipSearch is null) |         if (configuration.SkipSearch is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.SkipSearch)); |             throw new NullReferenceException(nameof(configuration.SkipSearch)); | ||||||
|         if (configuration.SortingDaysDeltaTolerance is null) |  | ||||||
|             throw new NullReferenceException(nameof(configuration.SortingDaysDeltaTolerance)); |  | ||||||
|         if (configuration.SortingMaximumPerFaceShouldBeHigh is null) |         if (configuration.SortingMaximumPerFaceShouldBeHigh is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.SortingMaximumPerFaceShouldBeHigh)); |             throw new NullReferenceException(nameof(configuration.SortingMaximumPerFaceShouldBeHigh)); | ||||||
|         if (configuration.SortingMaximumPerKey is null) |         if (configuration.SortingMaximumPerKey is null) | ||||||
| @ -208,7 +211,7 @@ public class Configuration | |||||||
|             throw new NullReferenceException(nameof(configuration.TestDistanceResults)); |             throw new NullReferenceException(nameof(configuration.TestDistanceResults)); | ||||||
|         if (configuration.ValidResolutions is null) |         if (configuration.ValidResolutions is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.ValidResolutions)); |             throw new NullReferenceException(nameof(configuration.ValidResolutions)); | ||||||
|         _ = DateTime.Now.AddDays(-configuration.SortingDaysDeltaTolerance.Value); |         _ = DateTime.Now.AddDays(-configuration.RangeDaysDeltaTolerance[1]); | ||||||
|         result = new(configuration.PropertyConfiguration, |         result = new(configuration.PropertyConfiguration, | ||||||
|                      configuration.CheckDFaceAndUpWriteDates.Value, |                      configuration.CheckDFaceAndUpWriteDates.Value, | ||||||
|                      configuration.CheckJsonForDistanceResults.Value, |                      configuration.CheckJsonForDistanceResults.Value, | ||||||
| @ -217,11 +220,10 @@ public class Configuration | |||||||
|                      configuration.DistanceMoveUnableToMatch.Value, |                      configuration.DistanceMoveUnableToMatch.Value, | ||||||
|                      configuration.DistancePixelDistanceTolerance.Value, |                      configuration.DistancePixelDistanceTolerance.Value, | ||||||
|                      configuration.DistanceRenameToMatch.Value, |                      configuration.DistanceRenameToMatch.Value, | ||||||
|                      configuration.FaceDistanceAreaPermilleTolerance.Value, |                      configuration.FaceAreaPermille.Value, | ||||||
|                      configuration.FaceDistanceHiddenImageFactor.Value, |                      configuration.FaceDistanceHiddenImageFactor.Value, | ||||||
|                      configuration.FaceDistanceMinimumConfidence.Value, |                      configuration.FaceConfidencePercent.Value, | ||||||
|                      configuration.FaceDistancePermyriad.Value, |                      configuration.FaceDistancePermyriad.Value, | ||||||
|                      configuration.FaceDistanceTolerance.Value, |  | ||||||
|                      configuration.ForceFaceLastWriteTimeToCreationTime.Value, |                      configuration.ForceFaceLastWriteTimeToCreationTime.Value, | ||||||
|                      configuration.ForceMetadataLastWriteTimeToCreationTime.Value, |                      configuration.ForceMetadataLastWriteTimeToCreationTime.Value, | ||||||
|                      configuration.ForceResizeLastWriteTimeToCreationTime.Value, |                      configuration.ForceResizeLastWriteTimeToCreationTime.Value, | ||||||
| @ -231,7 +233,6 @@ public class Configuration | |||||||
|                      configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions, |                      configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions, | ||||||
|                      configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions, |                      configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions, | ||||||
|                      configuration.LoadOrCreateThenSaveIndex.Value, |                      configuration.LoadOrCreateThenSaveIndex.Value, | ||||||
|                      configuration.LocationConfidenceFactor.Value, |  | ||||||
|                      configuration.LocationDigits.Value, |                      configuration.LocationDigits.Value, | ||||||
|                      configuration.LocationFactor.Value, |                      configuration.LocationFactor.Value, | ||||||
|                      configuration.MappedMaxIndex, |                      configuration.MappedMaxIndex, | ||||||
| @ -258,18 +259,21 @@ public class Configuration | |||||||
|                      configuration.PropertiesChangedForIndex.Value, |                      configuration.PropertiesChangedForIndex.Value, | ||||||
|                      configuration.PropertiesChangedForMetadata.Value, |                      configuration.PropertiesChangedForMetadata.Value, | ||||||
|                      configuration.PropertiesChangedForResize.Value, |                      configuration.PropertiesChangedForResize.Value, | ||||||
|  |                      configuration.RangeDaysDeltaTolerance, | ||||||
|  |                      configuration.RangeFaceAreaPermilleTolerance, | ||||||
|  |                      configuration.RangeFaceConfidence, | ||||||
|  |                      configuration.RangeDistanceTolerance, | ||||||
|                      configuration.RetryImagesWithoutAFace.Value, |                      configuration.RetryImagesWithoutAFace.Value, | ||||||
|                      configuration.Reverse.Value, |                      configuration.Reverse.Value, | ||||||
|  |                      configuration.SaveFaceDistancesForOutputResolutions, | ||||||
|                      configuration.SaveFaceLandmarkForOutputResolutions, |                      configuration.SaveFaceLandmarkForOutputResolutions, | ||||||
|                      configuration.SaveFullYearOfRandomFiles.Value, |                      configuration.SaveFullYearOfRandomFiles.Value, | ||||||
|                      configuration.SaveFaceDistancesForOutputResolutions, |  | ||||||
|                      configuration.SaveMappedForOutputResolutions, |                      configuration.SaveMappedForOutputResolutions, | ||||||
|                      configuration.SaveNotMappedForOutputResolutions, |                      configuration.SaveNotMappedForOutputResolutions, | ||||||
|                      configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions, |                      configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions, | ||||||
|                      configuration.SaveResizedSubfiles.Value, |                      configuration.SaveResizedSubfiles.Value, | ||||||
|                      configuration.SaveShortcutsForOutputResolutions, |                      configuration.SaveShortcutsForOutputResolutions, | ||||||
|                      configuration.SkipSearch.Value, |                      configuration.SkipSearch.Value, | ||||||
|                      configuration.SortingDaysDeltaTolerance.Value, |  | ||||||
|                      configuration.SortingMaximumPerFaceShouldBeHigh.Value, |                      configuration.SortingMaximumPerFaceShouldBeHigh.Value, | ||||||
|                      configuration.SortingMaximumPerKey.Value, |                      configuration.SortingMaximumPerKey.Value, | ||||||
|                      configuration.SortingMinimumToUseSigma.Value, |                      configuration.SortingMinimumToUseSigma.Value, | ||||||
|  | |||||||
| @ -16,11 +16,10 @@ public class Configuration | |||||||
|     public bool DistanceMoveUnableToMatch { init; get; } |     public bool DistanceMoveUnableToMatch { init; get; } | ||||||
|     public int DistancePixelDistanceTolerance { init; get; } |     public int DistancePixelDistanceTolerance { init; get; } | ||||||
|     public bool DistanceRenameToMatch { init; get; } |     public bool DistanceRenameToMatch { init; get; } | ||||||
|     public int FaceDistanceAreaPermilleTolerance { init; get; } |     public int FaceAreaPermille { init; get; } | ||||||
|     public int FaceDistanceHiddenImageFactor { init; get; } |     public int FaceDistanceHiddenImageFactor { init; get; } | ||||||
|     public double FaceDistanceMinimumConfidence { init; get; } |     public int FaceConfidencePercent { init; get; } | ||||||
|     public int FaceDistancePermyriad { init; get; } |     public int FaceDistancePermyriad { init; get; } | ||||||
|     public double FaceDistanceTolerance { init; get; } |  | ||||||
|     public bool ForceFaceLastWriteTimeToCreationTime { init; get; } |     public bool ForceFaceLastWriteTimeToCreationTime { init; get; } | ||||||
|     public bool ForceMetadataLastWriteTimeToCreationTime { init; get; } |     public bool ForceMetadataLastWriteTimeToCreationTime { init; get; } | ||||||
|     public bool ForceResizeLastWriteTimeToCreationTime { init; get; } |     public bool ForceResizeLastWriteTimeToCreationTime { init; get; } | ||||||
| @ -30,7 +29,6 @@ public class Configuration | |||||||
|     public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { init; get; } |     public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { init; get; } | ||||||
|     public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { init; get; } |     public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { init; get; } | ||||||
|     public bool LoadOrCreateThenSaveIndex { init; get; } |     public bool LoadOrCreateThenSaveIndex { init; get; } | ||||||
|     public int LocationConfidenceFactor { init; get; } |  | ||||||
|     public int LocationDigits { init; get; } |     public int LocationDigits { init; get; } | ||||||
|     public int LocationFactor { init; get; } |     public int LocationFactor { init; get; } | ||||||
|     public int? MappedMaxIndex { init; get; } |     public int? MappedMaxIndex { init; get; } | ||||||
| @ -57,18 +55,21 @@ public class Configuration | |||||||
|     public bool PropertiesChangedForIndex { init; get; } |     public bool PropertiesChangedForIndex { init; get; } | ||||||
|     public bool PropertiesChangedForMetadata { init; get; } |     public bool PropertiesChangedForMetadata { init; get; } | ||||||
|     public bool PropertiesChangedForResize { init; get; } |     public bool PropertiesChangedForResize { init; get; } | ||||||
|  |     public int[] RangeDaysDeltaTolerance { init; get; } | ||||||
|  |     public int[] RangeFaceAreaPermilleTolerance { init; get; } | ||||||
|  |     public double[] RangeFaceConfidence { init; get; } | ||||||
|  |     public double[] RangeDistanceTolerance { init; get; } | ||||||
|     public bool RetryImagesWithoutAFace { init; get; } |     public bool RetryImagesWithoutAFace { init; get; } | ||||||
|     public bool Reverse { init; get; } |     public bool Reverse { init; get; } | ||||||
|  |     public string[] SaveFaceDistancesForOutputResolutions { init; get; } | ||||||
|     public string[] SaveFaceLandmarkForOutputResolutions { init; get; } |     public string[] SaveFaceLandmarkForOutputResolutions { init; get; } | ||||||
|     public bool SaveFullYearOfRandomFiles { init; get; } |     public bool SaveFullYearOfRandomFiles { init; get; } | ||||||
|     public string[] SaveFaceDistancesForOutputResolutions { init; get; } |  | ||||||
|     public string[] SaveMappedForOutputResolutions { init; get; } |     public string[] SaveMappedForOutputResolutions { init; get; } | ||||||
|     public string[] SaveNotMappedForOutputResolutions { init; get; } |     public string[] SaveNotMappedForOutputResolutions { init; get; } | ||||||
|     public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { init; get; } |     public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { init; get; } | ||||||
|     public bool SaveResizedSubfiles { init; get; } |     public bool SaveResizedSubfiles { init; get; } | ||||||
|     public string[] SaveShortcutsForOutputResolutions { init; get; } |     public string[] SaveShortcutsForOutputResolutions { init; get; } | ||||||
|     public bool SkipSearch { init; get; } |     public bool SkipSearch { init; get; } | ||||||
|     public int SortingDaysDeltaTolerance { init; get; } |  | ||||||
|     public int SortingMaximumPerFaceShouldBeHigh { init; get; } |     public int SortingMaximumPerFaceShouldBeHigh { init; get; } | ||||||
|     public int SortingMaximumPerKey { init; get; } |     public int SortingMaximumPerKey { init; get; } | ||||||
|     public int SortingMinimumToUseSigma { init; get; } |     public int SortingMinimumToUseSigma { init; get; } | ||||||
| @ -84,11 +85,10 @@ public class Configuration | |||||||
|                          bool distanceMoveUnableToMatch, |                          bool distanceMoveUnableToMatch, | ||||||
|                          int distancePixelDistanceTolerance, |                          int distancePixelDistanceTolerance, | ||||||
|                          bool distanceRenameToMatch, |                          bool distanceRenameToMatch, | ||||||
|                          int faceDistanceAreaPermilleTolerance, |                          int faceAreaPermille, | ||||||
|                          int faceDistanceHiddenImageFactor, |                          int faceDistanceHiddenImageFactor, | ||||||
|                          double faceDistanceMinimumConfidence, |                          int faceConfidencePercent, | ||||||
|                          int faceDistancePermyriad, |                          int faceDistancePermyriad, | ||||||
|                          double faceDistanceTolerance, |  | ||||||
|                          bool forceFaceLastWriteTimeToCreationTime, |                          bool forceFaceLastWriteTimeToCreationTime, | ||||||
|                          bool forceMetadataLastWriteTimeToCreationTime, |                          bool forceMetadataLastWriteTimeToCreationTime, | ||||||
|                          bool forceResizeLastWriteTimeToCreationTime, |                          bool forceResizeLastWriteTimeToCreationTime, | ||||||
| @ -98,7 +98,6 @@ public class Configuration | |||||||
|                          string[] loadOrCreateThenSaveDistanceResultsForOutputResolutions, |                          string[] loadOrCreateThenSaveDistanceResultsForOutputResolutions, | ||||||
|                          string[] loadOrCreateThenSaveImageFacesResultsForOutputResolutions, |                          string[] loadOrCreateThenSaveImageFacesResultsForOutputResolutions, | ||||||
|                          bool loadOrCreateThenSaveIndex, |                          bool loadOrCreateThenSaveIndex, | ||||||
|                          int locationConfidenceFactor, |  | ||||||
|                          int locationDigits, |                          int locationDigits, | ||||||
|                          int locationFactor, |                          int locationFactor, | ||||||
|                          int? mappedMaxIndex, |                          int? mappedMaxIndex, | ||||||
| @ -125,18 +124,21 @@ public class Configuration | |||||||
|                          bool propertiesChangedForIndex, |                          bool propertiesChangedForIndex, | ||||||
|                          bool propertiesChangedForMetadata, |                          bool propertiesChangedForMetadata, | ||||||
|                          bool propertiesChangedForResize, |                          bool propertiesChangedForResize, | ||||||
|  |                          int[] rangeDaysDeltaTolerance, | ||||||
|  |                          int[] rangeFaceAreaPermilleTolerance, | ||||||
|  |                          double[] rangeFaceConfidence, | ||||||
|  |                          double[] rangeDistanceTolerance, | ||||||
|                          bool retryImagesWithoutAFace, |                          bool retryImagesWithoutAFace, | ||||||
|                          bool reverse, |                          bool reverse, | ||||||
|  |                          string[] saveFaceDistancesForOutputResolutions, | ||||||
|                          string[] saveFaceLandmarkForOutputResolutions, |                          string[] saveFaceLandmarkForOutputResolutions, | ||||||
|                          bool saveFullYearOfRandomFiles, |                          bool saveFullYearOfRandomFiles, | ||||||
|                          string[] saveFaceDistancesForOutputResolutions, |  | ||||||
|                          string[] saveMappedForOutputResolutions, |                          string[] saveMappedForOutputResolutions, | ||||||
|                          string[] saveNotMappedForOutputResolutions, |                          string[] saveNotMappedForOutputResolutions, | ||||||
|                          string[] saveResizedImagesByPersonKeyFormattedForOutputResolutions, |                          string[] saveResizedImagesByPersonKeyFormattedForOutputResolutions, | ||||||
|                          bool saveResizedSubfiles, |                          bool saveResizedSubfiles, | ||||||
|                          string[] saveShortcutsForOutputResolutions, |                          string[] saveShortcutsForOutputResolutions, | ||||||
|                          bool skipSearch, |                          bool skipSearch, | ||||||
|                          int sortingDaysDeltaTolerance, |  | ||||||
|                          int sortingMaximumPerFaceShouldBeHigh, |                          int sortingMaximumPerFaceShouldBeHigh, | ||||||
|                          int sortingMaximumPerKey, |                          int sortingMaximumPerKey, | ||||||
|                          int sortingSigma, |                          int sortingSigma, | ||||||
| @ -151,11 +153,10 @@ public class Configuration | |||||||
|         DistanceMoveUnableToMatch = distanceMoveUnableToMatch; |         DistanceMoveUnableToMatch = distanceMoveUnableToMatch; | ||||||
|         DistancePixelDistanceTolerance = distancePixelDistanceTolerance; |         DistancePixelDistanceTolerance = distancePixelDistanceTolerance; | ||||||
|         DistanceRenameToMatch = distanceRenameToMatch; |         DistanceRenameToMatch = distanceRenameToMatch; | ||||||
|         FaceDistanceAreaPermilleTolerance = faceDistanceAreaPermilleTolerance; |         FaceAreaPermille = faceAreaPermille; | ||||||
|         FaceDistanceHiddenImageFactor = faceDistanceHiddenImageFactor; |         FaceDistanceHiddenImageFactor = faceDistanceHiddenImageFactor; | ||||||
|         FaceDistanceMinimumConfidence = faceDistanceMinimumConfidence; |         FaceConfidencePercent = faceConfidencePercent; | ||||||
|         FaceDistancePermyriad = faceDistancePermyriad; |         FaceDistancePermyriad = faceDistancePermyriad; | ||||||
|         FaceDistanceTolerance = faceDistanceTolerance; |  | ||||||
|         ForceFaceLastWriteTimeToCreationTime = forceFaceLastWriteTimeToCreationTime; |         ForceFaceLastWriteTimeToCreationTime = forceFaceLastWriteTimeToCreationTime; | ||||||
|         ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime; |         ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime; | ||||||
|         ForceResizeLastWriteTimeToCreationTime = forceResizeLastWriteTimeToCreationTime; |         ForceResizeLastWriteTimeToCreationTime = forceResizeLastWriteTimeToCreationTime; | ||||||
| @ -165,7 +166,6 @@ public class Configuration | |||||||
|         LoadOrCreateThenSaveDistanceResultsForOutputResolutions = loadOrCreateThenSaveDistanceResultsForOutputResolutions; |         LoadOrCreateThenSaveDistanceResultsForOutputResolutions = loadOrCreateThenSaveDistanceResultsForOutputResolutions; | ||||||
|         LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = loadOrCreateThenSaveImageFacesResultsForOutputResolutions; |         LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = loadOrCreateThenSaveImageFacesResultsForOutputResolutions; | ||||||
|         LoadOrCreateThenSaveIndex = loadOrCreateThenSaveIndex; |         LoadOrCreateThenSaveIndex = loadOrCreateThenSaveIndex; | ||||||
|         LocationConfidenceFactor = locationConfidenceFactor; |  | ||||||
|         LocationDigits = locationDigits; |         LocationDigits = locationDigits; | ||||||
|         LocationFactor = locationFactor; |         LocationFactor = locationFactor; | ||||||
|         MappedMaxIndex = mappedMaxIndex; |         MappedMaxIndex = mappedMaxIndex; | ||||||
| @ -192,18 +192,21 @@ public class Configuration | |||||||
|         PropertiesChangedForIndex = propertiesChangedForIndex; |         PropertiesChangedForIndex = propertiesChangedForIndex; | ||||||
|         PropertiesChangedForMetadata = propertiesChangedForMetadata; |         PropertiesChangedForMetadata = propertiesChangedForMetadata; | ||||||
|         PropertiesChangedForResize = propertiesChangedForResize; |         PropertiesChangedForResize = propertiesChangedForResize; | ||||||
|  |         RangeDaysDeltaTolerance = rangeDaysDeltaTolerance; | ||||||
|  |         RangeFaceAreaPermilleTolerance = rangeFaceAreaPermilleTolerance; | ||||||
|  |         RangeFaceConfidence = rangeFaceConfidence; | ||||||
|  |         RangeDistanceTolerance = rangeDistanceTolerance; | ||||||
|         RetryImagesWithoutAFace = retryImagesWithoutAFace; |         RetryImagesWithoutAFace = retryImagesWithoutAFace; | ||||||
|         Reverse = reverse; |         Reverse = reverse; | ||||||
|  |         SaveFaceDistancesForOutputResolutions = saveFaceDistancesForOutputResolutions; | ||||||
|         SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions; |         SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions; | ||||||
|         SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles; |         SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles; | ||||||
|         SaveFaceDistancesForOutputResolutions = saveFaceDistancesForOutputResolutions; |  | ||||||
|         SaveMappedForOutputResolutions = saveMappedForOutputResolutions; |         SaveMappedForOutputResolutions = saveMappedForOutputResolutions; | ||||||
|         SaveNotMappedForOutputResolutions = saveNotMappedForOutputResolutions; |         SaveNotMappedForOutputResolutions = saveNotMappedForOutputResolutions; | ||||||
|         SaveResizedImagesByPersonKeyFormattedForOutputResolutions = saveResizedImagesByPersonKeyFormattedForOutputResolutions; |         SaveResizedImagesByPersonKeyFormattedForOutputResolutions = saveResizedImagesByPersonKeyFormattedForOutputResolutions; | ||||||
|         SaveResizedSubfiles = saveResizedSubfiles; |         SaveResizedSubfiles = saveResizedSubfiles; | ||||||
|         SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions; |         SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions; | ||||||
|         SkipSearch = skipSearch; |         SkipSearch = skipSearch; | ||||||
|         SortingDaysDeltaTolerance = sortingDaysDeltaTolerance; |  | ||||||
|         SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh; |         SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh; | ||||||
|         SortingMaximumPerKey = sortingMaximumPerKey; |         SortingMaximumPerKey = sortingMaximumPerKey; | ||||||
|         SortingMinimumToUseSigma = sortingSigma; |         SortingMinimumToUseSigma = sortingSigma; | ||||||
|  | |||||||
| @ -58,18 +58,16 @@ | |||||||
|       "DistanceMoveUnableToMatch": false, |       "DistanceMoveUnableToMatch": false, | ||||||
|       "DistancePixelDistanceTolerance": 1, |       "DistancePixelDistanceTolerance": 1, | ||||||
|       "DistanceRenameToMatch": false, |       "DistanceRenameToMatch": false, | ||||||
|       "FaceDistanceAreaPermilleTolerance": 7, |       "FaceAreaPermille": 1000, | ||||||
|       "FaceDistanceHiddenImageFactor": 2, |       "FaceDistanceHiddenImageFactor": 2, | ||||||
|       "FaceDistanceMinimumConfidence": 0.8, |       "FaceConfidencePercent": 100, | ||||||
|       "FaceDistancePermyriad": 10000, |       "FaceDistancePermyriad": 10000, | ||||||
|       "FaceDistanceTolerance": 0.25, |  | ||||||
|       "FileNameDirectorySeparator": ".Z.", |       "FileNameDirectorySeparator": ".Z.", | ||||||
|       "ForceFaceLastWriteTimeToCreationTime": false, |       "ForceFaceLastWriteTimeToCreationTime": false, | ||||||
|       "ForceMetadataLastWriteTimeToCreationTime": false, |       "ForceMetadataLastWriteTimeToCreationTime": false, | ||||||
|       "ForcePropertyLastWriteTimeToCreationTime": false, |       "ForcePropertyLastWriteTimeToCreationTime": false, | ||||||
|       "ForceResizeLastWriteTimeToCreationTime": false, |       "ForceResizeLastWriteTimeToCreationTime": false, | ||||||
|       "LoadOrCreateThenSaveIndex": false, |       "LoadOrCreateThenSaveIndex": false, | ||||||
|       "LocationConfidenceFactor": 2, |  | ||||||
|       "LocationDigits": 9, |       "LocationDigits": 9, | ||||||
|       "LocationFactor": 10000, |       "LocationFactor": 10000, | ||||||
|       "MappedMaxIndex": 1034720, |       "MappedMaxIndex": 1034720, | ||||||
| @ -111,8 +109,7 @@ | |||||||
|       "SaveFullYearOfRandomFiles": true, |       "SaveFullYearOfRandomFiles": true, | ||||||
|       "SaveResizedSubFiles": true, |       "SaveResizedSubFiles": true, | ||||||
|       "SkipSearch": false, |       "SkipSearch": false, | ||||||
|       "SortingDaysDeltaTolerance": 700, |       "SortingMaximumPerFaceShouldBeHigh": 3000, | ||||||
|       "SortingMaximumPerFaceShouldBeHigh": 1000, |  | ||||||
|       "SortingMaximumPerKey": 7, |       "SortingMaximumPerKey": 7, | ||||||
|       "SortingMinimumToUseSigma": 10, |       "SortingMinimumToUseSigma": 10, | ||||||
|       "TestDistanceResults": true, |       "TestDistanceResults": true, | ||||||
| @ -137,6 +134,26 @@ | |||||||
|         "7680 x 4320" |         "7680 x 4320" | ||||||
|       ], |       ], | ||||||
|       "PropertyContentCollectionFiles": [], |       "PropertyContentCollectionFiles": [], | ||||||
|  |       "RangeDaysDeltaTolerance": [ | ||||||
|  |         0, | ||||||
|  |         700, | ||||||
|  |         123456 | ||||||
|  |       ], | ||||||
|  |       "RangeDistanceTolerance": [ | ||||||
|  |         0, | ||||||
|  |         0.4, | ||||||
|  |         0.6 | ||||||
|  |       ], | ||||||
|  |       "RangeFaceAreaPermilleTolerance": [ | ||||||
|  |         0, | ||||||
|  |         10, | ||||||
|  |         1000 | ||||||
|  |       ], | ||||||
|  |       "RangeFaceConfidence": [ | ||||||
|  |         0.8, | ||||||
|  |         0.2, | ||||||
|  |         100 | ||||||
|  |       ], | ||||||
|       "SaveFaceLandmarkForOutputResolutions": [ |       "SaveFaceLandmarkForOutputResolutions": [ | ||||||
|         "176 x 176", |         "176 x 176", | ||||||
|         "256 x 256" |         "256 x 256" | ||||||
|  | |||||||
| @ -58,18 +58,16 @@ | |||||||
|       "DistanceMoveUnableToMatch": false, |       "DistanceMoveUnableToMatch": false, | ||||||
|       "DistancePixelDistanceTolerance": 1, |       "DistancePixelDistanceTolerance": 1, | ||||||
|       "DistanceRenameToMatch": false, |       "DistanceRenameToMatch": false, | ||||||
|       "FaceDistanceAreaPermilleTolerance": 250, |       "FaceAreaPermille": 1000, | ||||||
|       "FaceDistanceHiddenImageFactor": 2, |       "FaceDistanceHiddenImageFactor": 2, | ||||||
|       "FaceDistanceMinimumConfidence": 0.8, |       "FaceConfidencePercent": 100, | ||||||
|       "FaceDistancePermyriad": 10000, |       "FaceDistancePermyriad": 10000, | ||||||
|       "FaceDistanceTolerance": 0.25, |  | ||||||
|       "FileNameDirectorySeparator": ".Z.", |       "FileNameDirectorySeparator": ".Z.", | ||||||
|       "ForceFaceLastWriteTimeToCreationTime": false, |       "ForceFaceLastWriteTimeToCreationTime": false, | ||||||
|       "ForceMetadataLastWriteTimeToCreationTime": false, |       "ForceMetadataLastWriteTimeToCreationTime": false, | ||||||
|       "ForcePropertyLastWriteTimeToCreationTime": false, |       "ForcePropertyLastWriteTimeToCreationTime": false, | ||||||
|       "ForceResizeLastWriteTimeToCreationTime": false, |       "ForceResizeLastWriteTimeToCreationTime": false, | ||||||
|       "LoadOrCreateThenSaveIndex": false, |       "LoadOrCreateThenSaveIndex": false, | ||||||
|       "LocationConfidenceFactor": 2, |  | ||||||
|       "LocationDigits": 9, |       "LocationDigits": 9, | ||||||
|       "LocationFactor": 10000, |       "LocationFactor": 10000, | ||||||
|       "MappedMaxIndex": 1034720, |       "MappedMaxIndex": 1034720, | ||||||
| @ -109,8 +107,7 @@ | |||||||
|       "SaveFullYearOfRandomFiles": true, |       "SaveFullYearOfRandomFiles": true, | ||||||
|       "SaveResizedSubFiles": true, |       "SaveResizedSubFiles": true, | ||||||
|       "SkipSearch": false, |       "SkipSearch": false, | ||||||
|       "SortingDaysDeltaTolerance": 700, |       "SortingMaximumPerFaceShouldBeHigh": 3000, | ||||||
|       "SortingMaximumPerFaceShouldBeHigh": 1000, |  | ||||||
|       "SortingMaximumPerKey": 7, |       "SortingMaximumPerKey": 7, | ||||||
|       "SortingMinimumToUseSigma": 10, |       "SortingMinimumToUseSigma": 10, | ||||||
|       "TestDistanceResults": true, |       "TestDistanceResults": true, | ||||||
| @ -127,11 +124,31 @@ | |||||||
|         "1920 x 1080" |         "1920 x 1080" | ||||||
|       ], |       ], | ||||||
|       "PropertyContentCollectionFiles": [], |       "PropertyContentCollectionFiles": [], | ||||||
|  |       "RangeDaysDeltaTolerance": [ | ||||||
|  |         0, | ||||||
|  |         700, | ||||||
|  |         123456 | ||||||
|  |       ], | ||||||
|  |       "RangeDistanceTolerance": [ | ||||||
|  |         0, | ||||||
|  |         0.4, | ||||||
|  |         0.6 | ||||||
|  |       ], | ||||||
|  |       "RangeFaceAreaPermilleTolerance": [ | ||||||
|  |         0, | ||||||
|  |         10, | ||||||
|  |         1000 | ||||||
|  |       ], | ||||||
|  |       "RangeFaceConfidence": [ | ||||||
|  |         0.8, | ||||||
|  |         0.2, | ||||||
|  |         100 | ||||||
|  |       ], | ||||||
|  |       "SaveFaceDistancesForOutputResolutions": [], | ||||||
|       "SaveFaceLandmarkForOutputResolutions": [ |       "SaveFaceLandmarkForOutputResolutions": [ | ||||||
|         "176 x 176", |         "176 x 176", | ||||||
|         "256 x 256" |         "256 x 256" | ||||||
|       ], |       ], | ||||||
|       "SaveFaceDistancesForOutputResolutions": [], |  | ||||||
|       "SaveMappedForOutputResolutions": [], |       "SaveMappedForOutputResolutions": [], | ||||||
|       "SaveNotMappedForOutputResolutions": [], |       "SaveNotMappedForOutputResolutions": [], | ||||||
|       "SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [ |       "SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [ | ||||||
|  | |||||||
| @ -58,18 +58,16 @@ | |||||||
|       "DistanceMoveUnableToMatch": false, |       "DistanceMoveUnableToMatch": false, | ||||||
|       "DistancePixelDistanceTolerance": 1, |       "DistancePixelDistanceTolerance": 1, | ||||||
|       "DistanceRenameToMatch": false, |       "DistanceRenameToMatch": false, | ||||||
|       "FaceDistanceAreaPermilleTolerance": 250, |       "FaceAreaPermille": 1000, | ||||||
|       "FaceDistanceHiddenImageFactor": 2, |       "FaceDistanceHiddenImageFactor": 2, | ||||||
|       "FaceDistanceMinimumConfidence": 0.8, |       "FaceConfidencePercent": 100, | ||||||
|       "FaceDistancePermyriad": 10000, |       "FaceDistancePermyriad": 10000, | ||||||
|       "FaceDistanceTolerance": 0.25, |  | ||||||
|       "FileNameDirectorySeparator": ".Z.", |       "FileNameDirectorySeparator": ".Z.", | ||||||
|       "ForceFaceLastWriteTimeToCreationTime": false, |       "ForceFaceLastWriteTimeToCreationTime": false, | ||||||
|       "ForceMetadataLastWriteTimeToCreationTime": false, |       "ForceMetadataLastWriteTimeToCreationTime": false, | ||||||
|       "ForcePropertyLastWriteTimeToCreationTime": false, |       "ForcePropertyLastWriteTimeToCreationTime": false, | ||||||
|       "ForceResizeLastWriteTimeToCreationTime": false, |       "ForceResizeLastWriteTimeToCreationTime": false, | ||||||
|       "LoadOrCreateThenSaveIndex": false, |       "LoadOrCreateThenSaveIndex": false, | ||||||
|       "LocationConfidenceFactor": 2, |  | ||||||
|       "LocationDigits": 9, |       "LocationDigits": 9, | ||||||
|       "LocationFactor": 10000, |       "LocationFactor": 10000, | ||||||
|       "MappedMaxIndex": 1034720, |       "MappedMaxIndex": 1034720, | ||||||
| @ -109,8 +107,7 @@ | |||||||
|       "SaveFullYearOfRandomFiles": true, |       "SaveFullYearOfRandomFiles": true, | ||||||
|       "SaveResizedSubFiles": true, |       "SaveResizedSubFiles": true, | ||||||
|       "SkipSearch": false, |       "SkipSearch": false, | ||||||
|       "SortingDaysDeltaTolerance": 700, |       "SortingMaximumPerFaceShouldBeHigh": 3000, | ||||||
|       "SortingMaximumPerFaceShouldBeHigh": 1000, |  | ||||||
|       "SortingMaximumPerKey": 7, |       "SortingMaximumPerKey": 7, | ||||||
|       "SortingMinimumToUseSigma": 10, |       "SortingMinimumToUseSigma": 10, | ||||||
|       "TestDistanceResults": true, |       "TestDistanceResults": true, | ||||||
| @ -136,11 +133,31 @@ | |||||||
|         "1920 x 1080" |         "1920 x 1080" | ||||||
|       ], |       ], | ||||||
|       "PropertyContentCollectionFiles": [], |       "PropertyContentCollectionFiles": [], | ||||||
|  |       "RangeDaysDeltaTolerance": [ | ||||||
|  |         0, | ||||||
|  |         700, | ||||||
|  |         123456 | ||||||
|  |       ], | ||||||
|  |       "RangeDistanceTolerance": [ | ||||||
|  |         0, | ||||||
|  |         0.4, | ||||||
|  |         0.6 | ||||||
|  |       ], | ||||||
|  |       "RangeFaceAreaPermilleTolerance": [ | ||||||
|  |         0, | ||||||
|  |         10, | ||||||
|  |         1000 | ||||||
|  |       ], | ||||||
|  |       "RangeFaceConfidence": [ | ||||||
|  |         0.8, | ||||||
|  |         0.2, | ||||||
|  |         100 | ||||||
|  |       ], | ||||||
|  |       "SaveFaceDistancesForOutputResolutions": [], | ||||||
|       "SaveFaceLandmarkForOutputResolutions": [ |       "SaveFaceLandmarkForOutputResolutions": [ | ||||||
|         "176 x 176", |         "176 x 176", | ||||||
|         "256 x 256" |         "256 x 256" | ||||||
|       ], |       ], | ||||||
|       "SaveFaceDistancesForOutputResolutions": [], |  | ||||||
|       "SaveMappedForOutputResolutions": [], |       "SaveMappedForOutputResolutions": [], | ||||||
|       "SaveNotMappedForOutputResolutions": [], |       "SaveNotMappedForOutputResolutions": [], | ||||||
|       "SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [ |       "SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [ | ||||||
|  | |||||||
| @ -6,25 +6,27 @@ namespace View_by_Distance.Map.Models; | |||||||
| public class Configuration | public class Configuration | ||||||
| { | { | ||||||
|  |  | ||||||
|  |     public int FaceConfidencePercent { init; get; } | ||||||
|     public int FaceDistancePermyriad { 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 string MappingDefaultName { init; get; } | ||||||
|     public int PersonBirthdayFirstYear { init; get; } |     public int PersonBirthdayFirstYear { init; get; } | ||||||
|     public string PersonBirthdayFormat { 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 SortingMaximumPerKey { init; get; } | ||||||
|     public int SortingMinimumToUseSigma { init; get; } |     public int SortingMinimumToUseSigma { init; get; } | ||||||
|     public string FacesFileNameExtension { init; get; } |  | ||||||
|     public string FacePartsFileNameExtension { init; get; } |  | ||||||
|     public string FacesHiddenFileNameExtension { init; get; } |  | ||||||
|  |  | ||||||
|     [JsonConstructor] |     [JsonConstructor] | ||||||
|     public Configuration(int faceDistancePermyriad, |     public Configuration(int faceConfidencePercent, | ||||||
|                          double faceDistanceTolerance, |                          int faceDistancePermyriad, | ||||||
|                          string mappingDefaultName, |                          string mappingDefaultName, | ||||||
|                          int personBirthdayFirstYear, |                          int personBirthdayFirstYear, | ||||||
|                          string personBirthdayFormat, |                          string personBirthdayFormat, | ||||||
|                          int sortingDaysDeltaTolerance, |                          int[] rangeDaysDeltaTolerance, | ||||||
|  |                          double[] rangeDistanceTolerance, | ||||||
|                          int sortingMaximumPerKey, |                          int sortingMaximumPerKey, | ||||||
|                          int sortingMinimumToUseSigma, |                          int sortingMinimumToUseSigma, | ||||||
|                          string facesFileNameExtension, |                          string facesFileNameExtension, | ||||||
| @ -34,12 +36,13 @@ public class Configuration | |||||||
|         MappingDefaultName = mappingDefaultName; |         MappingDefaultName = mappingDefaultName; | ||||||
|         PersonBirthdayFormat = personBirthdayFormat; |         PersonBirthdayFormat = personBirthdayFormat; | ||||||
|         SortingMaximumPerKey = sortingMaximumPerKey; |         SortingMaximumPerKey = sortingMaximumPerKey; | ||||||
|  |         FaceConfidencePercent = faceConfidencePercent; | ||||||
|         FaceDistancePermyriad = faceDistancePermyriad; |         FaceDistancePermyriad = faceDistancePermyriad; | ||||||
|         FaceDistanceTolerance = faceDistanceTolerance; |  | ||||||
|         FacesFileNameExtension = facesFileNameExtension; |         FacesFileNameExtension = facesFileNameExtension; | ||||||
|         PersonBirthdayFirstYear = personBirthdayFirstYear; |         PersonBirthdayFirstYear = personBirthdayFirstYear; | ||||||
|  |         RangeDistanceTolerance = rangeDistanceTolerance[1]; | ||||||
|         SortingMinimumToUseSigma = sortingMinimumToUseSigma; |         SortingMinimumToUseSigma = sortingMinimumToUseSigma; | ||||||
|         SortingDaysDeltaTolerance = sortingDaysDeltaTolerance; |         RangeDaysDeltaTolerance = rangeDaysDeltaTolerance[1]; | ||||||
|         FacePartsFileNameExtension = facePartsFileNameExtension; |         FacePartsFileNameExtension = facePartsFileNameExtension; | ||||||
|         FacesHiddenFileNameExtension = facesHiddenFileNameExtension; |         FacesHiddenFileNameExtension = facesHiddenFileNameExtension; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -25,12 +25,14 @@ public class MapLogic | |||||||
|     private readonly int _MaxDegreeOfParallelism; |     private readonly int _MaxDegreeOfParallelism; | ||||||
|     private readonly Configuration? _Configuration; |     private readonly Configuration? _Configuration; | ||||||
|     private readonly string _EDistanceContentTicksDirectory; |     private readonly string _EDistanceContentTicksDirectory; | ||||||
|  |     private readonly Shared.Models.Methods.IMapLogicSupport? _MapLogicSupport; | ||||||
|     private readonly Shared.Models.Properties.IPropertyConfiguration _PropertyConfiguration; |     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; |         _Ticks = ticks; | ||||||
|         _Configuration = configuration; |         _Configuration = configuration; | ||||||
|  |         _MapLogicSupport = mapLogicSupport; | ||||||
|         _Log = Serilog.Log.ForContext<MapLogic>(); |         _Log = Serilog.Log.ForContext<MapLogic>(); | ||||||
|         _PropertyConfiguration = propertyConfiguration; |         _PropertyConfiguration = propertyConfiguration; | ||||||
|         _MaxDegreeOfParallelism = maxDegreeOfParallelism; |         _MaxDegreeOfParallelism = maxDegreeOfParallelism; | ||||||
| @ -59,7 +61,7 @@ public class MapLogic | |||||||
|             _ = Directory.CreateDirectory(eDistanceContentDirectory); |             _ = Directory.CreateDirectory(eDistanceContentDirectory); | ||||||
|         if (!Directory.Exists(eDistanceContentTicksDirectory)) |         if (!Directory.Exists(eDistanceContentTicksDirectory)) | ||||||
|             _ = Directory.CreateDirectory(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); |             List<PersonContainer> personContainerCollection = new(personContainers); | ||||||
|             Stateless.MapLogic.Set(propertyConfiguration, |             Stateless.MapLogic.Set(propertyConfiguration, | ||||||
| @ -69,7 +71,7 @@ public class MapLogic | |||||||
|                                    a2PeopleSingletonDirectory, |                                    a2PeopleSingletonDirectory, | ||||||
|                                    eDistanceContentDirectory, |                                    eDistanceContentDirectory, | ||||||
|                                    mappingCollection, |                                    mappingCollection, | ||||||
|                                    faceDistance, |                                    mapLogicSupport, | ||||||
|                                    personKeyToPersonContainer, |                                    personKeyToPersonContainer, | ||||||
|                                    personKeyToRanges, |                                    personKeyToRanges, | ||||||
|                                    notMappedPersonContainers, |                                    notMappedPersonContainers, | ||||||
| @ -193,6 +195,8 @@ public class MapLogic | |||||||
|             if (File.Exists(checkFile)) |             if (File.Exists(checkFile)) | ||||||
|                 continue; |                 continue; | ||||||
|             File.Copy(sourceFile, checkFile); |             File.Copy(sourceFile, checkFile); | ||||||
|  |             if (saveContainer.MakeAllHidden) | ||||||
|  |                 File.SetAttributes(checkFile, FileAttributes.Hidden); | ||||||
|             if (saveContainer.HiddenFaceFileHolder is not null && saveContainer.HiddenFaceFileHolder.Exists) |             if (saveContainer.HiddenFaceFileHolder is not null && saveContainer.HiddenFaceFileHolder.Exists) | ||||||
|             { |             { | ||||||
|                 sourceFile = saveContainer.HiddenFaceFileHolder.FullName; |                 sourceFile = saveContainer.HiddenFaceFileHolder.FullName; | ||||||
| @ -206,16 +210,23 @@ public class MapLogic | |||||||
|             if (File.Exists(checkFile)) |             if (File.Exists(checkFile)) | ||||||
|                 continue; |                 continue; | ||||||
|             File.Copy(sourceFile, checkFile); |             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) |             foreach (SaveContainer saveContainer in saveContainers) | ||||||
|                 continue; |             { | ||||||
|             checkFile = saveContainer.CheckFile; |                 if (string.IsNullOrEmpty(saveContainer.Directory) || string.IsNullOrEmpty(saveContainer.CheckFile) || saveContainer.ResizedFileHolder is null || !saveContainer.ResizedFileHolder.Exists) | ||||||
|             sourceFile = saveContainer.ResizedFileHolder.FullName; |                     continue; | ||||||
|             if (File.Exists(checkFile)) |                 checkFile = saveContainer.CheckFile; | ||||||
|                 continue; |                 sourceFile = saveContainer.ResizedFileHolder.FullName; | ||||||
|             File.Copy(sourceFile, checkFile); |                 if (File.Exists(checkFile)) | ||||||
|  |                     continue; | ||||||
|  |                 File.Copy(sourceFile, checkFile); | ||||||
|  |                 if (saveContainer.MakeAllHidden) | ||||||
|  |                     File.SetAttributes(checkFile, FileAttributes.Hidden); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         foreach (SaveContainer saveContainer in saveContainers) |         foreach (SaveContainer saveContainer in saveContainers) | ||||||
|         { |         { | ||||||
| @ -226,6 +237,8 @@ public class MapLogic | |||||||
|                 windowsShortcut = new() { Path = saveContainer.ResizedFileHolder.FullName }; |                 windowsShortcut = new() { Path = saveContainer.ResizedFileHolder.FullName }; | ||||||
|                 windowsShortcut.Save(saveContainer.ShortcutFile); |                 windowsShortcut.Save(saveContainer.ShortcutFile); | ||||||
|                 windowsShortcut.Dispose(); |                 windowsShortcut.Dispose(); | ||||||
|  |                 if (saveContainer.MakeAllHidden) | ||||||
|  |                     File.SetAttributes(saveContainer.ShortcutFile, FileAttributes.Hidden); | ||||||
|             } |             } | ||||||
|             catch (Exception) |             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) |     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(); |         Dictionary<long, int> personKeyToCount = new(); | ||||||
|  |         int updated = UpdateFromSortingContainers(sortingContainers); | ||||||
|         List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, personKeyToCount, useFiltersCounter, saveMapped: false); |         List<SaveContainer> saveContainers = GetSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, personKeyToCount, useFiltersCounter, saveMapped: false); | ||||||
|         SaveContainers(totalNotMapped, updated, saveContainers); |         SaveContainers(totalNotMapped, updated, saveContainers); | ||||||
|     } |     } | ||||||
| @ -507,7 +525,7 @@ public class MapLogic | |||||||
|                 else |                 else | ||||||
|                     personKeysRangesCollection = GetPersonKeysRangesCollection(normalizedPixelPercentageToPersonContainers[faceDistanceLength.NormalizedPixelPercentage.Value]); |                     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) |             if (sorting.DistancePermyriad == 0) | ||||||
|                 continue; |                 continue; | ||||||
|             if (sorting.Id == faceDistanceEncoding.Id) |             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) |         if (_Configuration is null) | ||||||
|             throw new NullReferenceException(nameof(_Configuration)); |             throw new NullReferenceException(nameof(_Configuration)); | ||||||
| @ -988,8 +1006,6 @@ public class MapLogic | |||||||
|             foreach (KeyValuePair<int, Mapping> normalizedPixelPercentageAndMapping in keyValuePair.Value) |             foreach (KeyValuePair<int, Mapping> normalizedPixelPercentageAndMapping in keyValuePair.Value) | ||||||
|             { |             { | ||||||
|                 mapping = normalizedPixelPercentageAndMapping.Value; |                 mapping = normalizedPixelPercentageAndMapping.Value; | ||||||
|                 if (mapping.MappingFromLocation.AreaPermille < faceDistanceAreaPermilleTolerance) |  | ||||||
|                     continue; |  | ||||||
|                 if (normalizedPixelPercentageToPersonContainers is not null && normalizedPixelPercentageToPersonContainers.ContainsKey(mapping.MappingFromLocation.NormalizedPixelPercentage)) |                 if (normalizedPixelPercentageToPersonContainers is not null && normalizedPixelPercentageToPersonContainers.ContainsKey(mapping.MappingFromLocation.NormalizedPixelPercentage)) | ||||||
|                     continue; |                     continue; | ||||||
|                 _ = _SkipCollection.TryGetValue(keyValuePair.Key, out normalizedPixelPercentages); |                 _ = _SkipCollection.TryGetValue(keyValuePair.Key, out normalizedPixelPercentages); | ||||||
| @ -1008,11 +1024,11 @@ public class MapLogic | |||||||
|         return results; |         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) |         if (_Configuration is null) | ||||||
|             throw new NullReferenceException(nameof(_Configuration)); |             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(); |         string[] directories = (from l in collection select l.Directory).Distinct().ToArray(); | ||||||
|         foreach (string directory in directories) |         foreach (string directory in directories) | ||||||
|         { |         { | ||||||
|  | |||||||
| @ -451,7 +451,7 @@ internal abstract class MapLogic | |||||||
|             if (keyValuePair.Value.Count < configuration.SortingMinimumToUseSigma) |             if (keyValuePair.Value.Count < configuration.SortingMinimumToUseSigma) | ||||||
|             { |             { | ||||||
|                 maximum = keyValuePair.Value.Max(); |                 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 |             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) |         if (configuration is null) | ||||||
|             throw new NullReferenceException(nameof(configuration)); |             throw new NullReferenceException(nameof(configuration)); | ||||||
| @ -616,7 +616,7 @@ internal abstract class MapLogic | |||||||
|         notMappedPersonContainers.AddRange(GetNotMappedPersonContainers(configuration, personContainers, personKeyCollection)); |         notMappedPersonContainers.AddRange(GetNotMappedPersonContainers(configuration, personContainers, personKeyCollection)); | ||||||
|         AppendToSkipCollection(skipCollection, idThenNormalizedPixelPercentageToPersonContainers, incorrectIdThenNormalizedPixelPercentageToPersonContainers); |         AppendToSkipCollection(skipCollection, idThenNormalizedPixelPercentageToPersonContainers, incorrectIdThenNormalizedPixelPercentageToPersonContainers); | ||||||
|         if (possiblyNewPersonDisplayDirectoryNamesAndPersonContainer.Any()) |         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) |     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) |     internal static SaveContainer GetDebugSaveContainer(string directory, SortingContainer sortingContainer, Mapping mapping) | ||||||
|     { |     { | ||||||
|         SaveContainer result; |         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"); |         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; |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ namespace View_by_Distance.Shared.Models; | |||||||
| public record class FaceDistance : Properties.IFaceDistance | public record class FaceDistance : Properties.IFaceDistance | ||||||
| { | { | ||||||
|  |  | ||||||
|     public double? Confidence { init; get; } |     public int? ConfidencePercent { init; get; } | ||||||
|     public object? Encoding { init; get; } |     public object? Encoding { init; get; } | ||||||
|     public int Id { init; get; } |     public int Id { init; get; } | ||||||
|     public bool? IsWrongYear { init; get; } |     public bool? IsWrongYear { init; get; } | ||||||
| @ -15,9 +15,9 @@ public record class FaceDistance : Properties.IFaceDistance | |||||||
|     public int? NormalizedPixelPercentage { init; get; } |     public int? NormalizedPixelPercentage { init; get; } | ||||||
|  |  | ||||||
|     [JsonConstructor] |     [JsonConstructor] | ||||||
|     public FaceDistance(double? confidence, object? encoding, int id, bool? isWrongYear, double? length, DateTime? minimumDateTime, int? normalizedPixelPercentage) |     public FaceDistance(int? confidencePercent, object? encoding, int id, bool? isWrongYear, double? length, DateTime? minimumDateTime, int? normalizedPixelPercentage) | ||||||
|     { |     { | ||||||
|         Confidence = confidence; |         ConfidencePercent = confidencePercent; | ||||||
|         Encoding = encoding; |         Encoding = encoding; | ||||||
|         Id = id; |         Id = id; | ||||||
|         IsWrongYear = isWrongYear; |         IsWrongYear = isWrongYear; | ||||||
| @ -26,12 +26,12 @@ public record class FaceDistance : Properties.IFaceDistance | |||||||
|         NormalizedPixelPercentage = normalizedPixelPercentage; |         NormalizedPixelPercentage = normalizedPixelPercentage; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public FaceDistance(double? confidence, object? encoding, int id, bool? isWrongYear, DateTime? minimumDateTime, int? normalizedPixelPercentage) : |     public FaceDistance(int? confidencePercent, object? encoding, int id, bool? isWrongYear, DateTime? minimumDateTime, int? normalizedPixelPercentage) : | ||||||
|         this(confidence, encoding, id, isWrongYear, null, minimumDateTime, normalizedPixelPercentage) |         this(confidencePercent, encoding, id, isWrongYear, null, minimumDateTime, normalizedPixelPercentage) | ||||||
|     { } |     { } | ||||||
|  |  | ||||||
|     public FaceDistance(FaceDistance faceDistance, double length) : |     public FaceDistance(FaceDistance faceDistance, double length) : | ||||||
|         this(faceDistance.Confidence, null, faceDistance.Id, faceDistance.IsWrongYear, length, faceDistance.MinimumDateTime, faceDistance.NormalizedPixelPercentage) |         this(faceDistance.ConfidencePercent, null, faceDistance.Id, faceDistance.IsWrongYear, length, faceDistance.MinimumDateTime, faceDistance.NormalizedPixelPercentage) | ||||||
|     { } |     { } | ||||||
|  |  | ||||||
|     public FaceDistance(object encoding) => Encoding = encoding; |     public FaceDistance(object encoding) => Encoding = encoding; | ||||||
|  | |||||||
| @ -35,16 +35,16 @@ public class MappingFromItem : Properties.IMappingFromItem | |||||||
| public class MappingFromLocation : Properties.IMappingFromLocation | public class MappingFromLocation : Properties.IMappingFromLocation | ||||||
| { | { | ||||||
|  |  | ||||||
|     public double AreaPermille { init; get; } |     public int AreaPermille { init; get; } | ||||||
|     public double Confidence { init; get; } |     public int ConfidencePercent { init; get; } | ||||||
|     public string DeterministicHashCodeKey { init; get; } |     public string DeterministicHashCodeKey { init; get; } | ||||||
|     public int NormalizedPixelPercentage { init; get; } |     public int NormalizedPixelPercentage { init; get; } | ||||||
|  |  | ||||||
|     [JsonConstructor] |     [JsonConstructor] | ||||||
|     public MappingFromLocation(int areaPermille, double confidence, string deterministicHashCodeKey, int normalizedPixelPercentage) |     public MappingFromLocation(int areaPermille, int confidencePercent, string deterministicHashCodeKey, int normalizedPixelPercentage) | ||||||
|     { |     { | ||||||
|         AreaPermille = areaPermille; |         AreaPermille = areaPermille; | ||||||
|         Confidence = confidence; |         ConfidencePercent = confidencePercent; | ||||||
|         DeterministicHashCodeKey = deterministicHashCodeKey; |         DeterministicHashCodeKey = deterministicHashCodeKey; | ||||||
|         NormalizedPixelPercentage = normalizedPixelPercentage; |         NormalizedPixelPercentage = normalizedPixelPercentage; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ namespace View_by_Distance.Shared.Models.Methods; | |||||||
| public interface IMapLogicSupport | public interface IMapLogicSupport | ||||||
| { | { | ||||||
|  |  | ||||||
|  |     string GetCounts(); | ||||||
|     void SavePossiblyNewPersonContainers(Properties.IPropertyConfiguration propertyConfiguration, string personBirthdayFormat, string facesFileNameExtension, string? a2PeopleContentDirectory, Dictionary<long, PersonContainer> personKeyToPersonContainer, List<(string[], PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer); |     void SavePossiblyNewPersonContainers(Properties.IPropertyConfiguration propertyConfiguration, string personBirthdayFormat, string facesFileNameExtension, string? a2PeopleContentDirectory, Dictionary<long, PersonContainer> personKeyToPersonContainer, List<(string[], PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer); | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -3,7 +3,7 @@ namespace View_by_Distance.Shared.Models.Properties; | |||||||
| public interface IFaceDistance | public interface IFaceDistance | ||||||
| { | { | ||||||
|  |  | ||||||
|     public double? Confidence { init; get; } |     public int? ConfidencePercent { init; get; } | ||||||
|     public object? Encoding { init; get; } |     public object? Encoding { init; get; } | ||||||
|     public int Id { init; get; } |     public int Id { init; get; } | ||||||
|     public bool? IsWrongYear { init; get; } |     public bool? IsWrongYear { init; get; } | ||||||
|  | |||||||
| @ -15,8 +15,8 @@ public interface IMappingFromItem | |||||||
| public interface IMappingFromLocation | public interface IMappingFromLocation | ||||||
| { | { | ||||||
|  |  | ||||||
|     public double AreaPermille { init; get; } |     public int AreaPermille { init; get; } | ||||||
|     public double Confidence { init; get; } |     public int ConfidencePercent { init; get; } | ||||||
|     public string DeterministicHashCodeKey { init; get; } |     public string DeterministicHashCodeKey { init; get; } | ||||||
|     public int NormalizedPixelPercentage { init; get; } |     public int NormalizedPixelPercentage { init; get; } | ||||||
|  |  | ||||||
|  | |||||||
| @ -11,31 +11,41 @@ public class SaveContainer | |||||||
|     public FileHolder? FaceFileHolder { init; get; } |     public FileHolder? FaceFileHolder { init; get; } | ||||||
|     public FileHolder? HiddenFaceFileHolder { init; get; } |     public FileHolder? HiddenFaceFileHolder { init; get; } | ||||||
|     public FileHolder? FacePartsFileHolder { init; get; } |     public FileHolder? FacePartsFileHolder { init; get; } | ||||||
|  |     public bool MakeAllHidden { init; get; } | ||||||
|     public FileHolder? ResizedFileHolder { init; get; } |     public FileHolder? ResizedFileHolder { init; get; } | ||||||
|     public string ShortcutFile { init; get; } |     public string ShortcutFile { init; get; } | ||||||
|  |  | ||||||
|     [JsonConstructor] |     [JsonConstructor] | ||||||
|     public SaveContainer(string checkFile, string directory, FileHolder? faceFileHolder, FileHolder? hiddenFaceFileHolder, FileHolder? facePartsFileHolder, FileHolder? resizedFileHolder, string shortcutFile) |     public SaveContainer(string checkFile, string directory, FileHolder? faceFileHolder, FileHolder? hiddenFaceFileHolder, FileHolder? facePartsFileHolder, bool makeAllHidden, FileHolder? resizedFileHolder, string shortcutFile) | ||||||
|     { |     { | ||||||
|         CheckFile = checkFile; |         CheckFile = checkFile; | ||||||
|         Directory = directory; |         Directory = directory; | ||||||
|         FaceFileHolder = faceFileHolder; |         FaceFileHolder = faceFileHolder; | ||||||
|         HiddenFaceFileHolder = hiddenFaceFileHolder; |         HiddenFaceFileHolder = hiddenFaceFileHolder; | ||||||
|         FacePartsFileHolder = facePartsFileHolder; |         FacePartsFileHolder = facePartsFileHolder; | ||||||
|  |         MakeAllHidden = makeAllHidden; | ||||||
|         ResizedFileHolder = resizedFileHolder; |         ResizedFileHolder = resizedFileHolder; | ||||||
|         ShortcutFile = shortcutFile; |         ShortcutFile = shortcutFile; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public SaveContainer(string directory) : |     public SaveContainer(string directory) : | ||||||
|         this(string.Empty, directory, null, null, null, null, string.Empty) |         this(string.Empty, directory, null, null, null, false, null, string.Empty) | ||||||
|  |     { } | ||||||
|  |  | ||||||
|  |     public SaveContainer(string directory, FileHolder? resizedFileHolder, string shortcutFile) : | ||||||
|  |         this(string.Empty, directory, null, null, null, true, resizedFileHolder, shortcutFile) | ||||||
|     { } |     { } | ||||||
|  |  | ||||||
|     public SaveContainer(string checkFile, string directory, FileHolder faceFileHolder) : |     public SaveContainer(string checkFile, string directory, FileHolder faceFileHolder) : | ||||||
|         this(checkFile, directory, faceFileHolder, null, null, null, string.Empty) |         this(checkFile, directory, faceFileHolder, null, null, false, null, string.Empty) | ||||||
|     { } |     { } | ||||||
|  |  | ||||||
|     public SaveContainer(FileHolder resizedFileHolder, string checkFile, string directory) : |     public SaveContainer(FileHolder resizedFileHolder, string checkFile, string directory) : | ||||||
|         this(checkFile, directory, null, null, null, resizedFileHolder, string.Empty) |         this(checkFile, directory, null, null, null, false, resizedFileHolder, string.Empty) | ||||||
|  |     { } | ||||||
|  |  | ||||||
|  |     public SaveContainer(string checkFile, string directory, FileHolder? faceFileHolder, FileHolder? hiddenFaceFileHolder, FileHolder? facePartsFileHolder, FileHolder? resizedFileHolder, string shortcutFile) : | ||||||
|  |         this(checkFile, directory, faceFileHolder, hiddenFaceFileHolder, facePartsFileHolder, false, resizedFileHolder, shortcutFile) | ||||||
|     { } |     { } | ||||||
|  |  | ||||||
|     public override string ToString() |     public override string ToString() | ||||||
|  | |||||||
| @ -8,6 +8,11 @@ public interface ILocation | |||||||
|     static string GetLeftPadded(int locationDigits, string value) => |     static string GetLeftPadded(int locationDigits, string value) => | ||||||
|         Location.GetLeftPadded(locationDigits, value); |         Location.GetLeftPadded(locationDigits, value); | ||||||
|  |  | ||||||
|  |     int TestStatic_GetConfidencePercent(int faceConfidencePercent, double[] rangeFaceConfidence, double confidence) => | ||||||
|  |         GetConfidencePercent(faceConfidencePercent, rangeFaceConfidence, confidence); | ||||||
|  |     static int GetConfidencePercent(int faceConfidencePercent, double[] rangeFaceConfidence, double confidence) => | ||||||
|  |         Location.GetConfidencePercent(faceConfidencePercent, rangeFaceConfidence, confidence); | ||||||
|  |  | ||||||
|     string TestStatic_GetLeftPadded(int locationDigits, int value) => |     string TestStatic_GetLeftPadded(int locationDigits, int value) => | ||||||
|         GetLeftPadded(locationDigits, value); |         GetLeftPadded(locationDigits, value); | ||||||
|     static string GetLeftPadded(int locationDigits, int value) => |     static string GetLeftPadded(int locationDigits, int value) => | ||||||
|  | |||||||
| @ -8,20 +8,20 @@ public interface IMapping | |||||||
|     static (string?, string?, string?, bool?) GetSegments(string facesFileNameExtension, string fileName) |     static (string?, string?, string?, bool?) GetSegments(string facesFileNameExtension, string fileName) | ||||||
|         => Mapping.GetSegments(facesFileNameExtension, fileName); |         => Mapping.GetSegments(facesFileNameExtension, fileName); | ||||||
|  |  | ||||||
|     int TestStatic_GetAreaPermille(int height, Models.Location location, int width) |     int TestStatic_GetAreaPermille(int faceAreaPermille, int height, Models.Location location, int width) | ||||||
|         => GetAreaPermille(height, location, width); |         => GetAreaPermille(faceAreaPermille, height, location, width); | ||||||
|     static int GetAreaPermille(int height, Models.Location location, int width) |     static int GetAreaPermille(int faceAreaPermille, int height, Models.Location location, int width) | ||||||
|         => Mapping.GetAreaPermille(location.Bottom, height, location.Left, location.Right, location.Top, width); |         => Mapping.GetAreaPermille(faceAreaPermille, location.Bottom, height, location.Left, location.Right, location.Top, width); | ||||||
|  |  | ||||||
|     int TestStatic_GetAreaPermille(int bottom, int height, int left, int right, int top, int width) |     int TestStatic_GetAreaPermille(int faceAreaPermille, int bottom, int height, int left, int right, int top, int width) | ||||||
|         => GetAreaPermille(bottom, height, left, right, top, width); |         => GetAreaPermille(faceAreaPermille, bottom, height, left, right, top, width); | ||||||
|     static int GetAreaPermille(int bottom, int height, int left, int right, int top, int width) |     static int GetAreaPermille(int faceAreaPermille, int bottom, int height, int left, int right, int top, int width) | ||||||
|         => Mapping.GetAreaPermille(bottom, height, left, right, top, width); |         => Mapping.GetAreaPermille(faceAreaPermille, bottom, height, left, right, top, width); | ||||||
|  |  | ||||||
|     int TestStatic_GetAreaPermille(Models.Location location, OutputResolution outputResolution) |     int TestStatic_GetAreaPermille(int faceAreaPermille, Models.Location location, OutputResolution outputResolution) | ||||||
|         => GetAreaPermille(location, outputResolution); |         => GetAreaPermille(faceAreaPermille, location, outputResolution); | ||||||
|     static int GetAreaPermille(Models.Location location, OutputResolution outputResolution) |     static int GetAreaPermille(int faceAreaPermille, Models.Location location, OutputResolution outputResolution) | ||||||
|         => Mapping.GetAreaPermille(location.Bottom, outputResolution.Height, location.Left, location.Right, location.Top, outputResolution.Width); |         => Mapping.GetAreaPermille(faceAreaPermille, location.Bottom, outputResolution.Height, location.Left, location.Right, location.Top, outputResolution.Width); | ||||||
|  |  | ||||||
|     string TestStatic_GetDeterministicHashCodeKey(int id, Models.Location location, int locationDigits, int locationFactor, OutputResolution outputResolution) |     string TestStatic_GetDeterministicHashCodeKey(int id, Models.Location location, int locationDigits, int locationFactor, OutputResolution outputResolution) | ||||||
|         => GetDeterministicHashCodeKey(id, location, locationDigits, locationFactor, outputResolution); |         => GetDeterministicHashCodeKey(id, location, locationDigits, locationFactor, outputResolution); | ||||||
|  | |||||||
| @ -8,9 +8,9 @@ public interface ISorting | |||||||
|     static Models.Sorting[] Sort(List<Models.Sorting> collection) => |     static Models.Sorting[] Sort(List<Models.Sorting> collection) => | ||||||
|         (from l in collection orderby l.WithinRange, l.DistancePermyriad, l.DaysDelta select l).ToArray(); |         (from l in collection orderby l.WithinRange, l.DistancePermyriad, l.DaysDelta select l).ToArray(); | ||||||
|  |  | ||||||
|     Models.Sorting TestStatic_Get(int faceDistancePermyriad, double faceDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) => |     Models.Sorting TestStatic_Get(int faceDistancePermyriad, double rangeDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) => | ||||||
|         Get(faceDistancePermyriad, faceDistanceTolerance, faceDistanceEncoding, faceDistanceLength, personKeysRangesCollection); |         Get(faceDistancePermyriad, rangeDistanceTolerance, faceDistanceEncoding, faceDistanceLength, personKeysRangesCollection); | ||||||
|     static Models.Sorting Get(int faceDistancePermyriad, double faceDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) => |     static Models.Sorting Get(int faceDistancePermyriad, double rangeDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) => | ||||||
|         Sorting.Get(faceDistancePermyriad, faceDistanceTolerance, faceDistanceEncoding, faceDistanceLength, personKeysRangesCollection); |         Sorting.Get(faceDistancePermyriad, rangeDistanceTolerance, faceDistanceEncoding, faceDistanceLength, personKeysRangesCollection); | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -111,4 +111,9 @@ internal abstract class Location | |||||||
|         return new(x, y); |         return new(x, y); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     internal static int GetConfidencePercent(int faceConfidencePercent, double[] rangeFaceConfidence, double confidence) | ||||||
|  |     { | ||||||
|  |         int result = (int)(confidence / rangeFaceConfidence[1] * faceConfidencePercent); | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
| } | } | ||||||
| @ -74,12 +74,12 @@ internal abstract class Mapping | |||||||
|         return new(id, normalizedPixelPercentage, mappingCollection); |         return new(id, normalizedPixelPercentage, mappingCollection); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     internal static int GetAreaPermille(int bottom, int height, int left, int right, int top, int width) |     internal static int GetAreaPermille(int faceAreaPermille, int bottom, int height, int left, int right, int top, int width) | ||||||
|     { |     { | ||||||
|         int result; |         int result; | ||||||
|         double area = width * height; |         double area = width * height; | ||||||
|         double locationArea = (right - left) * (bottom - top); |         double locationArea = (right - left) * (bottom - top); | ||||||
|         result = (int)Math.Round(locationArea / area * 1000, 0); |         result = (int)Math.Round(locationArea / area * faceAreaPermille, 0); | ||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods; | |||||||
| internal abstract class Sorting | internal abstract class Sorting | ||||||
| { | { | ||||||
|  |  | ||||||
|     internal static Models.Sorting Get(int faceDistancePermyriad, double faceDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) |     internal static Models.Sorting Get(int faceDistancePermyriad, double rangeDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) | ||||||
|     { |     { | ||||||
|         Models.Sorting result; |         Models.Sorting result; | ||||||
|         if (faceDistanceLength.Length is null) |         if (faceDistanceLength.Length is null) | ||||||
| @ -17,7 +17,7 @@ internal abstract class Sorting | |||||||
|         TimeSpan timeSpan = new(faceDistanceLength.MinimumDateTime.Value.Ticks - ticks); |         TimeSpan timeSpan = new(faceDistanceLength.MinimumDateTime.Value.Ticks - ticks); | ||||||
|         bool older = timeSpan.TotalMilliseconds < 0; |         bool older = timeSpan.TotalMilliseconds < 0; | ||||||
|         int daysDelta = (int)Math.Round(Math.Abs(timeSpan.TotalDays), 0); |         int daysDelta = (int)Math.Round(Math.Abs(timeSpan.TotalDays), 0); | ||||||
|         int distancePermyriad = (int)(faceDistanceLength.Length.Value / faceDistanceTolerance * faceDistancePermyriad); |         int distancePermyriad = (int)(faceDistanceLength.Length.Value / rangeDistanceTolerance * faceDistancePermyriad); | ||||||
|         if (!personKeysRangesCollection.Any()) |         if (!personKeysRangesCollection.Any()) | ||||||
|             withinRanges.Add(0); |             withinRanges.Add(0); | ||||||
|         else |         else | ||||||
|  | |||||||
| @ -23,7 +23,6 @@ public class Configuration | |||||||
|     [Display(Name = "Load Or Create Then Save Distance Results"), Required] public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; } |     [Display(Name = "Load Or Create Then Save Distance Results"), Required] public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Load Or Create Then Save Image Faces Results"), Required] public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; } |     [Display(Name = "Load Or Create Then Save Image Faces Results"), Required] public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Load Or Create Then Save Index"), Required] public bool? LoadOrCreateThenSaveIndex { get; set; } |     [Display(Name = "Load Or Create Then Save Index"), Required] public bool? LoadOrCreateThenSaveIndex { get; set; } | ||||||
|     [Display(Name = "Location Confidence Factor"), Required] public int? LocationConfidenceFactor { get; set; } |  | ||||||
|     [Display(Name = "Mapped Max Index"), Required] public int? MappedMaxIndex { get; set; } |     [Display(Name = "Mapped Max Index"), Required] public int? MappedMaxIndex { get; set; } | ||||||
|     [Display(Name = "Mixed Year Relative Paths"), Required] public string[] MixedYearRelativePaths { get; set; } |     [Display(Name = "Mixed Year Relative Paths"), Required] public string[] MixedYearRelativePaths { get; set; } | ||||||
|     [Display(Name = "Model Directory"), Required] public string ModelDirectory { get; set; } |     [Display(Name = "Model Directory"), Required] public string ModelDirectory { get; set; } | ||||||
| @ -88,8 +87,6 @@ public class Configuration | |||||||
|             configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>(); |             configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>(); | ||||||
|         if (configuration.LoadOrCreateThenSaveIndex is null) |         if (configuration.LoadOrCreateThenSaveIndex is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveIndex)); |             throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveIndex)); | ||||||
|         if (configuration.LocationConfidenceFactor is null) |  | ||||||
|             throw new NullReferenceException(nameof(configuration.LocationConfidenceFactor)); |  | ||||||
|         if (configuration.MixedYearRelativePaths is null) |         if (configuration.MixedYearRelativePaths is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths)); |             throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths)); | ||||||
|         if (configuration.NumberOfJitters is null) |         if (configuration.NumberOfJitters is null) | ||||||
| @ -148,7 +145,6 @@ public class Configuration | |||||||
|                      configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions, |                      configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions, | ||||||
|                      configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions, |                      configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions, | ||||||
|                      configuration.LoadOrCreateThenSaveIndex.Value, |                      configuration.LoadOrCreateThenSaveIndex.Value, | ||||||
|                      configuration.LocationConfidenceFactor.Value, |  | ||||||
|                      configuration.MappedMaxIndex, |                      configuration.MappedMaxIndex, | ||||||
|                      configuration.MixedYearRelativePaths, |                      configuration.MixedYearRelativePaths, | ||||||
|                      configuration.ModelDirectory, |                      configuration.ModelDirectory, | ||||||
|  | |||||||
| @ -22,7 +22,6 @@ public class Configuration | |||||||
|     public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { init; get; } |     public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { init; get; } | ||||||
|     public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { init; get; } |     public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { init; get; } | ||||||
|     public bool LoadOrCreateThenSaveIndex { init; get; } |     public bool LoadOrCreateThenSaveIndex { init; get; } | ||||||
|     public int LocationConfidenceFactor { init; get; } |  | ||||||
|     public int? MappedMaxIndex { init; get; } |     public int? MappedMaxIndex { init; get; } | ||||||
|     public string[] MixedYearRelativePaths { init; get; } |     public string[] MixedYearRelativePaths { init; get; } | ||||||
|     public string ModelDirectory { init; get; } |     public string ModelDirectory { init; get; } | ||||||
| @ -66,7 +65,6 @@ public class Configuration | |||||||
|                          string[] loadOrCreateThenSaveDistanceResultsForOutputResolutions, |                          string[] loadOrCreateThenSaveDistanceResultsForOutputResolutions, | ||||||
|                          string[] loadOrCreateThenSaveImageFacesResultsForOutputResolutions, |                          string[] loadOrCreateThenSaveImageFacesResultsForOutputResolutions, | ||||||
|                          bool loadOrCreateThenSaveIndex, |                          bool loadOrCreateThenSaveIndex, | ||||||
|                          int locationConfidenceFactor, |  | ||||||
|                          int? mappedMaxIndex, |                          int? mappedMaxIndex, | ||||||
|                          string[] mixedYearRelativePaths, |                          string[] mixedYearRelativePaths, | ||||||
|                          string modelDirectory, |                          string modelDirectory, | ||||||
| @ -109,7 +107,6 @@ public class Configuration | |||||||
|         LoadOrCreateThenSaveDistanceResultsForOutputResolutions = loadOrCreateThenSaveDistanceResultsForOutputResolutions; |         LoadOrCreateThenSaveDistanceResultsForOutputResolutions = loadOrCreateThenSaveDistanceResultsForOutputResolutions; | ||||||
|         LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = loadOrCreateThenSaveImageFacesResultsForOutputResolutions; |         LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = loadOrCreateThenSaveImageFacesResultsForOutputResolutions; | ||||||
|         LoadOrCreateThenSaveIndex = loadOrCreateThenSaveIndex; |         LoadOrCreateThenSaveIndex = loadOrCreateThenSaveIndex; | ||||||
|         LocationConfidenceFactor = locationConfidenceFactor; |  | ||||||
|         MappedMaxIndex = mappedMaxIndex; |         MappedMaxIndex = mappedMaxIndex; | ||||||
|         MixedYearRelativePaths = mixedYearRelativePaths; |         MixedYearRelativePaths = mixedYearRelativePaths; | ||||||
|         ModelDirectory = modelDirectory; |         ModelDirectory = modelDirectory; | ||||||
|  | |||||||
| @ -206,6 +206,7 @@ public class UnitTestCalculations | |||||||
|     [TestMethod] |     [TestMethod] | ||||||
|     public void TestAreaPermille() |     public void TestAreaPermille() | ||||||
|     { |     { | ||||||
|  |         int faceAreaPermille=1000; | ||||||
|         Location location; |         Location location; | ||||||
|         double confidence = 0.1D; |         double confidence = 0.1D; | ||||||
|         int areaPermille, left, top, right, bottom, width, height; |         int areaPermille, left, top, right, bottom, width, height; | ||||||
| @ -215,7 +216,7 @@ public class UnitTestCalculations | |||||||
|         bottom = 100; |         bottom = 100; | ||||||
|         width = 100; |         width = 100; | ||||||
|         height = 100; |         height = 100; | ||||||
|         areaPermille = IMapping.GetAreaPermille(bottom, height, left, right, top, width); |         areaPermille = IMapping.GetAreaPermille(faceAreaPermille, bottom, height, left, right, top, width); | ||||||
|         Assert.IsTrue(areaPermille == 1000); |         Assert.IsTrue(areaPermille == 1000); | ||||||
|         left = 0; |         left = 0; | ||||||
|         right = 50; |         right = 50; | ||||||
| @ -224,7 +225,7 @@ public class UnitTestCalculations | |||||||
|         width = 100; |         width = 100; | ||||||
|         height = 100; |         height = 100; | ||||||
|         location = new(bottom, confidence, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); |         location = new(bottom, confidence, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); | ||||||
|         areaPermille = IMapping.GetAreaPermille(height, location, width); |         areaPermille = IMapping.GetAreaPermille(faceAreaPermille, height, location, width); | ||||||
|         Assert.IsTrue(areaPermille == 250); |         Assert.IsTrue(areaPermille == 250); | ||||||
|         left = 0; |         left = 0; | ||||||
|         right = 25; |         right = 25; | ||||||
| @ -234,7 +235,7 @@ public class UnitTestCalculations | |||||||
|         height = 100; |         height = 100; | ||||||
|         location = new(bottom, confidence, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); |         location = new(bottom, confidence, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); | ||||||
|         OutputResolution outputResolution = new(height, 0, width); |         OutputResolution outputResolution = new(height, 0, width); | ||||||
|         areaPermille = IMapping.GetAreaPermille(location, outputResolution); |         areaPermille = IMapping.GetAreaPermille(faceAreaPermille, location, outputResolution); | ||||||
|         Assert.IsTrue(areaPermille == 62); |         Assert.IsTrue(areaPermille == 62); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -541,4 +542,29 @@ public class UnitTestCalculations | |||||||
|         Assert.IsNotNull(lines); |         Assert.IsNotNull(lines); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     [TestMethod] | ||||||
|  |     public void TestGetConfidencePercent() | ||||||
|  |     { | ||||||
|  |         int faceConfidencePercent = 100; | ||||||
|  |         double minimum, target, maximum, value, check; | ||||||
|  |         minimum = 0.8f; | ||||||
|  |         target = 0.8f; | ||||||
|  |         maximum = int.MaxValue; | ||||||
|  |         value = 0f; | ||||||
|  |         check = ILocation.GetConfidencePercent(faceConfidencePercent, new double[] { minimum, target, maximum }, value); | ||||||
|  |         Assert.IsTrue(check == 0); | ||||||
|  |         target = 0.8f; | ||||||
|  |         value = 0.4f; | ||||||
|  |         check = ILocation.GetConfidencePercent(faceConfidencePercent, new double[] { minimum, target, maximum }, value); | ||||||
|  |         Assert.IsTrue(check == 50); | ||||||
|  |         target = 0.8f; | ||||||
|  |         value = 0.8f; | ||||||
|  |         check = ILocation.GetConfidencePercent(faceConfidencePercent, new double[] { minimum, target, maximum }, value); | ||||||
|  |         Assert.IsTrue(check == 100); | ||||||
|  |         target = 0.8f; | ||||||
|  |         value = 1.6f; | ||||||
|  |         check = ILocation.GetConfidencePercent(faceConfidencePercent, new double[] { minimum, target, maximum }, value); | ||||||
|  |         Assert.IsTrue(check == 200); | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
| @ -17,11 +17,9 @@ public class Configuration | |||||||
|     [Display(Name = "Distance Move Unable to Match by 1 Tick"), Required] public bool? DistanceMoveUnableToMatch { get; set; } |     [Display(Name = "Distance Move Unable to Match by 1 Tick"), Required] public bool? DistanceMoveUnableToMatch { get; set; } | ||||||
|     [Display(Name = "Distance Pixel Distance Tolerance"), Required] public int? DistancePixelDistanceTolerance { get; set; } |     [Display(Name = "Distance Pixel Distance Tolerance"), Required] public int? DistancePixelDistanceTolerance { get; set; } | ||||||
|     [Display(Name = "Distance Rename to Match"), Required] public bool? DistanceRenameToMatch { get; set; } |     [Display(Name = "Distance Rename to Match"), Required] public bool? DistanceRenameToMatch { get; set; } | ||||||
|     [Display(Name = "Face Area Permille Tolerance"), Required] public int? FaceDistanceAreaPermilleTolerance { get; set; } |  | ||||||
|     [Display(Name = "Face Distance Hidden Image Factor"), Required] public int? FaceDistanceHiddenImageFactor { get; set; } |     [Display(Name = "Face Distance Hidden Image Factor"), Required] public int? FaceDistanceHiddenImageFactor { get; set; } | ||||||
|     [Display(Name = "Location Minimum Confidence"), Required] public double? FaceDistanceMinimumConfidence { get; set; } |     [Display(Name = "Face Confidence Percent"), Required] public int? FaceConfidencePercent { get; set; } | ||||||
|     [Display(Name = "Face Distance Permyriad"), Required] public int? FaceDistancePermyriad { get; set; } |     [Display(Name = "Face Distance Permyriad"), Required] public int? FaceDistancePermyriad { get; set; } | ||||||
|     [Display(Name = "Face Distance Tolerance"), Required] public double? FaceDistanceTolerance { get; set; } |  | ||||||
|     [Display(Name = "Force Face Last Write Time to Creation Time"), Required] public bool? ForceFaceLastWriteTimeToCreationTime { get; set; } |     [Display(Name = "Force Face Last Write Time to Creation Time"), Required] public bool? ForceFaceLastWriteTimeToCreationTime { get; set; } | ||||||
|     [Display(Name = "Force Metadata Last Write Time to Creation Time"), Required] public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; } |     [Display(Name = "Force Metadata Last Write Time to Creation Time"), Required] public bool? ForceMetadataLastWriteTimeToCreationTime { get; set; } | ||||||
|     [Display(Name = "Force Resize Last Write Time to Creation Time"), Required] public bool? ForceResizeLastWriteTimeToCreationTime { get; set; } |     [Display(Name = "Force Resize Last Write Time to Creation Time"), Required] public bool? ForceResizeLastWriteTimeToCreationTime { get; set; } | ||||||
| @ -31,7 +29,6 @@ public class Configuration | |||||||
|     [Display(Name = "Load Or Create Then Save Distance Results"), Required] public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; } |     [Display(Name = "Load Or Create Then Save Distance Results"), Required] public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Load Or Create Then Save Image Faces Results"), Required] public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; } |     [Display(Name = "Load Or Create Then Save Image Faces Results"), Required] public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Load Or Create Then Save Index"), Required] public bool? LoadOrCreateThenSaveIndex { get; set; } |     [Display(Name = "Load Or Create Then Save Index"), Required] public bool? LoadOrCreateThenSaveIndex { get; set; } | ||||||
|     [Display(Name = "Location Confidence Factor"), Required] public int? LocationConfidenceFactor { get; set; } |  | ||||||
|     [Display(Name = "Location Digits"), Required] public int? LocationDigits { get; set; } |     [Display(Name = "Location Digits"), Required] public int? LocationDigits { get; set; } | ||||||
|     [Display(Name = "Location Factor"), Required] public int? LocationFactor { get; set; } |     [Display(Name = "Location Factor"), Required] public int? LocationFactor { get; set; } | ||||||
|     [Display(Name = "Mapped Max Index"), Required] public int? MappedMaxIndex { get; set; } |     [Display(Name = "Mapped Max Index"), Required] public int? MappedMaxIndex { get; set; } | ||||||
| @ -59,6 +56,10 @@ public class Configuration | |||||||
|     [Display(Name = "Properties Changed For Metadata"), Required] public bool? PropertiesChangedForMetadata { get; set; } |     [Display(Name = "Properties Changed For Metadata"), Required] public bool? PropertiesChangedForMetadata { get; set; } | ||||||
|     [Display(Name = "Properties Changed For Resize"), Required] public bool? PropertiesChangedForResize { get; set; } |     [Display(Name = "Properties Changed For Resize"), Required] public bool? PropertiesChangedForResize { get; set; } | ||||||
|     [Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; } |     [Display(Name = "Property Configuration"), Required] public Property.Models.Configuration PropertyConfiguration { get; set; } | ||||||
|  |     [Display(Name = "Sorting Days Delta Tolerance"), Required] public int[] RangeDaysDeltaTolerance { get; set; } | ||||||
|  |     [Display(Name = "Face Area Permille Tolerance"), Required] public int[] RangeFaceAreaPermilleTolerance { get; set; } | ||||||
|  |     [Display(Name = "Location Minimum Confidence"), Required] public double[] RangeFaceConfidence { get; set; } | ||||||
|  |     [Display(Name = "Face Distance Tolerance"), Required] public double[] RangeDistanceTolerance { get; set; } | ||||||
|     [Display(Name = "Retry Images Without a Face"), Required] public bool? RetryImagesWithoutAFace { get; set; } |     [Display(Name = "Retry Images Without a Face"), Required] public bool? RetryImagesWithoutAFace { get; set; } | ||||||
|     [Display(Name = "Reverse"), Required] public bool? Reverse { get; set; } |     [Display(Name = "Reverse"), Required] public bool? Reverse { get; set; } | ||||||
|     [Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; } |     [Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; } | ||||||
| @ -67,7 +68,6 @@ public class Configuration | |||||||
|     [Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { 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 = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; } | ||||||
|     [Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; } |     [Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; } | ||||||
|     [Display(Name = "Sorting Days Delta Tolerance"), Required] public int? SortingDaysDeltaTolerance { get; set; } |  | ||||||
|     [Display(Name = "SortingMaximumPerFaceShould be High"), Required] public int? SortingMaximumPerFaceShouldBeHigh { get; set; } |     [Display(Name = "SortingMaximumPerFaceShould be High"), Required] public int? SortingMaximumPerFaceShouldBeHigh { get; set; } | ||||||
|     [Display(Name = "Sorting Maximum Per Key"), Required] public int? SortingMaximumPerKey { get; set; } |     [Display(Name = "Sorting Maximum Per Key"), Required] public int? SortingMaximumPerKey { get; set; } | ||||||
|     [Display(Name = "Sorting Minimum to use Sigma"), Required] public int? SortingMinimumToUseSigma { get; set; } |     [Display(Name = "Sorting Minimum to use Sigma"), Required] public int? SortingMinimumToUseSigma { get; set; } | ||||||
| @ -99,16 +99,12 @@ public class Configuration | |||||||
|             throw new NullReferenceException(nameof(configuration.DistancePixelDistanceTolerance)); |             throw new NullReferenceException(nameof(configuration.DistancePixelDistanceTolerance)); | ||||||
|         if (configuration.DistanceRenameToMatch is null) |         if (configuration.DistanceRenameToMatch is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.DistanceRenameToMatch)); |             throw new NullReferenceException(nameof(configuration.DistanceRenameToMatch)); | ||||||
|         if (configuration.FaceDistanceAreaPermilleTolerance is null) |  | ||||||
|             throw new NullReferenceException(nameof(configuration.FaceDistanceAreaPermilleTolerance)); |  | ||||||
|         if (configuration.FaceDistanceHiddenImageFactor is null) |         if (configuration.FaceDistanceHiddenImageFactor is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.FaceDistanceHiddenImageFactor)); |             throw new NullReferenceException(nameof(configuration.FaceDistanceHiddenImageFactor)); | ||||||
|         if (configuration.FaceDistanceMinimumConfidence is null) |         if (configuration.FaceConfidencePercent is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.FaceDistanceMinimumConfidence)); |             throw new NullReferenceException(nameof(configuration.FaceConfidencePercent)); | ||||||
|         if (configuration.FaceDistancePermyriad is null) |         if (configuration.FaceDistancePermyriad is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.FaceDistancePermyriad)); |             throw new NullReferenceException(nameof(configuration.FaceDistancePermyriad)); | ||||||
|         if (configuration.FaceDistanceTolerance is null) |  | ||||||
|             throw new NullReferenceException(nameof(configuration.FaceDistanceTolerance)); |  | ||||||
|         if (configuration.ForceFaceLastWriteTimeToCreationTime is null) |         if (configuration.ForceFaceLastWriteTimeToCreationTime is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.ForceFaceLastWriteTimeToCreationTime)); |             throw new NullReferenceException(nameof(configuration.ForceFaceLastWriteTimeToCreationTime)); | ||||||
|         if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) |         if (configuration.ForceMetadataLastWriteTimeToCreationTime is null) | ||||||
| @ -125,8 +121,6 @@ public class Configuration | |||||||
|             configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>(); |             configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>(); | ||||||
|         if (configuration.LoadOrCreateThenSaveIndex is null) |         if (configuration.LoadOrCreateThenSaveIndex is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveIndex)); |             throw new NullReferenceException(nameof(configuration.LoadOrCreateThenSaveIndex)); | ||||||
|         if (configuration.LocationConfidenceFactor is null) |  | ||||||
|             throw new NullReferenceException(nameof(configuration.LocationConfidenceFactor)); |  | ||||||
|         if (configuration.LocationDigits is null) |         if (configuration.LocationDigits is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.LocationDigits)); |             throw new NullReferenceException(nameof(configuration.LocationDigits)); | ||||||
|         if (configuration.LocationFactor is null) |         if (configuration.LocationFactor is null) | ||||||
| @ -169,6 +163,14 @@ public class Configuration | |||||||
|             throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata)); |             throw new NullReferenceException(nameof(configuration.PropertiesChangedForMetadata)); | ||||||
|         if (configuration.PropertiesChangedForResize is null) |         if (configuration.PropertiesChangedForResize is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize)); |             throw new NullReferenceException(nameof(configuration.PropertiesChangedForResize)); | ||||||
|  |         if (configuration.RangeDaysDeltaTolerance is null || configuration.RangeDaysDeltaTolerance.Length != 3) | ||||||
|  |             throw new NullReferenceException(nameof(configuration.RangeDaysDeltaTolerance)); | ||||||
|  |         if (configuration.RangeFaceAreaPermilleTolerance is null || configuration.RangeFaceAreaPermilleTolerance.Length != 3) | ||||||
|  |             throw new NullReferenceException(nameof(configuration.RangeFaceAreaPermilleTolerance)); | ||||||
|  |         if (configuration.RangeFaceConfidence is null || configuration.RangeFaceConfidence.Length != 3) | ||||||
|  |             throw new NullReferenceException(nameof(configuration.RangeFaceConfidence)); | ||||||
|  |         if (configuration.RangeDistanceTolerance is null || configuration.RangeDistanceTolerance.Length != 3) | ||||||
|  |             throw new NullReferenceException(nameof(configuration.RangeDistanceTolerance)); | ||||||
|         if (configuration.RetryImagesWithoutAFace is null) |         if (configuration.RetryImagesWithoutAFace is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.RetryImagesWithoutAFace)); |             throw new NullReferenceException(nameof(configuration.RetryImagesWithoutAFace)); | ||||||
|         if (configuration.Reverse is null) |         if (configuration.Reverse is null) | ||||||
| @ -185,8 +187,6 @@ public class Configuration | |||||||
|             configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>(); |             configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>(); | ||||||
|         if (configuration.SkipSearch is null) |         if (configuration.SkipSearch is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.SkipSearch)); |             throw new NullReferenceException(nameof(configuration.SkipSearch)); | ||||||
|         if (configuration.SortingDaysDeltaTolerance is null) |  | ||||||
|             throw new NullReferenceException(nameof(configuration.SortingDaysDeltaTolerance)); |  | ||||||
|         if (configuration.SortingMaximumPerFaceShouldBeHigh is null) |         if (configuration.SortingMaximumPerFaceShouldBeHigh is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.SortingMaximumPerFaceShouldBeHigh)); |             throw new NullReferenceException(nameof(configuration.SortingMaximumPerFaceShouldBeHigh)); | ||||||
|         if (configuration.SortingMaximumPerKey is null) |         if (configuration.SortingMaximumPerKey is null) | ||||||
| @ -197,7 +197,7 @@ public class Configuration | |||||||
|             throw new NullReferenceException(nameof(configuration.TestDistanceResults)); |             throw new NullReferenceException(nameof(configuration.TestDistanceResults)); | ||||||
|         if (configuration.ValidResolutions is null) |         if (configuration.ValidResolutions is null) | ||||||
|             throw new NullReferenceException(nameof(configuration.ValidResolutions)); |             throw new NullReferenceException(nameof(configuration.ValidResolutions)); | ||||||
|         _ = DateTime.Now.AddDays(-configuration.SortingDaysDeltaTolerance.Value); |         _ = DateTime.Now.AddDays(-configuration.RangeDaysDeltaTolerance[1]); | ||||||
|         result = new(configuration.PropertyConfiguration, |         result = new(configuration.PropertyConfiguration, | ||||||
|                      configuration.CheckDFaceAndUpWriteDates.Value, |                      configuration.CheckDFaceAndUpWriteDates.Value, | ||||||
|                      configuration.CheckJsonForDistanceResults.Value, |                      configuration.CheckJsonForDistanceResults.Value, | ||||||
| @ -206,11 +206,9 @@ public class Configuration | |||||||
|                      configuration.DistanceMoveUnableToMatch.Value, |                      configuration.DistanceMoveUnableToMatch.Value, | ||||||
|                      configuration.DistancePixelDistanceTolerance.Value, |                      configuration.DistancePixelDistanceTolerance.Value, | ||||||
|                      configuration.DistanceRenameToMatch.Value, |                      configuration.DistanceRenameToMatch.Value, | ||||||
|                      configuration.FaceDistanceAreaPermilleTolerance.Value, |  | ||||||
|                      configuration.FaceDistanceHiddenImageFactor.Value, |                      configuration.FaceDistanceHiddenImageFactor.Value, | ||||||
|                      configuration.FaceDistanceMinimumConfidence.Value, |                      configuration.FaceConfidencePercent.Value, | ||||||
|                      configuration.FaceDistancePermyriad.Value, |                      configuration.FaceDistancePermyriad.Value, | ||||||
|                      configuration.FaceDistanceTolerance.Value, |  | ||||||
|                      configuration.ForceFaceLastWriteTimeToCreationTime.Value, |                      configuration.ForceFaceLastWriteTimeToCreationTime.Value, | ||||||
|                      configuration.ForceMetadataLastWriteTimeToCreationTime.Value, |                      configuration.ForceMetadataLastWriteTimeToCreationTime.Value, | ||||||
|                      configuration.ForceResizeLastWriteTimeToCreationTime.Value, |                      configuration.ForceResizeLastWriteTimeToCreationTime.Value, | ||||||
| @ -220,7 +218,6 @@ public class Configuration | |||||||
|                      configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions, |                      configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions, | ||||||
|                      configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions, |                      configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions, | ||||||
|                      configuration.LoadOrCreateThenSaveIndex.Value, |                      configuration.LoadOrCreateThenSaveIndex.Value, | ||||||
|                      configuration.LocationConfidenceFactor.Value, |  | ||||||
|                      configuration.LocationDigits.Value, |                      configuration.LocationDigits.Value, | ||||||
|                      configuration.LocationFactor.Value, |                      configuration.LocationFactor.Value, | ||||||
|                      configuration.MappedMaxIndex, |                      configuration.MappedMaxIndex, | ||||||
| @ -247,6 +244,10 @@ public class Configuration | |||||||
|                      configuration.PropertiesChangedForIndex.Value, |                      configuration.PropertiesChangedForIndex.Value, | ||||||
|                      configuration.PropertiesChangedForMetadata.Value, |                      configuration.PropertiesChangedForMetadata.Value, | ||||||
|                      configuration.PropertiesChangedForResize.Value, |                      configuration.PropertiesChangedForResize.Value, | ||||||
|  |                      configuration.RangeDaysDeltaTolerance, | ||||||
|  |                      configuration.RangeFaceAreaPermilleTolerance, | ||||||
|  |                      configuration.RangeFaceConfidence, | ||||||
|  |                      configuration.RangeDistanceTolerance, | ||||||
|                      configuration.RetryImagesWithoutAFace.Value, |                      configuration.RetryImagesWithoutAFace.Value, | ||||||
|                      configuration.Reverse.Value, |                      configuration.Reverse.Value, | ||||||
|                      configuration.SaveFaceLandmarkForOutputResolutions, |                      configuration.SaveFaceLandmarkForOutputResolutions, | ||||||
| @ -255,7 +256,6 @@ public class Configuration | |||||||
|                      configuration.SaveResizedSubfiles.Value, |                      configuration.SaveResizedSubfiles.Value, | ||||||
|                      configuration.SaveShortcutsForOutputResolutions, |                      configuration.SaveShortcutsForOutputResolutions, | ||||||
|                      configuration.SkipSearch.Value, |                      configuration.SkipSearch.Value, | ||||||
|                      configuration.SortingDaysDeltaTolerance.Value, |  | ||||||
|                      configuration.SortingMaximumPerFaceShouldBeHigh.Value, |                      configuration.SortingMaximumPerFaceShouldBeHigh.Value, | ||||||
|                      configuration.SortingMaximumPerKey.Value, |                      configuration.SortingMaximumPerKey.Value, | ||||||
|                      configuration.SortingMinimumToUseSigma.Value, |                      configuration.SortingMinimumToUseSigma.Value, | ||||||
|  | |||||||
| @ -16,11 +16,9 @@ public class Configuration | |||||||
|     public bool DistanceMoveUnableToMatch { init; get; } |     public bool DistanceMoveUnableToMatch { init; get; } | ||||||
|     public int DistancePixelDistanceTolerance { init; get; } |     public int DistancePixelDistanceTolerance { init; get; } | ||||||
|     public bool DistanceRenameToMatch { init; get; } |     public bool DistanceRenameToMatch { init; get; } | ||||||
|     public int FaceDistanceAreaPermilleTolerance { init; get; } |  | ||||||
|     public int FaceDistanceHiddenImageFactor { init; get; } |     public int FaceDistanceHiddenImageFactor { init; get; } | ||||||
|     public double FaceDistanceMinimumConfidence { init; get; } |     public int FaceConfidencePercent { init; get; } | ||||||
|     public int FaceDistancePermyriad { init; get; } |     public int FaceDistancePermyriad { init; get; } | ||||||
|     public double FaceDistanceTolerance { init; get; } |  | ||||||
|     public bool ForceFaceLastWriteTimeToCreationTime { init; get; } |     public bool ForceFaceLastWriteTimeToCreationTime { init; get; } | ||||||
|     public bool ForceMetadataLastWriteTimeToCreationTime { init; get; } |     public bool ForceMetadataLastWriteTimeToCreationTime { init; get; } | ||||||
|     public bool ForceResizeLastWriteTimeToCreationTime { init; get; } |     public bool ForceResizeLastWriteTimeToCreationTime { init; get; } | ||||||
| @ -30,7 +28,6 @@ public class Configuration | |||||||
|     public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { init; get; } |     public string[] LoadOrCreateThenSaveDistanceResultsForOutputResolutions { init; get; } | ||||||
|     public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { init; get; } |     public string[] LoadOrCreateThenSaveImageFacesResultsForOutputResolutions { init; get; } | ||||||
|     public bool LoadOrCreateThenSaveIndex { init; get; } |     public bool LoadOrCreateThenSaveIndex { init; get; } | ||||||
|     public int LocationConfidenceFactor { init; get; } |  | ||||||
|     public int LocationDigits { init; get; } |     public int LocationDigits { init; get; } | ||||||
|     public int LocationFactor { init; get; } |     public int LocationFactor { init; get; } | ||||||
|     public int? MappedMaxIndex { init; get; } |     public int? MappedMaxIndex { init; get; } | ||||||
| @ -57,6 +54,10 @@ public class Configuration | |||||||
|     public bool PropertiesChangedForIndex { init; get; } |     public bool PropertiesChangedForIndex { init; get; } | ||||||
|     public bool PropertiesChangedForMetadata { init; get; } |     public bool PropertiesChangedForMetadata { init; get; } | ||||||
|     public bool PropertiesChangedForResize { init; get; } |     public bool PropertiesChangedForResize { init; get; } | ||||||
|  |     public int[] RangeDaysDeltaTolerance { init; get; } | ||||||
|  |     public int[] RangeFaceAreaPermilleTolerance { init; get; } | ||||||
|  |     public double[] RangeFaceConfidence { init; get; } | ||||||
|  |     public double[] RangeDistanceTolerance { init; get; } | ||||||
|     public bool RetryImagesWithoutAFace { init; get; } |     public bool RetryImagesWithoutAFace { init; get; } | ||||||
|     public bool Reverse { init; get; } |     public bool Reverse { init; get; } | ||||||
|     public string[] SaveFaceLandmarkForOutputResolutions { init; get; } |     public string[] SaveFaceLandmarkForOutputResolutions { init; get; } | ||||||
| @ -65,7 +66,6 @@ public class Configuration | |||||||
|     public bool SaveResizedSubfiles { init; get; } |     public bool SaveResizedSubfiles { init; get; } | ||||||
|     public string[] SaveShortcutsForOutputResolutions { init; get; } |     public string[] SaveShortcutsForOutputResolutions { init; get; } | ||||||
|     public bool SkipSearch { init; get; } |     public bool SkipSearch { init; get; } | ||||||
|     public int SortingDaysDeltaTolerance { init; get; } |  | ||||||
|     public int SortingMaximumPerFaceShouldBeHigh { init; get; } |     public int SortingMaximumPerFaceShouldBeHigh { init; get; } | ||||||
|     public int SortingMaximumPerKey { init; get; } |     public int SortingMaximumPerKey { init; get; } | ||||||
|     public int SortingMinimumToUseSigma { init; get; } |     public int SortingMinimumToUseSigma { init; get; } | ||||||
| @ -81,11 +81,9 @@ public class Configuration | |||||||
|                          bool distanceMoveUnableToMatch, |                          bool distanceMoveUnableToMatch, | ||||||
|                          int distancePixelDistanceTolerance, |                          int distancePixelDistanceTolerance, | ||||||
|                          bool distanceRenameToMatch, |                          bool distanceRenameToMatch, | ||||||
|                          int faceDistanceAreaPermilleTolerance, |  | ||||||
|                          int faceDistanceHiddenImageFactor, |                          int faceDistanceHiddenImageFactor, | ||||||
|                          double faceDistanceMinimumConfidence, |                          int faceConfidencePercent, | ||||||
|                          int faceDistancePermyriad, |                          int faceDistancePermyriad, | ||||||
|                          double faceDistanceTolerance, |  | ||||||
|                          bool forceFaceLastWriteTimeToCreationTime, |                          bool forceFaceLastWriteTimeToCreationTime, | ||||||
|                          bool forceMetadataLastWriteTimeToCreationTime, |                          bool forceMetadataLastWriteTimeToCreationTime, | ||||||
|                          bool forceResizeLastWriteTimeToCreationTime, |                          bool forceResizeLastWriteTimeToCreationTime, | ||||||
| @ -95,7 +93,6 @@ public class Configuration | |||||||
|                          string[] loadOrCreateThenSaveDistanceResultsForOutputResolutions, |                          string[] loadOrCreateThenSaveDistanceResultsForOutputResolutions, | ||||||
|                          string[] loadOrCreateThenSaveImageFacesResultsForOutputResolutions, |                          string[] loadOrCreateThenSaveImageFacesResultsForOutputResolutions, | ||||||
|                          bool loadOrCreateThenSaveIndex, |                          bool loadOrCreateThenSaveIndex, | ||||||
|                          int locationConfidenceFactor, |  | ||||||
|                          int locationDigits, |                          int locationDigits, | ||||||
|                          int locationFactor, |                          int locationFactor, | ||||||
|                          int? mappedMaxIndex, |                          int? mappedMaxIndex, | ||||||
| @ -122,6 +119,10 @@ public class Configuration | |||||||
|                          bool propertiesChangedForIndex, |                          bool propertiesChangedForIndex, | ||||||
|                          bool propertiesChangedForMetadata, |                          bool propertiesChangedForMetadata, | ||||||
|                          bool propertiesChangedForResize, |                          bool propertiesChangedForResize, | ||||||
|  |                          int[] rangeDaysDeltaTolerance, | ||||||
|  |                          int[] rangeFaceAreaPermilleTolerance, | ||||||
|  |                          double[] rangeFaceConfidence, | ||||||
|  |                          double[] rangeDistanceTolerance, | ||||||
|                          bool retryImagesWithoutAFace, |                          bool retryImagesWithoutAFace, | ||||||
|                          bool reverse, |                          bool reverse, | ||||||
|                          string[] saveFaceLandmarkForOutputResolutions, |                          string[] saveFaceLandmarkForOutputResolutions, | ||||||
| @ -130,7 +131,6 @@ public class Configuration | |||||||
|                          bool saveResizedSubfiles, |                          bool saveResizedSubfiles, | ||||||
|                          string[] saveShortcutsForOutputResolutions, |                          string[] saveShortcutsForOutputResolutions, | ||||||
|                          bool skipSearch, |                          bool skipSearch, | ||||||
|                          int sortingDaysDeltaTolerance, |  | ||||||
|                          int sortingMaximumPerFaceShouldBeHigh, |                          int sortingMaximumPerFaceShouldBeHigh, | ||||||
|                          int sortingMaximumPerKey, |                          int sortingMaximumPerKey, | ||||||
|                          int sortingSigma, |                          int sortingSigma, | ||||||
| @ -145,11 +145,9 @@ public class Configuration | |||||||
|         DistanceMoveUnableToMatch = distanceMoveUnableToMatch; |         DistanceMoveUnableToMatch = distanceMoveUnableToMatch; | ||||||
|         DistancePixelDistanceTolerance = distancePixelDistanceTolerance; |         DistancePixelDistanceTolerance = distancePixelDistanceTolerance; | ||||||
|         DistanceRenameToMatch = distanceRenameToMatch; |         DistanceRenameToMatch = distanceRenameToMatch; | ||||||
|         FaceDistanceAreaPermilleTolerance = faceDistanceAreaPermilleTolerance; |  | ||||||
|         FaceDistanceHiddenImageFactor = faceDistanceHiddenImageFactor; |         FaceDistanceHiddenImageFactor = faceDistanceHiddenImageFactor; | ||||||
|         FaceDistanceMinimumConfidence = faceDistanceMinimumConfidence; |         FaceConfidencePercent = faceConfidencePercent; | ||||||
|         FaceDistancePermyriad = faceDistancePermyriad; |         FaceDistancePermyriad = faceDistancePermyriad; | ||||||
|         FaceDistanceTolerance = faceDistanceTolerance; |  | ||||||
|         ForceFaceLastWriteTimeToCreationTime = forceFaceLastWriteTimeToCreationTime; |         ForceFaceLastWriteTimeToCreationTime = forceFaceLastWriteTimeToCreationTime; | ||||||
|         ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime; |         ForceMetadataLastWriteTimeToCreationTime = forceMetadataLastWriteTimeToCreationTime; | ||||||
|         ForceResizeLastWriteTimeToCreationTime = forceResizeLastWriteTimeToCreationTime; |         ForceResizeLastWriteTimeToCreationTime = forceResizeLastWriteTimeToCreationTime; | ||||||
| @ -159,7 +157,6 @@ public class Configuration | |||||||
|         LoadOrCreateThenSaveDistanceResultsForOutputResolutions = loadOrCreateThenSaveDistanceResultsForOutputResolutions; |         LoadOrCreateThenSaveDistanceResultsForOutputResolutions = loadOrCreateThenSaveDistanceResultsForOutputResolutions; | ||||||
|         LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = loadOrCreateThenSaveImageFacesResultsForOutputResolutions; |         LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = loadOrCreateThenSaveImageFacesResultsForOutputResolutions; | ||||||
|         LoadOrCreateThenSaveIndex = loadOrCreateThenSaveIndex; |         LoadOrCreateThenSaveIndex = loadOrCreateThenSaveIndex; | ||||||
|         LocationConfidenceFactor = locationConfidenceFactor; |  | ||||||
|         LocationDigits = locationDigits; |         LocationDigits = locationDigits; | ||||||
|         LocationFactor = locationFactor; |         LocationFactor = locationFactor; | ||||||
|         MappedMaxIndex = mappedMaxIndex; |         MappedMaxIndex = mappedMaxIndex; | ||||||
| @ -186,6 +183,10 @@ public class Configuration | |||||||
|         PropertiesChangedForIndex = propertiesChangedForIndex; |         PropertiesChangedForIndex = propertiesChangedForIndex; | ||||||
|         PropertiesChangedForMetadata = propertiesChangedForMetadata; |         PropertiesChangedForMetadata = propertiesChangedForMetadata; | ||||||
|         PropertiesChangedForResize = propertiesChangedForResize; |         PropertiesChangedForResize = propertiesChangedForResize; | ||||||
|  |         RangeDaysDeltaTolerance = rangeDaysDeltaTolerance; | ||||||
|  |         RangeFaceAreaPermilleTolerance = rangeFaceAreaPermilleTolerance; | ||||||
|  |         RangeFaceConfidence = rangeFaceConfidence; | ||||||
|  |         RangeDistanceTolerance = rangeDistanceTolerance; | ||||||
|         RetryImagesWithoutAFace = retryImagesWithoutAFace; |         RetryImagesWithoutAFace = retryImagesWithoutAFace; | ||||||
|         Reverse = reverse; |         Reverse = reverse; | ||||||
|         SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions; |         SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions; | ||||||
| @ -194,7 +195,6 @@ public class Configuration | |||||||
|         SaveResizedSubfiles = saveResizedSubfiles; |         SaveResizedSubfiles = saveResizedSubfiles; | ||||||
|         SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions; |         SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions; | ||||||
|         SkipSearch = skipSearch; |         SkipSearch = skipSearch; | ||||||
|         SortingDaysDeltaTolerance = sortingDaysDeltaTolerance; |  | ||||||
|         SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh; |         SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh; | ||||||
|         SortingMaximumPerKey = sortingMaximumPerKey; |         SortingMaximumPerKey = sortingMaximumPerKey; | ||||||
|         SortingMinimumToUseSigma = sortingSigma; |         SortingMinimumToUseSigma = sortingSigma; | ||||||
|  | |||||||
| @ -141,7 +141,7 @@ public class UnitTestFace | |||||||
|         const int ToleranceAfterFactor = 600; |         const int ToleranceAfterFactor = 600; | ||||||
|         Assert.IsTrue(DistanceDigits == 3); |         Assert.IsTrue(DistanceDigits == 3); | ||||||
|         Assert.IsTrue(DistanceFactor == 1000); |         Assert.IsTrue(DistanceFactor == 1000); | ||||||
|         Assert.IsTrue(_Configuration.FaceDistanceTolerance == 0.6d); |         Assert.IsTrue(_Configuration.RangeDistanceTolerance[1] == 0.6d); | ||||||
|         Assert.IsTrue(ToleranceAfterFactor == 600); |         Assert.IsTrue(ToleranceAfterFactor == 600); | ||||||
|         double valueA = 0.00001d; |         double valueA = 0.00001d; | ||||||
|         int checkA = (int)(Math.Round(valueA, _Configuration.LocationDigits) * _Configuration.LocationFactor); |         int checkA = (int)(Math.Round(valueA, _Configuration.LocationDigits) * _Configuration.LocationFactor); | ||||||
| @ -150,7 +150,7 @@ public class UnitTestFace | |||||||
|         int checkB = (int)(Math.Round(valueB, _Configuration.LocationDigits) * _Configuration.LocationFactor); |         int checkB = (int)(Math.Round(valueB, _Configuration.LocationDigits) * _Configuration.LocationFactor); | ||||||
|         Assert.IsTrue(checkB == 100); |         Assert.IsTrue(checkB == 100); | ||||||
|         Assert.IsTrue(checkB > checkA); |         Assert.IsTrue(checkB > checkA); | ||||||
|         int checkC = (int)(_Configuration.FaceDistanceTolerance * DistanceFactor); |         int checkC = (int)(_Configuration.RangeDistanceTolerance[1] * DistanceFactor); | ||||||
|         Assert.IsTrue(checkC == ToleranceAfterFactor); |         Assert.IsTrue(checkC == ToleranceAfterFactor); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user