Force Single Image

This commit is contained in:
2022-08-30 12:49:05 -07:00
parent 7f717258d2
commit 21c549e4ce
9 changed files with 101 additions and 77 deletions

View File

@ -6,6 +6,7 @@ namespace View_by_Distance.Shared.Models;
public class Closest : Properties.IClosest
{
protected readonly bool _AboveTolerance;
protected readonly int _Average;
protected readonly bool? _IsWrongYear;
protected Mapping _Mapping;
@ -13,6 +14,7 @@ public class Closest : Properties.IClosest
protected readonly DateTime _MinimumDateTime;
protected readonly int _NormalizedPixelPercentage;
protected readonly long? _TicksDelta;
public bool AboveTolerance => _AboveTolerance;
public double Average => _Average;
public bool? IsWrongYear => _IsWrongYear;
public Mapping Mapping => _Mapping;
@ -22,8 +24,9 @@ public class Closest : Properties.IClosest
public long? TicksDelta => _TicksDelta;
[JsonConstructor]
public Closest(int average, int normalizedPixelPercentage, bool? isWrongYear, Mapping mapping, double minimum, DateTime minimumDateTime, long? ticksDelta)
public Closest(bool aboveTolerance, int average, int normalizedPixelPercentage, bool? isWrongYear, Mapping mapping, double minimum, DateTime minimumDateTime, long? ticksDelta)
{
_AboveTolerance = aboveTolerance;
_Average = average;
_NormalizedPixelPercentage = normalizedPixelPercentage;
_IsWrongYear = isWrongYear;

View File

@ -6,33 +6,36 @@ namespace View_by_Distance.Shared.Models;
public class Mapping : Properties.IMapping
{
protected readonly int? _ApproximateYears;
protected int? _ApproximateYears;
protected readonly string _DisplayDirectoryName;
protected bool? _Filtered;
protected bool _Forced;
protected readonly int? _NormalizedPixelPercentage;
protected PersonBirthday _PersonBirthday;
public int? ApproximateYears => _ApproximateYears;
public string DisplayDirectoryName => _DisplayDirectoryName;
public bool? Filtered => _Filtered;
public bool Forced => _Forced;
public int? NormalizedPixelPercentage => _NormalizedPixelPercentage;
public PersonBirthday PersonBirthday => _PersonBirthday;
[JsonConstructor]
public Mapping(int? approximateYears, string displayDirectoryName, bool? filtered, int? normalizedPixelPercentage, PersonBirthday personBirthday)
public Mapping(int? approximateYears, string displayDirectoryName, bool? filtered, bool forced, int? normalizedPixelPercentage, PersonBirthday personBirthday)
{
_ApproximateYears = approximateYears;
_DisplayDirectoryName = displayDirectoryName;
_Filtered = filtered;
_Forced = forced;
_NormalizedPixelPercentage = normalizedPixelPercentage;
_PersonBirthday = personBirthday;
}
public Mapping(int? approximateYears, string displayDirectoryName, int? normalizedPixelPercentage, PersonBirthday personBirthday) :
this(approximateYears, displayDirectoryName, null, normalizedPixelPercentage, personBirthday)
public Mapping(int? approximateYears, string displayDirectoryName, bool forced, int? normalizedPixelPercentage, PersonBirthday personBirthday) :
this(approximateYears, displayDirectoryName, null, forced, normalizedPixelPercentage, personBirthday)
{ }
public Mapping(int? approximateYears, string displayDirectoryName, PersonBirthday personBirthday) :
this(approximateYears, displayDirectoryName, null, null, personBirthday)
public Mapping(int? approximateYears, string displayDirectoryName, bool forced, PersonBirthday personBirthday) :
this(approximateYears, displayDirectoryName, null, forced, null, personBirthday)
{ }
public override string ToString()
@ -45,6 +48,4 @@ public class Mapping : Properties.IMapping
public void SetFiltered(bool value) => _Filtered = value;
public void SetPersonBirthday(PersonBirthday personBirthday) => _PersonBirthday = personBirthday;
}

View File

@ -6,6 +6,7 @@ public interface IMapping
public int? ApproximateYears { get; }
public string DisplayDirectoryName { get; }
public bool? Filtered { get; }
public bool Forced { get; }
public int? NormalizedPixelPercentage { get; }
public PersonBirthday PersonBirthday { get; }

View File

@ -3,14 +3,15 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
internal abstract class Closest
{
private static int Get(List<double> faceDistances) => (int)(Math.Round(faceDistances.Average(), Stateless.IClosest.Digits) * Stateless.ILocation.Factor);
private static int Get(double rawAverage) => (int)(Math.Round(rawAverage, Stateless.IClosest.Digits) * Stateless.ILocation.Factor);
private static Models.Closest Get(Models.PersonBirthday personBirthday, Models.Face face, DateTime minimumDateTime, FaceDistance faceDistance)
private static Models.Closest Get(Models.Face face, DateTime minimumDateTime, FaceDistance faceDistance)
{
Models.Closest result;
int average = Get(faceDistance.Distances);
double minimum = faceDistance.Distances.Min();
long? ticksDelta;
double minimum = faceDistance.Distances.Min();
double rawAverage = faceDistance.Distances.Average();
bool aboveTolerance = minimum >= Stateless.IClosest.Tolerance || rawAverage >= Stateless.IClosest.Tolerance;
if (faceDistance.IsWrongYear is null || faceDistance.IsWrongYear.Value)
ticksDelta = null;
else
@ -18,19 +19,20 @@ internal abstract class Closest
ticksDelta = Math.Abs(faceDistance.MinimumDateTime.Ticks - minimumDateTime.Ticks);
if (faceDistance.MinimumDateTime < faceDistance.Mapping.PersonBirthday.Value)
ticksDelta *= 2;
else if (faceDistance.Mapping.ApproximateYears.HasValue && faceDistance.MinimumDateTime < DateTime.Now.AddYears(-faceDistance.Mapping.ApproximateYears.Value))
ticksDelta *= 2;
}
if (minimum > Stateless.IClosest.Tolerance)
faceDistance.Mapping.SetPersonBirthday(personBirthday);
if (face.Location?.NormalizedPixelPercentage is null)
throw new NullReferenceException(nameof(face.Location.NormalizedPixelPercentage));
result = new(average, face.Location.NormalizedPixelPercentage.Value, faceDistance.IsWrongYear, faceDistance.Mapping, minimum, faceDistance.MinimumDateTime, ticksDelta);
int average = Get(rawAverage);
result = new(aboveTolerance, average, face.Location.NormalizedPixelPercentage.Value, faceDistance.IsWrongYear, faceDistance.Mapping, minimum, faceDistance.MinimumDateTime, ticksDelta);
return result;
}
internal static Models.Closest[] GetCollection(Models.PersonBirthday personBirthday, Models.Face face, DateTime minimumDateTime, List<FaceDistance> faceDistances)
internal static Models.Closest[] GetCollection(Models.Face face, DateTime minimumDateTime, List<FaceDistance> faceDistances)
{
Models.Closest[] results;
Models.Closest[] closestCollection = (from l in faceDistances select Get(personBirthday, face, minimumDateTime, l)).ToArray();
Models.Closest[] closestCollection = (from l in faceDistances select Get(face, minimumDateTime, l)).ToArray();
results = (from l in closestCollection orderby l.Average, l.TicksDelta.HasValue, l.TicksDelta select l).ToArray();
return results;
}

View File

@ -5,6 +5,6 @@ public interface IClosest
Models.Closest[] TestStatic_Get(List<FaceDistance> faceDistances);
static Models.Closest[] GetCollection(Models.PersonBirthday personBirthday, Models.Face face, DateTime minimumDateTime, List<FaceDistance> faceDistances) => Closest.GetCollection(personBirthday, face, minimumDateTime, faceDistances);
static Models.Closest[] GetCollection(Models.Face face, DateTime minimumDateTime, List<FaceDistance> faceDistances) => Closest.GetCollection(face, minimumDateTime, faceDistances);
}