This commit is contained in:
Mike Phares 2022-10-23 22:45:55 -07:00
parent ff2fa4e474
commit 239acf2699
32 changed files with 398 additions and 252 deletions

View File

@ -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;
}
} }

View File

@ -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;

View File

@ -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,

View File

@ -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;

View File

@ -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);

View File

@ -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)

View File

@ -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,

View File

@ -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;

View File

@ -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"

View File

@ -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": [

View File

@ -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": [

View File

@ -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;
} }

View File

@ -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)
{ {

View File

@ -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;
} }

View File

@ -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;

View File

@ -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;
} }

View File

@ -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);
} }

View File

@ -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; }

View File

@ -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; }

View File

@ -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()

View File

@ -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) =>

View File

@ -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);

View File

@ -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);
} }

View File

@ -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;
}
} }

View File

@ -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;
} }

View File

@ -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

View File

@ -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,

View File

@ -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;

View File

@ -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);
}
} }

View File

@ -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,

View File

@ -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;

View File

@ -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);
} }