Range
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
|
Reference in New Issue
Block a user