Face Distance Area Permille Tolerance

This commit is contained in:
2022-09-27 15:50:52 -07:00
parent abe6c80d82
commit 152612bacb
17 changed files with 115 additions and 10 deletions

View File

@ -18,9 +18,10 @@ public class E_Distance : Shared.Models.Methods.IFaceDistance
private readonly bool _DistanceMoveUnableToMatch;
private readonly int _DistancePixelDistanceTolerance;
private readonly double _FaceDistanceMinimumConfidence;
private readonly int _FaceDistanceAreaPermilleTolerance;
private readonly int _SortingMaximumPerFaceShouldBeHigh;
public E_Distance(bool distanceMoveUnableToMatch, int distancePixelDistanceTolerance, double faceDistanceMinimumConfidence, int faceDistancePermyriad, double faceDistanceTolerance, string resultAllInOne, int sortingDaysDeltaTolerance, int sortingMaximumPerFaceShouldBeHigh)
public E_Distance(bool distanceMoveUnableToMatch, int distancePixelDistanceTolerance, int faceDistanceAreaPermilleTolerance, double faceDistanceMinimumConfidence, int faceDistancePermyriad, double faceDistanceTolerance, string resultAllInOne, int sortingDaysDeltaTolerance, int sortingMaximumPerFaceShouldBeHigh)
{
_ResultAllInOne = resultAllInOne;
_Log = Serilog.Log.ForContext<E_Distance>();
@ -30,6 +31,7 @@ public class E_Distance : Shared.Models.Methods.IFaceDistance
_SortingDaysDeltaTolerance = sortingDaysDeltaTolerance;
_FaceDistanceMinimumConfidence = faceDistanceMinimumConfidence;
_DistancePixelDistanceTolerance = distancePixelDistanceTolerance;
_FaceDistanceAreaPermilleTolerance = faceDistanceAreaPermilleTolerance;
_SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh;
}
@ -63,77 +65,89 @@ public class E_Distance : Shared.Models.Methods.IFaceDistance
double faceDistancePermyriad;
double sortingDaysDeltaTolerance;
double faceDistanceMinimumConfidence;
double faceDistanceAreaPermilleTolerance;
if (useFiltersCounter is null)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance;
faceDistancePermyriad = _FaceDistancePermyriad;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence;
}
else if (useFiltersCounter.Value == 1)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * 1.5;
faceDistancePermyriad = _FaceDistancePermyriad;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence;
}
else if (useFiltersCounter.Value == 2)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance;
faceDistancePermyriad = _FaceDistancePermyriad * 1.5;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence;
}
else if (useFiltersCounter.Value == 3)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance;
faceDistancePermyriad = _FaceDistancePermyriad;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * .5;
}
else if (useFiltersCounter.Value == 4)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * 2;
faceDistancePermyriad = _FaceDistancePermyriad * 1.5;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * .5;
}
else if (useFiltersCounter.Value == 5)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * 1.5;
faceDistancePermyriad = _FaceDistancePermyriad * 2;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * .5;
}
else if (useFiltersCounter.Value == 6)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * 1.5;
faceDistancePermyriad = _FaceDistancePermyriad * 1.5;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * .25;
}
else if (useFiltersCounter.Value == 7)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * 2.5;
faceDistancePermyriad = _FaceDistancePermyriad * 2;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * .25;
}
else if (useFiltersCounter.Value == 8)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * 2;
faceDistancePermyriad = _FaceDistancePermyriad * 2.5;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance;
faceDistanceMinimumConfidence = _FaceDistanceMinimumConfidence * .25;
}
else if (useFiltersCounter.Value == 9)
{
sortingDaysDeltaTolerance = _SortingDaysDeltaTolerance * 2;
faceDistancePermyriad = _FaceDistancePermyriad * 2;
faceDistanceAreaPermilleTolerance = _FaceDistanceAreaPermilleTolerance;
faceDistanceMinimumConfidence = 0;
}
else
{
sortingDaysDeltaTolerance = int.MaxValue;
faceDistancePermyriad = int.MaxValue;
faceDistanceAreaPermilleTolerance = 0;
faceDistanceMinimumConfidence = 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)
if (sorting.DaysDelta > sortingDaysDeltaTolerance || sorting.DistancePermyriad > faceDistancePermyriad || face.Mapping.MappingFromLocation.Confidence < faceDistanceMinimumConfidence || face.Mapping.MappingFromLocation.AreaPermille < faceDistanceAreaPermilleTolerance)
continue;
sortingContainer = new(face, sorting);
results.Add(sortingContainer);
@ -433,7 +447,7 @@ public class E_Distance : Shared.Models.Methods.IFaceDistance
return results;
}
private static List<(Face Face, double Length)> GetValues(double faceDistanceTolerance, MappingFromItem mappingFromItem, List<Face> faces, string json)
private List<(Face Face, double Length)> GetValues(MappingFromItem mappingFromItem, List<Face> faces, string json)
{
List<(Face Face, double Length)> results = new();
Face face;
@ -459,17 +473,17 @@ public class E_Distance : Shared.Models.Methods.IFaceDistance
faceDistanceLength = faceDistanceLengths[i];
if (faceDistanceLength.Length is null)
throw new NotSupportedException();
if (faceDistanceLength.Length.Value > faceDistanceTolerance)
if (faceDistanceLength.Length.Value > _FaceDistanceTolerance)
continue;
results.Add(new(face, faceDistanceLength.Length.Value));
}
return results;
}
private static Face[] GetMatchingFaces(double faceDistanceTolerance, MappingFromItem mappingFromItem, List<Face> faces, string json)
private Face[] GetMatchingFaces(MappingFromItem mappingFromItem, List<Face> faces, string json)
{
Face[] results;
List<(Face Face, double Length)> collection = GetValues(faceDistanceTolerance, mappingFromItem, faces, json);
List<(Face Face, double Length)> collection = GetValues(mappingFromItem, faces, json);
if (!collection.Any())
results = Array.Empty<Face>();
else
@ -623,7 +637,7 @@ public class E_Distance : Shared.Models.Methods.IFaceDistance
checkFaces.Clear();
if (json is null)
throw new NotSupportedException();
checkFaces.AddRange(GetMatchingFaces(_FaceDistanceTolerance, mappingFromItem, faces, json));
checkFaces.AddRange(GetMatchingFaces(mappingFromItem, faces, json));
}
if (checkFaces.Count != 1 && _DistancePixelDistanceTolerance > 0)
{