This commit is contained in:
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
{
private int _Area;
private int _Days;
private int _Distance;
private int _Confidence;
private readonly int _FaceConfidencePercent;
private readonly int _FaceDistancePermyriad;
private readonly int _SortingDaysDeltaTolerance;
private readonly double _FaceDistanceMinimumConfidence;
private readonly int _FaceDistanceAreaPermilleTolerance;
private readonly int[] _RangeDaysDeltaTolerance;
private readonly int[] _RangeFaceAreaPermilleTolerance;
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;
_SortingDaysDeltaTolerance = sortingDaysDeltaTolerance;
_FaceDistanceMinimumConfidence = faceDistanceMinimumConfidence;
_FaceDistanceAreaPermilleTolerance = faceDistanceAreaPermilleTolerance;
_RangeDaysDeltaTolerance = rangeDaysDeltaTolerance;
_RangeFaceAreaPermilleTolerance = rangeFaceAreaPermilleTolerance;
_SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh;
}
@ -46,10 +51,10 @@ public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport
double b;
double c;
double d;
double faceAreaPermille;
double faceConfidencePercent;
double faceDistancePermyriad;
double sortingDaysDeltaTolerance;
double faceDistanceMinimumConfidence;
double faceDistanceAreaPermilleTolerance;
double rangeDaysDeltaTolerance;
if (useFiltersCounter is null)
{
a = 1f;
@ -87,52 +92,70 @@ public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport
}
if (useFiltersCounter is null)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance;
rangeDaysDeltaTolerance = _RangeDaysDeltaTolerance[1];
faceDistancePermyriad = _FaceDistancePermyriad;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance;
faceConfidencePercent = _FaceConfidencePercent;
faceAreaPermille = _RangeFaceAreaPermilleTolerance[1];
}
else if (useFiltersCounter.Value is 1 or 5 or 9 or 13)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * a;
rangeDaysDeltaTolerance = _RangeDaysDeltaTolerance[1] * a;
faceDistancePermyriad = _FaceDistancePermyriad * c;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * d;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance * d;
faceConfidencePercent = _FaceConfidencePercent * d;
faceAreaPermille = _RangeFaceAreaPermilleTolerance[1] * d;
}
else if (useFiltersCounter.Value is 2 or 6 or 10 or 14)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * c;
rangeDaysDeltaTolerance = _RangeDaysDeltaTolerance[1] * c;
faceDistancePermyriad = _FaceDistancePermyriad * a;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * d;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance * d;
faceConfidencePercent = _FaceConfidencePercent * d;
faceAreaPermille = _RangeFaceAreaPermilleTolerance[1] * d;
}
else if (useFiltersCounter.Value is 3 or 7 or 11 or 15)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * c;
rangeDaysDeltaTolerance = _RangeDaysDeltaTolerance[1] * c;
faceDistancePermyriad = _FaceDistancePermyriad * c;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * b;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance * d;
faceConfidencePercent = _FaceConfidencePercent * b;
faceAreaPermille = _RangeFaceAreaPermilleTolerance[1] * d;
}
else if (useFiltersCounter.Value is 4 or 8 or 12 or 16)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * c;
rangeDaysDeltaTolerance = _RangeDaysDeltaTolerance[1] * c;
faceDistancePermyriad = _FaceDistancePermyriad * c;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * d;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance * b;
faceConfidencePercent = _FaceConfidencePercent * d;
faceAreaPermille = _RangeFaceAreaPermilleTolerance[1] * b;
}
else
{
sortingDaysDeltaTolerance = int.MaxValue;
rangeDaysDeltaTolerance = int.MaxValue;
faceDistancePermyriad = int.MaxValue;
faceDistanceAreaPermilleTolerance = 0;
faceDistanceMinimumConfidence = 0;
faceAreaPermille = 0;
faceConfidencePercent = 0;
}
foreach (Sorting sorting in collection)
{
if (face.Mapping is null || faceDistanceEncoding.NormalizedPixelPercentage is null)
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;
}
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);
results.Add(sortingContainer);
if (results.Count >= _SortingMaximumPerFaceShouldBeHigh)
@ -163,7 +186,7 @@ public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport
throw new NotSupportedException();
if (face.FaceDistance?.Encoding is not FaceRecognitionDotNet.FaceEncoding faceEncoding)
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);
collection.Add(faceDistanceContainer);
}
@ -244,7 +267,7 @@ public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport
return;
progressBar.Tick();
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)
face.SetFaceDistance(faceDistance);
});
@ -317,4 +340,18 @@ public class MapLogicSupport : Shared.Models.Methods.IMapLogicSupport
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<string> _Renamed;
private readonly Serilog.ILogger? _Log;
private readonly int _FaceConfidencePercent;
private readonly bool _DistanceRenameToMatch;
private readonly double _FaceDistanceTolerance;
private readonly double[] _RangeFaceConfidence;
private readonly bool _DistanceMoveUnableToMatch;
private readonly List<string> _AllMappedFaceFiles;
private readonly double[] _RangeDistanceTolerance;
private readonly int _DistancePixelDistanceTolerance;
private readonly List<string> _AllMappedFaceFileNames;
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();
_Moved = new();
@ -28,9 +30,11 @@ public partial class E_Distance
_AllMappedFaceFiles = new();
_AllMappedFaceFileNames = new();
_DuplicateMappedFaceFiles = new();
_RangeFaceConfidence = rangeFaceConfidence;
_Log = Serilog.Log.ForContext<E_Distance>();
_DistanceRenameToMatch = distanceRenameToMatch;
_FaceDistanceTolerance = faceDistanceTolerance;
_FaceConfidencePercent = faceConfidencePercent;
_RangeDistanceTolerance = rangeDistanceTolerance;
_DistanceMoveUnableToMatch = distanceMoveUnableToMatch;
_DistancePixelDistanceTolerance = distancePixelDistanceTolerance;
}
@ -67,7 +71,7 @@ public partial class E_Distance
}
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--)
checkDirectoryName = Path.Combine(checkDirectoryName, directoryNames[i]);
if (!Directory.Exists(checkDirectoryName))
@ -133,9 +137,10 @@ public partial class E_Distance
return result;
}
private static FaceDistanceContainer[] GetFaceDistanceContainers(MappingFromItem mappingFromItem, Face[] filteredFaces)
private FaceDistanceContainer[] GetFaceDistanceContainers(MappingFromItem mappingFromItem, Face[] filteredFaces)
{
FaceDistanceContainer[] results;
int confidencePercent;
FaceDistance faceDistance;
int normalizedPixelPercentage;
FaceDistanceContainer faceDistanceContainer;
@ -144,13 +149,14 @@ public partial class E_Distance
{
if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null)
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);
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
{
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)
face.SetFaceDistance(faceDistance);
}
@ -173,7 +179,7 @@ public partial class E_Distance
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();
Face face;