diff --git a/.vscode/launch.json b/.vscode/launch.json index b6c138e..11e9fc0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -26,6 +26,34 @@ "console": "externalTerminal", "stopAtEntry": false, "requireExactSource": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach" } ] -} \ No newline at end of file +} +// "AmazonUsername": "phares36@gmail.com", +// "AmazonPassword": "JlPhgtv@63", +// Keep creating the .json file the same way +// However load all .json files at the beginning +// When looping through all files and file not in collection path&name or date is different from collection value +// Get id in normal fashion +// If id is in collection update collection to new path/name +// If not save and add to collection +// Nicéphore Niépce in 1826 or 182 +// Stateless.ILocation.Digits +// locationDigits +// Stateless.ILocation.Factor +// locationFactor +// Stateless.IFaceDistance.Tolerance +// faceDistanceTolerance +// Stateless.IFaceDistance.Permyriad +// faceDistancePermyriad +// Stateless.IPersonBirthday.FirstYear +// personBirthdayFirstYear +// Stateless.IPersonBirthday.Format +// personBirthdayFormat +// Stateless.IPerson.KeyFormat +// personKeyFormat \ No newline at end of file diff --git a/FaceRecognitionDotNet/FaceRecognition.cs b/FaceRecognitionDotNet/FaceRecognition.cs index 1fe8b0c..ddcae4e 100644 --- a/FaceRecognitionDotNet/FaceRecognition.cs +++ b/FaceRecognitionDotNet/FaceRecognition.cs @@ -82,6 +82,8 @@ public class FaceRecognition : DisposableObject detectionConfidence, height, Math.Max(rectangle.Left, 0), + ILocation.Digits, + ILocation.Factor, Math.Min(rectangle.Right, width), Math.Max(rectangle.Top, 0), width, diff --git a/Instance/Models/_A2_People.cs b/Instance/Models/_A2_People.cs index 9f8345f..8eb94c6 100644 --- a/Instance/Models/_A2_People.cs +++ b/Instance/Models/_A2_People.cs @@ -69,7 +69,7 @@ internal class A2_People if (rootResultsDirectory is null) throw new Exception(); Storage storage = new(rootDirectory, rootResultsDirectory, peopleRootDirectory); - results = Shared.Models.Stateless.Methods.IPerson.GetPeople(storage); + results = Shared.Models.Stateless.Methods.IPerson.GetPeople(storage, Shared.Models.Stateless.IPersonBirthday.FirstYear, Shared.Models.Stateless.IPersonBirthday.Format, Shared.Models.Stateless.IPerson.KeyFormat); return results.ToArray(); } diff --git a/Instance/Models/_D_Face.cs b/Instance/Models/_D_Face.cs index 541ded4..e1586cb 100644 --- a/Instance/Models/_D_Face.cs +++ b/Instance/Models/_D_Face.cs @@ -159,7 +159,7 @@ public class D_Face continue; if (face.FaceEncoding is null || face?.Location is null) continue; - location = Shared.Models.Stateless.Methods.ILocation.GetLocation(face.Location, source.Height, source.Width, collection.Count); + location = Shared.Models.Stateless.Methods.ILocation.GetLocation(face.Location, ILocation.Digits, ILocation.Factor, source.Height, source.Width, collection.Count); if (location is null) continue; width = location.Right - location.Left; @@ -173,7 +173,7 @@ public class D_Face } if (File.Exists(fileName)) File.Delete(fileName); - location = Shared.Models.Stateless.Methods.ILocation.GetLocation(IFaceDistance.HiddenImageFactor, face.Location, source.Height, source.Width, collection.Count); + location = Shared.Models.Stateless.Methods.ILocation.GetLocation(IFaceDistance.HiddenImageFactor, face.Location, ILocation.Digits, ILocation.Factor, source.Height, source.Width, collection.Count); if (location is null) continue; width = location.Right - location.Left; @@ -330,7 +330,7 @@ public class D_Face } if (_Configuration.ForceFaceLastWriteTimeToCreationTime) { - results = (from l in results select new Face(results.Count, l)).ToList(); + results = (from l in results select new Face(ILocation.Digits, ILocation.Factor, results.Count, l)).ToList(); normalizedPixelPercentageCollection = Shared.Models.Stateless.Methods.IFace.GetInts(results); normalizedPixelPercentageDistinctCount = normalizedPixelPercentageCollection.Distinct().Count(); if (normalizedPixelPercentageDistinctCount != normalizedPixelPercentageCollection.Length) diff --git a/Instance/Models/_E_Distance.cs b/Instance/Models/_E_Distance.cs index f1d7508..7687d71 100644 --- a/Instance/Models/_E_Distance.cs +++ b/Instance/Models/_E_Distance.cs @@ -35,9 +35,9 @@ internal class E_Distance Sorting[] collection = Shared.Models.Stateless.Methods.ISorting.Sort(sortingCollection); foreach (Sorting sorting in collection) { - if (faceDistanceEncoding.NormalizedPixelPercentage is null) + if (face.Mapping is null || faceDistanceEncoding.NormalizedPixelPercentage is null) throw new NotSupportedException(); - if (sorting.DistancePermyriad > IFaceDistance.Permyriad || sorting.DaysDelta > ISorting.DaysDeltaTolerance) + if (face.Mapping.MappingFromLocation.Confidence < IFaceDistance.MinimumConfidence || sorting.DistancePermyriad > IFaceDistance.Permyriad || sorting.DaysDelta > ISorting.DaysDeltaTolerance) continue; sortingContainer = new(face, sorting); results.Add(sortingContainer); @@ -135,8 +135,7 @@ internal class E_Distance SetFaceDistances(maxDegreeOfParallelism, ticks, outputResolution, selectedFilteredFaces); FaceDistanceContainer[] faceDistanceContainers = GetFaceDistanceContainers(selectedFilteredFaces); results = GetSortingContainersThenSetFaceMappingSortingCollection(maxDegreeOfParallelism, ticks, mapLogic, outputResolution, faceDistanceContainers); - if (results.Length < IFaceDistance.Permyriad) - SaveFaceDistances(eDistanceContentFileName, results); + SaveFaceDistances(eDistanceContentFileName, results); return results; } diff --git a/Instance/Models/_G2_Identify.cs b/Instance/Models/_G2_Identify.cs index 97f5e68..9f2d247 100644 --- a/Instance/Models/_G2_Identify.cs +++ b/Instance/Models/_G2_Identify.cs @@ -89,7 +89,7 @@ public class G2_Identify : Shared.Models.Properties.IIdentify, IIdentify json = File.ReadAllText(named.FullName); Person[] people = a2People.GetPeople(configuration); Dictionary resultKeyValuePairs = new(); - string[] peopleBirthDates = (from l in people select Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(l.Birthday)).ToArray(); + string[] peopleBirthDates = (from l in people select Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(Shared.Models.Stateless.IPersonBirthday.Format, l.Birthday)).ToArray(); Dictionary sourceKeyValuePairs = JsonSerializer.Deserialize>(json); foreach (KeyValuePair keyValuePair in sourceKeyValuePairs) { diff --git a/Map/Models/MapLogic.cs b/Map/Models/MapLogic.cs index 5cd64fb..b8b0009 100644 --- a/Map/Models/MapLogic.cs +++ b/Map/Models/MapLogic.cs @@ -206,7 +206,7 @@ public class MapLogic if (!keyValuePairs.ContainsKey(faceDistanceLength.NormalizedPixelPercentage.Value)) continue; personKeysRangesCollection = GetPersonKeysRangesCollection(keyValuePairs[faceDistanceLength.NormalizedPixelPercentage.Value]); - sorting = ISorting.Get(faceDistanceEncoding, faceDistanceLength, anyLowerThanTolerance, personKeysRangesCollection); + sorting = ISorting.Get(Shared.Models.Stateless.IFaceDistance.Permyriad, Shared.Models.Stateless.IFaceDistance.Tolerance, faceDistanceEncoding, faceDistanceLength, anyLowerThanTolerance, personKeysRangesCollection); if (sorting.DistancePermyriad == 0) continue; if (sorting.Id == faceDistanceEncoding.Id) @@ -254,7 +254,7 @@ public class MapLogic if (personKey is null) continue; personBirthday = IPersonBirthday.GetPersonBirthday(personKey.Value); - personKeyFormatted = IPersonBirthday.GetFormatted(personBirthday); + personKeyFormatted = IPersonBirthday.GetFormatted(Shared.Models.Stateless.IPersonBirthday.Format, personBirthday); if (juliePhares.Contains(personKeyFormatted) && !string.IsNullOrEmpty(copyDirectory)) { if (!Directory.Exists(copyDirectory)) @@ -346,7 +346,7 @@ public class MapLogic personBirthdays = new(); foreach (string personKey in keyValuePair.Value) { - personBirthday = IPersonBirthday.GetPersonBirthday(personKey); + personBirthday = IPersonBirthday.GetPersonBirthday(Shared.Models.Stateless.IPersonBirthday.Format, personKey); if (personBirthday is null) continue; } @@ -398,7 +398,7 @@ public class MapLogic approximateYears = person.ApproximateYears; personBirthday = person.PersonBirthdays[zero]; displayDirectoryName = person.DisplayDirectoryName; - personKeyFormatted = IPersonBirthday.GetFormatted(personBirthday); + personKeyFormatted = IPersonBirthday.GetFormatted(Shared.Models.Stateless.IPersonBirthday.Format, personBirthday); mappingSegmentB = GetMappingSegmentB(_Ticks, personBirthday, approximateYears, face.Mapping.MappingFromItem); face.Mapping.UpdateMappingFromPerson(approximateYears, by, displayDirectoryName, personBirthday, mappingSegmentB); } @@ -415,7 +415,7 @@ public class MapLogic approximateYears = person.ApproximateYears; personBirthday = person.PersonBirthdays[zero]; displayDirectoryName = person.DisplayDirectoryName; - personKeyFormatted = IPersonBirthday.GetFormatted(personBirthday); + personKeyFormatted = IPersonBirthday.GetFormatted(Shared.Models.Stateless.IPersonBirthday.Format, personBirthday); mappingSegmentB = GetMappingSegmentB(_Ticks, personBirthday, approximateYears, face.Mapping.MappingFromItem); face.Mapping.UpdateMappingFromPerson(approximateYears, by, displayDirectoryName, personBirthday, mappingSegmentB); } @@ -490,7 +490,7 @@ public class MapLogic foreach (long personKey in _NotMappedPersonKeys) { personBirthday = IPersonBirthday.GetPersonBirthday(personKey); - personKeyFormatted = IPersonBirthday.GetFormatted(personBirthday); + personKeyFormatted = IPersonBirthday.GetFormatted(Shared.Models.Stateless.IPersonBirthday.Format, personBirthday); directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, $"{facePopulatedKey}NotMapped", personKeyFormatted, Property.Models.Stateless.IResult.AllInOne); saveContainer = new(directory); saveContainers.Add(saveContainer); @@ -583,7 +583,7 @@ public class MapLogic } } face = faceCollection[zero]; - personKeyFormatted = IPersonBirthday.GetFormatted(personBirthday); + personKeyFormatted = IPersonBirthday.GetFormatted(Shared.Models.Stateless.IPersonBirthday.Format, personBirthday); directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, "Shortcuts", personKeyFormatted, subDirectoryName); if (face.FaceEncoding is not null && face.Location?.NormalizedPixelPercentage is not null) copyDirectory = Path.Combine(_ZPropertyHolderContentTicksDirectory, "Images", personKeyFormatted, subDirectoryName); @@ -691,7 +691,7 @@ public class MapLogic if (!keyValuePairs.ContainsKey(sortingContainer.Sorting.NormalizedPixelPercentage)) throw new NotSupportedException(); personBirthdays = keyValuePairs[sortingContainer.Sorting.NormalizedPixelPercentage]; - if (sortingContainer.Sorting.DistancePermyriad > Shared.Models.Stateless.IFaceDistance.Permyriad || sortingContainer.Sorting.DaysDelta > Shared.Models.Stateless.ISorting.DaysDeltaTolerance) + if (sortingContainer.Face.Mapping.MappingFromLocation.Confidence < Shared.Models.Stateless.IFaceDistance.MinimumConfidence || sortingContainer.Sorting.DistancePermyriad > Shared.Models.Stateless.IFaceDistance.Permyriad || sortingContainer.Sorting.DaysDelta > Shared.Models.Stateless.ISorting.DaysDeltaTolerance) continue; for (int i = 0; i < personBirthdays.Length; i++) { @@ -700,7 +700,7 @@ public class MapLogic continue; person = _PeopleKeyValuePairs[personKey]; personBirthday = person.PersonBirthdays[zero]; - personKeyFormatted = IPersonBirthday.GetFormatted(personBirthday); + personKeyFormatted = IPersonBirthday.GetFormatted(Shared.Models.Stateless.IPersonBirthday.Format, personBirthday); mappingSegmentB = GetMappingSegmentB(_Ticks, personBirthday, person.ApproximateYears, sortingContainer.Face.Mapping.MappingFromItem); key = string.Concat(personKeyFormatted, '\t', mappingSegmentB); if (!checkKeyValuePairs.ContainsKey(key)) @@ -770,7 +770,7 @@ public class MapLogic continue; if (string.IsNullOrEmpty(face.Mapping.MappingFromPerson.SegmentB)) throw new NotSupportedException(); - personKeyFormatted = IPersonBirthday.GetFormatted(face.Mapping.MappingFromPerson.PersonBirthday); + personKeyFormatted = IPersonBirthday.GetFormatted(Shared.Models.Stateless.IPersonBirthday.Format, face.Mapping.MappingFromPerson.PersonBirthday); if (face.Mapping.MappingFromPerson.By is null) by = $"{nameof(Mapping)}Null"; else diff --git a/Map/Models/Stateless/SetByDeterministicHashCode.cs b/Map/Models/Stateless/SetByDeterministicHashCode.cs index 8554d8a..0c2880f 100644 --- a/Map/Models/Stateless/SetByDeterministicHashCode.cs +++ b/Map/Models/Stateless/SetByDeterministicHashCode.cs @@ -32,7 +32,7 @@ public class ByDeterministicHashCode Dictionary personKeyValuePairs = new(); foreach (Person person in people) { - personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(person.Birthday); + personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(Shared.Models.Stateless.IPersonBirthday.Format, person.Birthday); if (personKeyValuePairs.ContainsKey(personKeyFormatted)) break; personKeyValuePairs.Add(personKeyFormatted, person); @@ -71,11 +71,11 @@ public class ByDeterministicHashCode { personKeyFormatted = Path.GetFileName(personKeyDirectory); if (!DateTime.TryParseExact(personKeyFormatted, "MM.dd.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime birthday)) - personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKeyFormatted); + personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(Shared.Models.Stateless.IPersonBirthday.Format, personKeyFormatted); else { personBirthday = new PersonBirthday(birthday); - personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(personBirthday); + personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(Shared.Models.Stateless.IPersonBirthday.Format, personBirthday); convertedPersonKeyDirectory = Path.Combine(personDisplayDirectory, personKeyFormatted); if (!Directory.Exists(convertedPersonKeyDirectory)) Directory.Move(personKeyDirectory, convertedPersonKeyDirectory); @@ -89,7 +89,7 @@ public class ByDeterministicHashCode foreach (string personKeyDirectory in personKeyDirectories) { personKeyFormatted = Path.GetFileName(personKeyDirectory); - personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKeyFormatted); + personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(Shared.Models.Stateless.IPersonBirthday.Format, personKeyFormatted); if (personBirthday is null) continue; if (personKeyValuePairs.ContainsKey(personKeyFormatted)) @@ -130,7 +130,7 @@ public class ByDeterministicHashCode personKey = incrementDate.Ticks; personBirthday = new(incrementDate); incrementDate = incrementDate.AddDays(1); - personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(personBirthday); + personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(Shared.Models.Stateless.IPersonBirthday.Format, personBirthday); if (personKeys.Contains(personKey)) continue; personKeys.Add(personKey); @@ -174,7 +174,7 @@ public class ByDeterministicHashCode personBirthday = null; else { - personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKeyFormatted); + personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(Shared.Models.Stateless.IPersonBirthday.Format, personKeyFormatted); if (personBirthday is null) continue; personKey = personBirthday.Value.Ticks; @@ -208,7 +208,7 @@ public class ByDeterministicHashCode { if (file.EndsWith(".lnk") || file.EndsWith(".json")) continue; - (id, normalizedPixelPercentage) = Shared.Models.Stateless.Methods.IMapping.GetReversedDeterministicHashCodeKey(keyValuePairsAny, keyValuePairs, file); + (id, normalizedPixelPercentage) = Shared.Models.Stateless.Methods.IMapping.GetReversedDeterministicHashCodeKey(Shared.Models.Stateless.ILocation.Digits, keyValuePairsAny, keyValuePairs, file); if (id is null || normalizedPixelPercentage is null) continue; idThenNormalizedPixelPercentageCollection.Add(new(personBirthday, id.Value, normalizedPixelPercentage.Value)); diff --git a/Property/Models/Stateless/IResult.cs b/Property/Models/Stateless/IResult.cs index 8e5ecde..ba13791 100644 --- a/Property/Models/Stateless/IResult.cs +++ b/Property/Models/Stateless/IResult.cs @@ -5,10 +5,10 @@ namespace View_by_Distance.Property.Models.Stateless; public interface IResult { - public const string Content = "()"; - public const string Singleton = "{}"; - public const string Collection = "[]"; - public const string AllInOne = "_ _ _"; + const string Content = "()"; + const string Singleton = "{}"; + const string Collection = "[]"; + const string AllInOne = "_ _ _"; string TestStatic_GetRelativePath(Configuration configuration, string path); static string GetRelativePath(Configuration configuration, string path) diff --git a/Shared/.vscode/settings.json b/Shared/.vscode/settings.json index a4e70a9..c6871b6 100644 --- a/Shared/.vscode/settings.json +++ b/Shared/.vscode/settings.json @@ -1,5 +1,6 @@ { "cSpell.words": [ + "Permyriad", "Phares" ] } \ No newline at end of file diff --git a/Shared/Models/Face.cs b/Shared/Models/Face.cs index a2358f3..e93b922 100644 --- a/Shared/Models/Face.cs +++ b/Shared/Models/Face.cs @@ -39,11 +39,11 @@ public class Face : Properties.IFace _RelativePath = relativePath; } - public Face(int facesCount, Face face) : + public Face(int locationDigits, int locationFactor, int facesCount, Face face) : this(face.DateTime, null, face.FaceEncoding, face.FaceParts, face.Location, face.LocationIndex, null, face.OutputResolution, face.RelativePath) { if (face.Location?.Confidence is not null && face.OutputResolution is not null) - _Location = new(face.Location.Confidence, face.OutputResolution.Height, face.Location, face.OutputResolution.Width, facesCount); + _Location = new(face.Location.Confidence, face.OutputResolution.Height, face.Location, locationDigits, locationFactor, face.OutputResolution.Width, facesCount); } public Face(Property property, int outputResolutionWidth, int outputResolutionHeight, int outputResolutionOrientation, string relativePath, int? i, Location? location) : diff --git a/Shared/Models/Location.cs b/Shared/Models/Location.cs index 193f09b..59b89f6 100644 --- a/Shared/Models/Location.cs +++ b/Shared/Models/Location.cs @@ -31,15 +31,15 @@ public class Location : Properties.ILocation, IEquatable Stateless.Methods.Location.Check(bottom, left, normalizedPixelPercentage, right, top, zCount: 1); } - public Location(double confidence, int height, Location location, int width, int zCount) : - this(location.Bottom, confidence, location.Left, Stateless.Methods.Location.GetNormalizedPixelPercentage(location.Bottom, height, location.Left, location.Right, location.Top, width, zCount), location.Right, location.Top) => + public Location(double confidence, int height, Location location, int locationDigits, int locationFactor, int width, int zCount) : + this(location.Bottom, confidence, location.Left, Stateless.Methods.Location.GetNormalizedPixelPercentage(location.Bottom, height, location.Left, locationDigits, locationFactor, location.Right, location.Top, width, zCount), location.Right, location.Top) => Stateless.Methods.Location.Check(_Bottom, _Left, _NormalizedPixelPercentage, _Right, _Top, zCount); - public Location(int bottom, double confidence, int height, int left, int right, int top, int width, int zCount) : - this(bottom, confidence, left, Stateless.Methods.Location.GetNormalizedPixelPercentage(bottom, height, left, right, top, width, zCount), right, top) => + public Location(int bottom, double confidence, int height, int left, int locationDigits, int locationFactor, int right, int top, int width, int zCount) : + this(bottom, confidence, left, Stateless.Methods.Location.GetNormalizedPixelPercentage(bottom, height, left, locationDigits, locationFactor, right, top, width, zCount), right, top) => Stateless.Methods.Location.Check(_Bottom, height, _Left, _NormalizedPixelPercentage, _Right, _Top, width, zCount); - public Location(double confidence, int factor, int height, Location location, int width, int zCount) + public Location(double confidence, int factor, int height, Location location, int locationDigits, int locationFactor, int width, int zCount) { int x = (location.Right - location.Left) / factor; int y = (location.Bottom - location.Top) / factor; @@ -47,7 +47,7 @@ public class Location : Properties.ILocation, IEquatable int left = Math.Max(location.Left - x, 0); int right = Math.Min(location.Right + x, width); int top = Math.Max(location.Top - y, 0); - int normalizedPixelPercentage = Stateless.Methods.Location.GetNormalizedPixelPercentage(location.Bottom, height, location.Left, location.Right, location.Top, width, zCount); + int normalizedPixelPercentage = Stateless.Methods.Location.GetNormalizedPixelPercentage(location.Bottom, height, location.Left, locationDigits, locationFactor, location.Right, location.Top, width, zCount); Stateless.Methods.Location.Check(bottom, left, _NormalizedPixelPercentage, right, top, zCount); _Confidence = confidence; _Bottom = bottom; diff --git a/Shared/Models/Properties/IFaceDistance.cs b/Shared/Models/Properties/IFaceDistance.cs index 8bbbc96..a3cded5 100644 --- a/Shared/Models/Properties/IFaceDistance.cs +++ b/Shared/Models/Properties/IFaceDistance.cs @@ -10,5 +10,5 @@ public interface IFaceDistance public double? Length { init; get; } public DateTime? MinimumDateTime { init; get; } public int? NormalizedPixelPercentage { init; get; } - + } \ No newline at end of file diff --git a/Shared/Models/Stateless/IFaceDistance.cs b/Shared/Models/Stateless/IFaceDistance.cs index 4b4309d..4be8356 100644 --- a/Shared/Models/Stateless/IFaceDistance.cs +++ b/Shared/Models/Stateless/IFaceDistance.cs @@ -2,11 +2,13 @@ public interface IFaceDistance { - // 637972153144596958 - // const int MaximumPer = 999; const int HiddenImageFactor = 2; const int Permyriad = 10000; - const double Tolerance = 0.2d; + const double MinimumConfidence = 0.95d; + const double Tolerance = 0.21d; + + // (637987888254767613) Tolerance = 0.31d; MinimumConfidence = 0.80d; => 1003 in 20 minutes with 9 failures + // (637987913910140924) Tolerance = 0.21d; MinimumConfidence = 0.95d; } \ No newline at end of file diff --git a/Shared/Models/Stateless/ILocation.cs b/Shared/Models/Stateless/ILocation.cs index f65c625..8051d28 100644 --- a/Shared/Models/Stateless/ILocation.cs +++ b/Shared/Models/Stateless/ILocation.cs @@ -3,7 +3,6 @@ public interface ILocation { - const double MinimumConfidence = 0.8d; const int Digits = 6; const int Factor = 1000000; diff --git a/Shared/Models/Stateless/ISorting.cs b/Shared/Models/Stateless/ISorting.cs index dd06d51..5f2f766 100644 --- a/Shared/Models/Stateless/ISorting.cs +++ b/Shared/Models/Stateless/ISorting.cs @@ -4,7 +4,7 @@ public interface ISorting { const int FacesToSkipAfterSortBeforeLoad = 0; - const int FacesToTakeAfterSortBeforeLoad = 21000; + const int FacesToTakeAfterSortBeforeLoad = 123000; const int MaximumPerFaceShouldBeHigh = 1000; const int DaysDeltaTolerance = 700; const int MaximumPerKey = 27; diff --git a/Shared/Models/Stateless/Methods/ILocation.cs b/Shared/Models/Stateless/Methods/ILocation.cs index dbbf844..b6ffc54 100644 --- a/Shared/Models/Stateless/Methods/ILocation.cs +++ b/Shared/Models/Stateless/Methods/ILocation.cs @@ -3,24 +3,24 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods; public interface ILocation { // ... - Models.Location? TestStatic_GetLocation(Models.Location? location, int height, int width, int zCount) => - GetLocation(location, height, width, zCount); - static Models.Location? GetLocation(Models.Location? location, int height, int width, int zCount) => - location is null ? null : new(location.Confidence, height, location, width, zCount); + Models.Location? TestStatic_GetLocation(Models.Location? location, int locationDigits, int locationFactor, int height, int width, int zCount) => + GetLocation(location, locationDigits, locationFactor, height, width, zCount); + static Models.Location? GetLocation(Models.Location? location, int locationDigits, int locationFactor, int height, int width, int zCount) => + location is null ? null : new(location.Confidence, height, location, locationDigits, locationFactor, width, zCount); - Models.Location? TestStatic_GetLocation(int factor, Models.Location? location, int height, int width, int zCount) => - GetLocation(location, height, width, zCount); - static Models.Location? GetLocation(int factor, Models.Location? location, int height, int width, int zCount) => - location is null ? null : new(location.Confidence, factor, height, location, width, zCount); + Models.Location? TestStatic_GetLocation(int factor, Models.Location? location, int locationDigits, int locationFactor, int height, int width, int zCount) => + GetLocation(location, locationDigits, locationFactor, height, width, zCount); + static Models.Location? GetLocation(int factor, Models.Location? location, int locationDigits, int locationFactor, int height, int width, int zCount) => + location is null ? null : new(location.Confidence, factor, height, location, locationDigits, locationFactor, width, zCount); int?[] TestStatic_GetInts(List locations) => GetInts(locations); static int?[] GetInts(List locations) => (from l in locations where l.NormalizedPixelPercentage is not null select l.NormalizedPixelPercentage).ToArray(); - int TestStatic_GetNormalizedPixelPercentage(int bottom, int height, int left, int right, int top, int width, int zCount) => - GetNormalizedPixelPercentage(bottom, height, left, right, top, width, zCount); - static int GetNormalizedPixelPercentage(int bottom, int height, int left, int right, int top, int width, int zCount) => - Location.GetNormalizedPixelPercentage(bottom, height, left, right, top, width, zCount); + int TestStatic_GetNormalizedPixelPercentage(int bottom, int height, int left, int locationDigits, int locationFactor, int right, int top, int width, int zCount) => + GetNormalizedPixelPercentage(bottom, height, left, locationDigits, locationFactor, right, top, width, zCount); + static int GetNormalizedPixelPercentage(int bottom, int height, int left, int locationDigits, int locationFactor, int right, int top, int width, int zCount) => + Location.GetNormalizedPixelPercentage(bottom, height, left, locationDigits, locationFactor, right, top, width, zCount); } \ No newline at end of file diff --git a/Shared/Models/Stateless/Methods/IMapping.cs b/Shared/Models/Stateless/Methods/IMapping.cs index 04ca8f7..820e119 100644 --- a/Shared/Models/Stateless/Methods/IMapping.cs +++ b/Shared/Models/Stateless/Methods/IMapping.cs @@ -6,12 +6,12 @@ public interface IMapping static string GetDeterministicHashCodeKeyDisplay(int id, int normalizedPixelPercentage) => $"{id}.{normalizedPixelPercentage}"; - static double GetDeterministicHashCodeKeyValue(int id, int normalizedPixelPercentage) - => Math.Round(double.Parse($"{id}.{normalizedPixelPercentage}"), Stateless.ILocation.Digits); + static double GetDeterministicHashCodeKeyValue(int locationDigits, int id, int normalizedPixelPercentage) + => Math.Round(double.Parse($"{id}.{normalizedPixelPercentage}"), locationDigits); - (int?, int?) TestStatic_GetReversedDeterministicHashCodeKey(bool keyValuePairsAny, Dictionary> keyValuePairs, string file) => - GetReversedDeterministicHashCodeKey(keyValuePairsAny, keyValuePairs, file); - static (int?, int?) GetReversedDeterministicHashCodeKey(bool keyValuePairsAny, Dictionary> keyValuePairs, string file) => - Mapping.GetReversedDeterministicHashCodeKey(keyValuePairsAny, keyValuePairs, file); + (int?, int?) TestStatic_GetReversedDeterministicHashCodeKey(int locationDigits, bool keyValuePairsAny, Dictionary> keyValuePairs, string file) => + GetReversedDeterministicHashCodeKey(locationDigits, keyValuePairsAny, keyValuePairs, file); + static (int?, int?) GetReversedDeterministicHashCodeKey(int locationDigits, bool keyValuePairsAny, Dictionary> keyValuePairs, string file) => + Mapping.GetReversedDeterministicHashCodeKey(locationDigits, keyValuePairsAny, keyValuePairs, file); } \ No newline at end of file diff --git a/Shared/Models/Stateless/Methods/IPerson.cs b/Shared/Models/Stateless/Methods/IPerson.cs index b141747..d2577b6 100644 --- a/Shared/Models/Stateless/Methods/IPerson.cs +++ b/Shared/Models/Stateless/Methods/IPerson.cs @@ -5,19 +5,29 @@ public interface IPerson // ... - Dictionary TestStatic_Split(string knownPeopleFile); - static Dictionary Split(string knownPeopleFile) => Person.Split(knownPeopleFile); + Dictionary TestStatic_Split(int personBirthdayFirstYear, string personKeyFormat, string knownPeopleFile) => + Split(personBirthdayFirstYear, personKeyFormat, knownPeopleFile); + static Dictionary Split(int personBirthdayFirstYear, string personKeyFormat, string knownPeopleFile) => + Person.Split(personBirthdayFirstYear, personKeyFormat, knownPeopleFile); - Models.Person[] TestStatic_GetPeople(Properties.IStorage storage); - static Models.Person[] GetPeople(Properties.IStorage storage) => Person.GetPeople(storage); + Models.Person[] TestStatic_GetPeople(Properties.IStorage storage, int personBirthdayFirstYear, string personBirthdayFormat, string personKeyFormat) => + GetPeople(storage, personBirthdayFirstYear, personBirthdayFormat, personKeyFormat); + static Models.Person[] GetPeople(Properties.IStorage storage, int personBirthdayFirstYear, string personBirthdayFormat, string personKeyFormat) => + Person.GetPeople(storage, personBirthdayFirstYear, personBirthdayFormat, personKeyFormat); - void TestStatic_SavePerson(Properties.IStorage storage, Models.Person person); - static void SavePerson(Properties.IStorage storage, Models.Person person) => Person.SavePerson(storage, person); + void TestStatic_SavePerson(Properties.IStorage storage, string personBirthdayFormat, Models.Person person) => + SavePerson(storage, personBirthdayFormat, person); + static void SavePerson(Properties.IStorage storage, string personBirthdayFormat, Models.Person person) => + Person.SavePerson(storage, personBirthdayFormat, person); - string TestStatic_GetFileFullName(Properties.IStorage storage, Models.Person person); - static string GetFileFullName(Properties.IStorage storage, Models.Person person) => PersonBirthday.GetFileFullName(storage, person.Birthday); + string TestStatic_GetFileFullName(Properties.IStorage storage, string personBirthdayFormat, Models.Person person) => + GetFileFullName(storage, personBirthdayFormat, person); + static string GetFileFullName(Properties.IStorage storage, string personBirthdayFormat, Models.Person person) => + PersonBirthday.GetFileFullName(storage, personBirthdayFormat, person.Birthday); - Models.Person TestStatic_CreatePerson(Properties.IStorage storage, Models.PersonBirthday birthday, Models.PersonName name, List comments, List urls, List numbers, List emails, List addresses); - static Models.Person CreatePerson(Properties.IStorage storage, Models.PersonBirthday birthday, Models.PersonName name, List comments, List urls, List numbers, List emails, List addresses) => Person.CreatePerson(storage, birthday, name, comments, urls, numbers, emails, addresses); + Models.Person TestStatic_CreatePerson(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday birthday, Models.PersonName name, List comments, List urls, List numbers, List emails, List addresses) => + CreatePerson(storage, personBirthdayFormat, birthday, name, comments, urls, numbers, emails, addresses); + static Models.Person CreatePerson(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday birthday, Models.PersonName name, List comments, List urls, List numbers, List emails, List addresses) => + Person.CreatePerson(storage, personBirthdayFormat, birthday, name, comments, urls, numbers, emails, addresses); } \ No newline at end of file diff --git a/Shared/Models/Stateless/Methods/IPersonBirthday.cs b/Shared/Models/Stateless/Methods/IPersonBirthday.cs index 23bc2e9..2a15c45 100644 --- a/Shared/Models/Stateless/Methods/IPersonBirthday.cs +++ b/Shared/Models/Stateless/Methods/IPersonBirthday.cs @@ -16,20 +16,20 @@ public interface IPersonBirthday static double? GetAge(Models.PersonBirthday birthday) => PersonBirthday.GetAge(birthday); - DateTime? TestStatic_GetDateTime(string personKey) => - PersonBirthday.GetDateTime(personKey); - static DateTime? GetDateTime(string personKey) => - PersonBirthday.GetDateTime(personKey); + DateTime? TestStatic_GetDateTime(string personBirthdayFormat, string personKey) => + PersonBirthday.GetDateTime(personBirthdayFormat, personKey); + static DateTime? GetDateTime(string personBirthdayFormat, string personKey) => + PersonBirthday.GetDateTime(personBirthdayFormat, personKey); Models.PersonBirthday TestStatic_GetPersonBirthday(long ticks) => new(new(ticks)); static Models.PersonBirthday GetPersonBirthday(long ticks) => new(new(ticks)); - string TestStatic_GetFileName(Models.PersonBirthday personBirthday) => - PersonBirthday.GetFileName(personBirthday); - static string GetFileName(Models.PersonBirthday personBirthday) => - PersonBirthday.GetFileName(personBirthday); + string TestStatic_GetFileName(string personBirthdayFormat, Models.PersonBirthday personBirthday) => + PersonBirthday.GetFileName(personBirthdayFormat, personBirthday); + static string GetFileName(string personBirthdayFormat, Models.PersonBirthday personBirthday) => + PersonBirthday.GetFileName(personBirthdayFormat, personBirthday); (int, TimeSpan) TestStatic_GetAge(DateTime dateTime, Models.PersonBirthday birthday) => GetAge(dateTime, birthday); @@ -41,15 +41,15 @@ public interface IPersonBirthday static (int, TimeSpan) GetAge(long dateTimeTicks, Models.PersonBirthday birthday) => PersonBirthday.GetAge(dateTimeTicks, birthday); - string TestStatic_GetFormatted(Models.PersonBirthday personBirthday) => - PersonBirthday.GetFormatted(personBirthday); - static string GetFormatted(Models.PersonBirthday personBirthday) => - PersonBirthday.GetFormatted(personBirthday); + string TestStatic_GetFormatted(string personBirthdayFormat, Models.PersonBirthday personBirthday) => + PersonBirthday.GetFormatted(personBirthdayFormat, personBirthday); + static string GetFormatted(string personBirthdayFormat, Models.PersonBirthday personBirthday) => + PersonBirthday.GetFormatted(personBirthdayFormat, personBirthday); - Models.PersonBirthday? TestStatic_GetPersonBirthday(string personKey) => - PersonBirthday.GetPersonBirthday(personKey); - static Models.PersonBirthday? GetPersonBirthday(string personKey) => - PersonBirthday.GetPersonBirthday(personKey); + Models.PersonBirthday? TestStatic_GetPersonBirthday(string personBirthdayFormat, string personKey) => + PersonBirthday.GetPersonBirthday(personBirthdayFormat, personKey); + static Models.PersonBirthday? GetPersonBirthday(string personBirthdayFormat, string personKey) => + PersonBirthday.GetPersonBirthday(personBirthdayFormat, personKey); bool TestStatic_IsCounterPersonBirthday(Models.PersonBirthday personBirthday); static bool IsCounterPersonBirthday(Models.PersonBirthday personBirthday) => @@ -70,10 +70,10 @@ public interface IPersonBirthday static TimeSpan? GetTimeSpan(long minimumDateTimeTicks, bool? isWrongYear, Models.PersonBirthday personBirthday) => PersonBirthday.GetTimeSpan(minimumDateTimeTicks, isWrongYear, personBirthday); - string TestStatic_GetFileFullName(Properties.IStorage storage, Models.PersonBirthday personBirthday) => - PersonBirthday.GetFileFullName(storage, personBirthday); - static string GetFileFullName(Properties.IStorage storage, Models.PersonBirthday personBirthday) => - PersonBirthday.GetFileFullName(storage, personBirthday); + string TestStatic_GetFileFullName(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday personBirthday) => + PersonBirthday.GetFileFullName(storage, personBirthdayFormat, personBirthday); + static string GetFileFullName(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday personBirthday) => + PersonBirthday.GetFileFullName(storage, personBirthdayFormat, personBirthday); bool TestStatic_DoesBirthDateExits(Properties.IStorage storage, Models.PersonBirthday personBirthday) => DoesBirthDateExits(storage, personBirthday); diff --git a/Shared/Models/Stateless/Methods/ISorting.cs b/Shared/Models/Stateless/Methods/ISorting.cs index 4697872..ba2d979 100644 --- a/Shared/Models/Stateless/Methods/ISorting.cs +++ b/Shared/Models/Stateless/Methods/ISorting.cs @@ -8,9 +8,9 @@ public interface ISorting static Models.Sorting[] Sort(List collection) => (from l in collection orderby l.WithinRange, l.DistancePermyriad, l.DaysDelta select l).ToArray(); - Models.Sorting TestStatic_Get(Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, bool anyLowerThanTolerance, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) => - Get(faceDistanceEncoding, faceDistanceLength, anyLowerThanTolerance, personKeysRangesCollection); - static Models.Sorting Get(Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, bool anyLowerThanTolerance, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) => - Sorting.Get(faceDistanceEncoding, faceDistanceLength, anyLowerThanTolerance, personKeysRangesCollection); + Models.Sorting TestStatic_Get(int faceDistancePermyriad, double faceDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, bool anyLowerThanTolerance, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) => + Get(faceDistancePermyriad, faceDistanceTolerance, faceDistanceEncoding, faceDistanceLength, anyLowerThanTolerance, personKeysRangesCollection); + static Models.Sorting Get(int faceDistancePermyriad, double faceDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, bool anyLowerThanTolerance, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) => + Sorting.Get(faceDistancePermyriad, faceDistanceTolerance, faceDistanceEncoding, faceDistanceLength, anyLowerThanTolerance, personKeysRangesCollection); } \ No newline at end of file diff --git a/Shared/Models/Stateless/Methods/Location.cs b/Shared/Models/Stateless/Methods/Location.cs index 4815400..9b467a2 100644 --- a/Shared/Models/Stateless/Methods/Location.cs +++ b/Shared/Models/Stateless/Methods/Location.cs @@ -3,7 +3,7 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods; internal abstract class Location { - internal static int GetNormalizedPixelPercentage(int bottom, int height, int left, int right, int top, int width, int zCount) + internal static int GetNormalizedPixelPercentage(int bottom, int height, int left, int locationDigits, int locationFactor, int right, int top, int width, int zCount) { int result; double value; @@ -15,7 +15,7 @@ internal abstract class Location value = at / total; if (value < 0) value = 3; - result = (int)(Math.Round(value, Stateless.ILocation.Digits) * Stateless.ILocation.Factor); + result = (int)(Math.Round(value, locationDigits) * locationFactor); return result; } diff --git a/Shared/Models/Stateless/Methods/Mapping.cs b/Shared/Models/Stateless/Methods/Mapping.cs index c5d993b..7de94f2 100644 --- a/Shared/Models/Stateless/Methods/Mapping.cs +++ b/Shared/Models/Stateless/Methods/Mapping.cs @@ -5,15 +5,15 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods; internal abstract class Mapping { - internal static double GetDeterministicHashCodeKey(Models.Item item, Models.Face face) + internal static double GetDeterministicHashCodeKey(int locationDigits, Models.Item item, Models.Face face) { if (item.Property?.Id is null || item.ImageFileHolder is null || face.Location?.NormalizedPixelPercentage is null) throw new NullReferenceException(); - double result = IMapping.GetDeterministicHashCodeKeyValue(item.Property.Id.Value, face.Location.NormalizedPixelPercentage.Value); + double result = IMapping.GetDeterministicHashCodeKeyValue(locationDigits, item.Property.Id.Value, face.Location.NormalizedPixelPercentage.Value); return result; } - private static void UseKeyValuePairsSaveFaceEncoding(Dictionary> keyValuePairs, string file, int id, int normalizedPixelPercentageValue, double deterministicHashCodeKey, string extensionLowered) + private static void UseKeyValuePairsSaveFaceEncoding(int locationDigits, Dictionary> keyValuePairs, string file, int id, int normalizedPixelPercentageValue, double deterministicHashCodeKey, string extensionLowered) { string json; string checkFile; @@ -24,7 +24,7 @@ internal abstract class Mapping { if (face.FaceEncoding is null || face.Location?.NormalizedPixelPercentage is null) continue; - if (normalizedPixelPercentageValue != face.Location.NormalizedPixelPercentage.Value && deterministicHashCodeKey != IMapping.GetDeterministicHashCodeKeyValue(id, face.Location.NormalizedPixelPercentage.Value)) + if (normalizedPixelPercentageValue != face.Location.NormalizedPixelPercentage.Value && deterministicHashCodeKey != IMapping.GetDeterministicHashCodeKeyValue(locationDigits, id, face.Location.NormalizedPixelPercentage.Value)) continue; collection.Add(face); } @@ -43,7 +43,7 @@ internal abstract class Mapping } } - private static (int?, int?, double?) GetReversedDeterministicHashCodeKeysFromSegments(bool keyValuePairsAny, Dictionary> keyValuePairs, string file, string[] segments) + private static (int?, int?, double?) GetReversedDeterministicHashCodeKeysFromSegments(int locationDigits, bool keyValuePairsAny, Dictionary> keyValuePairs, string file, string[] segments) { double? result; if (segments.Length != 3) @@ -55,14 +55,14 @@ internal abstract class Mapping result = null; else { - result = IMapping.GetDeterministicHashCodeKeyValue(idValue, normalizedPixelPercentageValue); + result = IMapping.GetDeterministicHashCodeKeyValue(locationDigits, idValue, normalizedPixelPercentageValue); if (keyValuePairsAny && keyValuePairs.ContainsKey(idValue)) - UseKeyValuePairsSaveFaceEncoding(keyValuePairs, file, idValue, normalizedPixelPercentageValue, result.Value, $".{segments[2]}"); + UseKeyValuePairsSaveFaceEncoding(locationDigits, keyValuePairs, file, idValue, normalizedPixelPercentageValue, result.Value, $".{segments[2]}"); } return new(idValue, normalizedPixelPercentageValue, result); } - internal static (int?, int?) GetReversedDeterministicHashCodeKey(bool keyValuePairsAny, Dictionary> keyValuePairs, string file) + internal static (int?, int?) GetReversedDeterministicHashCodeKey(int locationDigits, bool keyValuePairsAny, Dictionary> keyValuePairs, string file) { int? id; int? normalizedPixelPercentage; @@ -75,7 +75,7 @@ internal abstract class Mapping else { string[] segments = fileName.Split('.'); - (id, normalizedPixelPercentage, double? result) = GetReversedDeterministicHashCodeKeysFromSegments(keyValuePairsAny, keyValuePairs, file, segments); + (id, normalizedPixelPercentage, double? result) = GetReversedDeterministicHashCodeKeysFromSegments(locationDigits, keyValuePairsAny, keyValuePairs, file, segments); if (result is null) { id = null; diff --git a/Shared/Models/Stateless/Methods/Person.cs b/Shared/Models/Stateless/Methods/Person.cs index 99b6ca8..3dd5412 100644 --- a/Shared/Models/Stateless/Methods/Person.cs +++ b/Shared/Models/Stateless/Methods/Person.cs @@ -8,7 +8,7 @@ internal abstract class Person // ... - private static List ValidatePerson(Properties.IStorage storage, Models.PersonId id, Models.PersonBirthday birthday, Models.PersonName name) + private static List ValidatePerson(Properties.IStorage storage, string personBirthdayFormat, Models.PersonId id, Models.PersonBirthday birthday, Models.PersonName name) { List results = new(); if (birthday is null) @@ -21,18 +21,18 @@ internal abstract class Person results.Add("Id must be Birthday ticks!"); if (name.First is null || string.IsNullOrEmpty(name.First.Value)) results.Add("Fist Name must be supplied!"); - if (PersonBirthday.DoesBirthDateExits(storage, birthday)) + if (PersonBirthday.DoesBirthDateExits(storage, personBirthdayFormat, birthday)) results.Add("BirthDate already exits!"); return results; } - internal static Models.Person CreatePerson(Properties.IStorage storage, Models.PersonBirthday birthday, Models.PersonName name, List comments, List urls, List numbers, List emails, List addresses) + internal static Models.Person CreatePerson(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday birthday, Models.PersonName name, List comments, List urls, List numbers, List emails, List addresses) { Models.Person result; Models.PersonId id = new(birthday.Value.Ticks); if (birthday.Value == DateTime.MinValue) birthday = PersonBirthday.GetNextBirthDate(storage); - List results = ValidatePerson(storage, id, birthday, name); + List results = ValidatePerson(storage, personBirthdayFormat, id, birthday, name); if (results.Any()) throw new Exception(string.Join(Environment.NewLine, results)); if (comments is null) @@ -61,12 +61,12 @@ internal abstract class Person } } - internal static Dictionary Split(string knownPeopleFile) + internal static Dictionary Split(int personBirthdayFirstYear, string personKeyFormat, string knownPeopleFile) { Dictionary results = new(); string[] segments; DateTime personKey; - DateTime incrementDate = new(Stateless.IPersonBirthday.FirstYear, 1, 1); + DateTime incrementDate = new(personBirthdayFirstYear, 1, 1); string[] lines = File.ReadAllLines(knownPeopleFile); _ = incrementDate.AddDays(lines.Length); System.Globalization.CultureInfo cultureInfo = System.Globalization.CultureInfo.InvariantCulture; @@ -77,8 +77,8 @@ internal abstract class Person segments = line.Replace(" //", "\t//").Split('\t'); if (segments.Length < 1) continue; - SetSegments(ref segments, Stateless.IPerson.KeyFormat, ref incrementDate); - personKey = DateTime.ParseExact(segments[0], Stateless.IPerson.KeyFormat, cultureInfo); + SetSegments(ref segments, personKeyFormat, ref incrementDate); + personKey = DateTime.ParseExact(segments[0], personKeyFormat, cultureInfo); if (results.ContainsKey(personKey)) continue; results.Add(personKey, segments); @@ -90,7 +90,7 @@ internal abstract class Person for (int i = 1; i < (1000 - countBefore); i++) { personKey = minimumDateTime.AddDays(i * -1); - results.Add(personKey, new string[] { personKey.ToString(Stateless.IPerson.KeyFormat) }); + results.Add(personKey, new string[] { personKey.ToString(personKeyFormat) }); } } return results.OrderBy(l => l.Key).ToDictionary(l => l.Key, l => l.Value); @@ -118,7 +118,7 @@ internal abstract class Person SetValues(ref name, ref comment, ref mergeName, splitLine); } - private static Dictionary GetPersonCollection(string knownPeopleFile) + private static Dictionary GetPersonCollection(int personBirthdayFirstYear, string personKeyFormat, string knownPeopleFile) { Dictionary results = new(); string name; @@ -127,7 +127,7 @@ internal abstract class Person string oldName; string mergeName; PersonImport person; - Dictionary splitLines = Split(knownPeopleFile); + Dictionary splitLines = Split(personBirthdayFirstYear, personKeyFormat, knownPeopleFile); foreach (KeyValuePair splitLine in splitLines) { name = string.Empty; @@ -142,9 +142,9 @@ internal abstract class Person return results; } - internal static void SavePerson(Properties.IStorage storage, Models.Person person) + internal static void SavePerson(Properties.IStorage storage, string personBirthdayFormat, Models.Person person) { - string fileName = IPerson.GetFileFullName(storage, person); + string fileName = IPerson.GetFileFullName(storage, personBirthdayFormat, person); string json = JsonSerializer.Serialize(person, new JsonSerializerOptions { WriteIndented = true }); _ = IStorage.WriteAllText(fileName, json, updateDateWhenMatches: true, compareBeforeWrite: true); } @@ -162,7 +162,7 @@ internal abstract class Person return result; } - private static List GetPeopleFromText(Properties.IStorage storage, string localKnownPeopleFile) + private static List GetPeopleFromText(Properties.IStorage storage, int personBirthdayFirstYear, string personBirthdayFormat, string personKeyFormat, string localKnownPeopleFile) { List results = new(); string comment; @@ -174,7 +174,7 @@ internal abstract class Person List emails = new(); List numbers = new(); List addresses = new(); - Dictionary keyValuePairs = GetPersonCollection(localKnownPeopleFile); + Dictionary keyValuePairs = GetPersonCollection(personBirthdayFirstYear, personKeyFormat, localKnownPeopleFile); foreach (KeyValuePair keyValuePair in keyValuePairs) { if (string.IsNullOrEmpty(keyValuePair.Value.Name)) @@ -189,14 +189,14 @@ internal abstract class Person comment = GetComment(urls, comments, keyValuePair); if (!string.IsNullOrEmpty(keyValuePair.Value.OldName)) comments.Add(new(new(keyValuePair.Value.OldName))); - person = IPerson.CreatePerson(storage, birthday, name, comments, urls, numbers, emails, addresses); - SavePerson(storage, person); + person = IPerson.CreatePerson(storage, personBirthdayFormat, birthday, name, comments, urls, numbers, emails, addresses); + SavePerson(storage, personBirthdayFormat, person); results.Add(person); } return results; } - internal static Models.Person[] GetPeople(Properties.IStorage storage) + internal static Models.Person[] GetPeople(Properties.IStorage storage, int personBirthdayFirstYear, string personBirthdayFormat, string personKeyFormat) { List results = new(); string json; @@ -234,7 +234,7 @@ internal abstract class Person results.Add(person); } if (!results.Any()) - results = GetPeopleFromText(storage, localKnownPeopleFile); + results = GetPeopleFromText(storage, personBirthdayFirstYear, personBirthdayFormat, personKeyFormat, localKnownPeopleFile); else if (!string.IsNullOrEmpty(localKnownPeopleFile)) { fileInfo = new FileInfo(localKnownPeopleFile); @@ -242,14 +242,14 @@ internal abstract class Person { foreach (string file in files) File.Delete(file); - results = GetPeopleFromText(storage, localKnownPeopleFile); + results = GetPeopleFromText(storage, personBirthdayFirstYear, personBirthdayFormat, personKeyFormat, localKnownPeopleFile); } } - SaveToDirectory(storage, results); + SaveToDirectory(storage, personBirthdayFormat, results); return results.ToArray(); } - private static void SaveToDirectory(Properties.IStorage storage, List people) + private static void SaveToDirectory(Properties.IStorage storage, string personBirthdayFormat, List people) { int years; TimeSpan? timeSpan; @@ -265,7 +265,7 @@ internal abstract class Person const string pattern = @"[\\,\/,\:,\*,\?,\"",\<,\>,\|]"; foreach (Models.Person person in people) { - personJsonFileName = IPerson.GetFileFullName(storage, person); + personJsonFileName = IPerson.GetFileFullName(storage, personBirthdayFormat, person); if (string.IsNullOrEmpty(peopleDirectory)) peopleDirectory = Path.GetDirectoryName(personJsonFileName); if (string.IsNullOrEmpty(peopleDirectory)) diff --git a/Shared/Models/Stateless/Methods/PersonBirthday.cs b/Shared/Models/Stateless/Methods/PersonBirthday.cs index 649a77a..dce5750 100644 --- a/Shared/Models/Stateless/Methods/PersonBirthday.cs +++ b/Shared/Models/Stateless/Methods/PersonBirthday.cs @@ -8,17 +8,17 @@ internal abstract class PersonBirthday internal static DateTime GetDefaultValue() => DateTime.MinValue; // {{1}}SingletonValue // ... - internal static string GetFormatted(Models.PersonBirthday personBirthday) => personBirthday.Value.ToString(Stateless.IPersonBirthday.Format); - internal static string GetFileName(Models.PersonBirthday personBirthday) => $"{personBirthday.Value.ToString(Stateless.IPersonBirthday.Format)}.json"; - internal static bool DoesBirthDateExits(Properties.IStorage storage, Models.PersonBirthday personBirthday) => File.Exists(GetFileFullName(storage, personBirthday)); + internal static string GetFormatted(string personBirthdayFormat, Models.PersonBirthday personBirthday) => personBirthday.Value.ToString(personBirthdayFormat); + internal static string GetFileName(string personBirthdayFormat, Models.PersonBirthday personBirthday) => $"{personBirthday.Value.ToString(personBirthdayFormat)}.json"; + internal static bool DoesBirthDateExits(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday personBirthday) => File.Exists(GetFileFullName(storage, personBirthdayFormat, personBirthday)); internal static Models.PersonBirthday GetNextBirthDate(Properties.IStorage storage) => throw new Exception(storage.ToString()); // Person.GetNextBirthDate(storage); - internal static string GetFileFullName(Properties.IStorage storage, Models.PersonBirthday personBirthday) => Path.Combine(storage.PeopleRootDirectory, "{}", GetFileName(personBirthday)); - internal static DateTime? GetDateTime(string personKey) => DateTime.TryParseExact(personKey, Stateless.IPersonBirthday.Format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTime) ? dateTime : null; + internal static string GetFileFullName(Properties.IStorage storage, string personBirthdayFormat, Models.PersonBirthday personBirthday) => Path.Combine(storage.PeopleRootDirectory, "{}", GetFileName(personBirthdayFormat, personBirthday)); + internal static DateTime? GetDateTime(string personBirthdayFormat, string personKey) => DateTime.TryParseExact(personKey, personBirthdayFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateTime) ? dateTime : null; - internal static Models.PersonBirthday? GetPersonBirthday(string personKey) + internal static Models.PersonBirthday? GetPersonBirthday(string personBirthdayFormat, string personKey) { Models.PersonBirthday? result; - DateTime? dateTime = GetDateTime(personKey); + DateTime? dateTime = GetDateTime(personBirthdayFormat, personKey); if (dateTime is null) result = null; else diff --git a/Shared/Models/Stateless/Methods/Sorting.cs b/Shared/Models/Stateless/Methods/Sorting.cs index e9065ea..190b59e 100644 --- a/Shared/Models/Stateless/Methods/Sorting.cs +++ b/Shared/Models/Stateless/Methods/Sorting.cs @@ -3,7 +3,7 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods; internal abstract class Sorting { - internal static Models.Sorting Get(Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, bool anyLowerThanTolerance, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) + internal static Models.Sorting Get(int faceDistancePermyriad, double faceDistanceTolerance, Models.FaceDistance faceDistanceEncoding, Models.FaceDistance faceDistanceLength, bool anyLowerThanTolerance, List<(long lcl, long minimum, long maximum, long ucl)> personKeysRangesCollection) { Models.Sorting result; if (faceDistanceLength.Length is null) @@ -14,7 +14,7 @@ internal abstract class Sorting int daysDelta; int withinRange; int distancePermyriad; - if (faceDistanceLength.Length.Value == 0 || (anyLowerThanTolerance && faceDistanceLength.Length.Value >= Stateless.IFaceDistance.Tolerance)) + if (faceDistanceLength.Length.Value == 0 || (anyLowerThanTolerance && faceDistanceLength.Length.Value >= faceDistanceTolerance)) { older = false; daysDelta = 0; @@ -30,7 +30,7 @@ internal abstract class Sorting TimeSpan timeSpan = new(faceDistanceLength.MinimumDateTime.Value.Ticks - ticks); older = timeSpan.TotalMilliseconds < 0; daysDelta = (int)Math.Round(Math.Abs(timeSpan.TotalDays), 0); - distancePermyriad = (int)(faceDistanceLength.Length.Value / Stateless.IFaceDistance.Tolerance * Stateless.IFaceDistance.Permyriad); + distancePermyriad = (int)(faceDistanceLength.Length.Value / faceDistanceTolerance * faceDistancePermyriad); foreach ((long lcl, long minimum, long maximum, long ucl) in personKeysRangesCollection) { if (ticks > minimum && ticks < maximum) diff --git a/Tests/UnitTestResize.cs b/Tests/UnitTestResize.cs index 3e7673d..e807aa9 100644 --- a/Tests/UnitTestResize.cs +++ b/Tests/UnitTestResize.cs @@ -85,8 +85,8 @@ public class UnitTestResize width = 100; height = 100; Location location = new(bottom, confidence, left, null, right, top); - _ = new Location(confidence, height, location, width, 1); - _ = new Location(bottom, confidence, height, left, right, top, width, 1); + _ = new Location(confidence, height, location, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, width, 1); + _ = new Location(bottom, confidence, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); } [TestMethod] @@ -100,7 +100,7 @@ public class UnitTestResize bottom = 10; width = 100; height = 100; - normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(bottom, height, left, right, top, width, 1); + normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(bottom, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); Assert.IsTrue(normalizedPixelPercentage == 40500); left = 50; top = 50; @@ -108,7 +108,7 @@ public class UnitTestResize bottom = 60; width = 100; height = 100; - normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(bottom, height, left, right, top, width, 1); + normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(bottom, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); Assert.IsTrue(normalizedPixelPercentage == 545500); } @@ -123,7 +123,7 @@ public class UnitTestResize bottom = 260; width = 500; height = 500; - normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(bottom, height, left, right, top, width, 1); + normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(bottom, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); Assert.IsTrue(normalizedPixelPercentage == 499000); left = 490; top = 490; @@ -131,7 +131,7 @@ public class UnitTestResize bottom = 510; width = 1000; height = 1000; - normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(bottom, height, left, right, top, width, 1); + normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(bottom, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); Assert.IsTrue(normalizedPixelPercentage == 499500); } @@ -146,7 +146,7 @@ public class UnitTestResize bottom = 80; width = 100; height = 100; - normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(bottom, height, left, right, top, width, 1); + normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(bottom, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 1); Assert.IsTrue(normalizedPixelPercentage == 594000); left = 20; top = 40; @@ -154,7 +154,7 @@ public class UnitTestResize bottom = 80; width = 100; height = 100; - normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(bottom, height, left, right, top, width, 10); + normalizedPixelPercentage = Shared.Models.Stateless.Methods.ILocation.GetNormalizedPixelPercentage(bottom, height, left, Shared.Models.Stateless.ILocation.Digits, Shared.Models.Stateless.ILocation.Factor, right, top, width, 10); Assert.IsTrue(normalizedPixelPercentage == 594000); } diff --git a/package.json b/package.json index cf8fc06..a56c8dc 100644 --- a/package.json +++ b/package.json @@ -20,16 +20,5 @@ "Z-Compare-Publish-": "dotnet publish \"Compare\\Compare.csproj\" --configuration Release --runtime win-x64 --verbosity normal --self-contained true -o \"D:\\net6.0\\View-by-Distance\\Compare\\\"", "Z-Instance-Publish-": "dotnet publish \"Instance\\Instance.csproj\" --configuration Release --runtime win-x64 --verbosity normal --self-contained true -o \"D:\\net6.0\\View-by-Distance\\Instance\\\"", "Z-Instance-CUDA-Publish-": "dotnet publish \"Instance\\Instance.csproj\" --configuration Release --runtime win-x64 --verbosity normal --self-contained true -o \"D:\\net6.0\\View-by-Distance\\Instance-CUDA\\\"" - }, - "Notes": { - "AmazonUsername": "phares36@gmail.com", - "AmazonPassword": "JlPhgtv@63", - "a": "Keep creating the .json file the same way", - "b": "However load all .json files at the beginning", - "c": "When looping through all files and file not in collection path&name or date is different from collection value", - "d": "Get id in normal fashion", - "e": "If id is in collection update collection to new path/name", - "f": "If not save and add to collection", - "g": "Nicéphore Niépce in 1826 or 1827" } } \ No newline at end of file