From 1ec9b7673d254b8e20be73a9e3e0f4cbf31a1e31 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Sat, 17 Sep 2022 01:46:16 -0700 Subject: [PATCH] Bug fix and clean up --- .vscode/launch.json | 9 +- Instance/DlibDotNet.cs | 42 +++++---- Instance/Models/Binder/Configuration.cs | 6 +- Instance/Models/Configuration.cs | 3 + Instance/Models/_E_Distance.cs | 4 +- Instance/appsettings.Development.json | 1 + Instance/appsettings.Staging.json | 1 + Instance/appsettings.json | 1 + Map/Models/Configuration.cs | 3 + Map/Models/MapLogic.cs | 85 ++----------------- Shared/Models/FaceFileSystem.cs | 2 +- .../Stateless/Methods/FaceFileSystem.cs | 2 +- .../Models/Binder/Configuration.cs | 6 +- .../Models/Configuration.cs | 3 + 14 files changed, 70 insertions(+), 98 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 421c7c7..d38f57b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -42,4 +42,11 @@ // 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 \ No newline at end of file +// Nicéphore Niépce in 1826 or 182 +// https://dotnet.microsoft.com/en-us/download +// https://git-scm.com/ +// https://code.visualstudio.com/ +// https://github.com/mikepharesjr/VS-Code-Settings +// https://github.com/davisking/dlib-models +// https://github.com/mikepharesjr/View-by-Distance-MKLink-Console +// https://184.103.9.214/login?folder=/home/vscode/Notes&to= \ No newline at end of file diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index d2d0e22..7e1fdca 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -94,7 +94,7 @@ public partial class DlibDotNet } if (!configuration.SkipSearch) Search(model, predictorModel, argZero, propertyRoot, people); - if (!_FirstRun && _Exceptions.Count == 0 && _ArgZeroIsConfigurationRootDirectory) + if (!_FirstRun && !_IsEnvironment.Development && _Exceptions.Count == 0 && _ArgZeroIsConfigurationRootDirectory) { long ticks = DateTime.Now.Ticks; List directoryCollections = _Rename.GetDirectoryRenameCollections(propertyConfiguration, model, predictorModel, relativePath: string.Empty, newDirectoryName: string.Empty, jsonFiles4InfoAny: false); @@ -666,6 +666,7 @@ public partial class DlibDotNet private List SetMappingThenGetDistinctFilteredFacesWithMapping(string argZero, Container[] containers) { List results = new(); + bool added; Mapping mapping; bool? isWrongYear; Item[] filteredItems; @@ -690,12 +691,13 @@ public partial class DlibDotNet continue; if (!item.Faces.Any()) continue; + added = false; foreach (Face face in item.Faces) { + if (face.RelativePath != item.RelativePath) + break; if (face.FaceEncoding is null || face.Location?.NormalizedPixelPercentage is null) continue; - if (distinctCheck.Contains(item.Property.Id.Value)) - continue; minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property); (isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime); mappingFromItem = new(item.Property.Id.Value, item.ImageFileHolder, isWrongYear, minimumDateTime, item.ResizedFileHolder); @@ -705,7 +707,10 @@ public partial class DlibDotNet mapping = new(mappingFromItem, mappingFromLocation, mappingFromPerson); face.SetMapping(mapping); results.Add(face); + added = true; } + if (added) + distinctCheck.Add(item.Property.Id.Value); } } return results; @@ -744,6 +749,7 @@ public partial class DlibDotNet _Configuration.LocationFactor, _Configuration.MapLogicSigma, _Configuration.MappingSaveFaceEncoding, + _Configuration.MappingSaveNotMapped, _Configuration.MappingSaveMapped, _Configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping, _Configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping, @@ -770,7 +776,8 @@ public partial class DlibDotNet int totalNotMapped = mapLogic.AddToMapping(distinctFilteredFaces); if (totalNotMapped > 0) mapLogic.ForceSingleImageThenSaveMapping(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, dFacesContentDirectory, d2ResultsFullGroupDirectory, distinctFilteredFaces, sortingContainers, totalNotMapped); - mapLogic.SaveNotMappedTicks(_Configuration.PropertyConfiguration); + if (configuration.MappingSaveNotMapped) + mapLogic.SaveNotMappedTicks(_Configuration.PropertyConfiguration); if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution)) mapLogic.SaveShortcuts(_Configuration.JuliePhares, distinctFilteredFaces); } @@ -821,13 +828,13 @@ public partial class DlibDotNet (aResultsFullGroupDirectory, bResultsFullGroupDirectory, cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, eResultsFullGroupDirectory) = GetResultsFullGroupDirectories(model, predictorModel, outputResolution); if (_ArgZeroIsConfigurationRootDirectory && _Configuration.SaveResizedSubfiles && outputResolution == _Configuration.OutputResolutions[0] && _Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution) && _Exceptions.Count == 0) { - DistanceThenMapLogic(argZero, ticks, people, containers, mapLogic, dResultsFullGroupDirectory, eResultsFullGroupDirectory, d2ResultsFullGroupDirectory, zResultsFullGroupDirectory, peopleDateGroupDirectory, outputResolution); if (!_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Any()) break; - if (_FileKeyValuePairs.Any()) - _Random.Random(_Configuration.PropertyConfiguration, _Configuration.OutputResolutions[0], _FileKeyValuePairs); + DistanceThenMapLogic(argZero, ticks, people, containers, mapLogic, dResultsFullGroupDirectory, eResultsFullGroupDirectory, d2ResultsFullGroupDirectory, zResultsFullGroupDirectory, peopleDateGroupDirectory, outputResolution); if (_IsEnvironment.Development) continue; + if (_FileKeyValuePairs.Any()) + _Random.Random(_Configuration.PropertyConfiguration, _Configuration.OutputResolutions[0], _FileKeyValuePairs); G2_Identify identify = new(_Configuration); List identifiedCollection = identify.GetIdentifiedCollection(_Configuration.PropertyConfiguration, _IsEnvironment, _People); _People.WriteAllText(_Configuration.PropertyConfiguration, _Configuration.OutputResolutions[0], identifiedCollection); @@ -835,15 +842,18 @@ public partial class DlibDotNet if (_Configuration.LoadOrCreateThenSaveIndex && _FilePropertiesKeyValuePairs.Any()) _Index.SetIndex(_Configuration.PropertyConfiguration, model, predictorModel, _Configuration.OutputResolutions[0], _FilePropertiesKeyValuePairs); } - _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Path.Combine(aResultsFullGroupDirectory, "{}")); - _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Path.Combine(bResultsFullGroupDirectory, "{}")); - _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Path.Combine(cResultsFullGroupDirectory, "{}")); - if (_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Contains(outputResolution)) - _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Path.Combine(dResultsFullGroupDirectory, "[]")); - if (_Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution)) - _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Path.Combine(eResultsFullGroupDirectory, "[]")); - if (_Configuration.SaveFaceLandmarkForOutputResolutions.Contains(outputResolution)) - _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Path.Combine(d2ResultsFullGroupDirectory, "[]")); + if (!_IsEnvironment.Development) + { + _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Path.Combine(aResultsFullGroupDirectory, "{}")); + _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Path.Combine(bResultsFullGroupDirectory, "{}")); + _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Path.Combine(cResultsFullGroupDirectory, "{}")); + if (_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Contains(outputResolution)) + _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Path.Combine(dResultsFullGroupDirectory, "[]")); + if (_Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution)) + _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Path.Combine(eResultsFullGroupDirectory, "[]")); + if (_Configuration.SaveFaceLandmarkForOutputResolutions.Contains(outputResolution)) + _ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(Path.Combine(d2ResultsFullGroupDirectory, "[]")); + } } } diff --git a/Instance/Models/Binder/Configuration.cs b/Instance/Models/Binder/Configuration.cs index dfc41d0..7d7bb50 100644 --- a/Instance/Models/Binder/Configuration.cs +++ b/Instance/Models/Binder/Configuration.cs @@ -32,7 +32,8 @@ public class Configuration [Display(Name = "Map Logic Sigma"), Required] public int? MapLogicSigma { get; set; } [Display(Name = "Mapped Max Index"), Required] public int? MappedMaxIndex { get; set; } [Display(Name = "Mapping Save Face Encoding"), Required] public bool? MappingSaveFaceEncoding { get; set; } - [Display(Name = "MappingSaveMapped"), Required] public bool? MappingSaveMapped { get; set; } + [Display(Name = "Mapping Save Mapped"), Required] public bool? MappingSaveMapped { get; set; } + [Display(Name = "Mapping Save Not Mapped"), Required] public bool? MappingSaveNotMapped { get; set; } [Display(Name = "Mapping Use Deterministic Hash Code Unknown Face Key Value Pairs for Add to Mapping"), Required] public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { get; set; } [Display(Name = "Mapping Use Deterministic Hash Code Unknown Face Key Value Pairs for Save Mapping"), Required] public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { get; set; } [Display(Name = "Max Items In Distance Collection"), Required] public int? MaxItemsInDistanceCollection { get; set; } @@ -124,6 +125,8 @@ public class Configuration throw new NullReferenceException(nameof(configuration.MapLogicSigma)); if (configuration.MappingSaveFaceEncoding is null) throw new NullReferenceException(nameof(configuration.MappingSaveFaceEncoding)); + if (configuration.MappingSaveNotMapped is null) + throw new NullReferenceException(nameof(configuration.MappingSaveNotMapped)); if (configuration.MappingSaveMapped is null) throw new NullReferenceException(nameof(configuration.MappingSaveMapped)); if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping is null) @@ -227,6 +230,7 @@ public class Configuration configuration.MapLogicSigma.Value, configuration.MappedMaxIndex, configuration.MappingSaveFaceEncoding.Value, + configuration.MappingSaveNotMapped.Value, configuration.MappingSaveMapped.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value, diff --git a/Instance/Models/Configuration.cs b/Instance/Models/Configuration.cs index fc554e2..f806214 100644 --- a/Instance/Models/Configuration.cs +++ b/Instance/Models/Configuration.cs @@ -31,6 +31,7 @@ public class Configuration public int MapLogicSigma { init; get; } public int? MappedMaxIndex { init; get; } public bool MappingSaveFaceEncoding { init; get; } + public bool MappingSaveNotMapped { init; get; } public bool MappingSaveMapped { init; get; } public bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { init; get; } public bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { init; get; } @@ -95,6 +96,7 @@ public class Configuration int mapLogicSigma, int? mappedMaxIndex, bool mappingSaveFaceEncoding, + bool mappingSaveNotMapped, bool mappingSaveMapped, bool mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping, bool mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping, @@ -158,6 +160,7 @@ public class Configuration MapLogicSigma = mapLogicSigma; MappedMaxIndex = mappedMaxIndex; MappingSaveFaceEncoding = mappingSaveFaceEncoding; + MappingSaveNotMapped = mappingSaveNotMapped; MappingSaveMapped = mappingSaveMapped; MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping = mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping; MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping = mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping; diff --git a/Instance/Models/_E_Distance.cs b/Instance/Models/_E_Distance.cs index 8b5191d..18c5209 100644 --- a/Instance/Models/_E_Distance.cs +++ b/Instance/Models/_E_Distance.cs @@ -96,8 +96,10 @@ internal class E_Distance : Shared.Models.Methods.IFaceDistance List collection = new(); foreach (Face face in selectedFilteredFaces) { - if (face.FaceDistance?.Encoding is not FaceRecognitionDotNet.FaceEncoding faceEncoding || face.Mapping is null) + if (face.Mapping is null) 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); faceDistanceContainer = new(face, faceDistance); collection.Add(faceDistanceContainer); diff --git a/Instance/appsettings.Development.json b/Instance/appsettings.Development.json index fed7b63..12fc0d3 100644 --- a/Instance/appsettings.Development.json +++ b/Instance/appsettings.Development.json @@ -71,6 +71,7 @@ "MappedMaxIndex": 1034720, "MappingSaveFaceEncoding": false, "MappingSaveMapped": false, + "MappingSaveNotMapped": false, "MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping": false, "MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping": false, "MaxImagesInDirectoryForTopLevelFirstPass": 10, diff --git a/Instance/appsettings.Staging.json b/Instance/appsettings.Staging.json index 33cbee2..83e8d4a 100644 --- a/Instance/appsettings.Staging.json +++ b/Instance/appsettings.Staging.json @@ -71,6 +71,7 @@ "MappedMaxIndex": 1034720, "MappingSaveFaceEncoding": false, "MappingSaveMapped": false, + "MappingSaveNotMapped": false, "MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping": false, "MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping": false, "MaxImagesInDirectoryForTopLevelFirstPass": 10, diff --git a/Instance/appsettings.json b/Instance/appsettings.json index 539a1d1..9416724 100644 --- a/Instance/appsettings.json +++ b/Instance/appsettings.json @@ -71,6 +71,7 @@ "MappedMaxIndex": 1034720, "MappingSaveFaceEncoding": false, "MappingSaveMapped": false, + "MappingSaveNotMapped": false, "MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping": false, "MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping": false, "MaxImagesInDirectoryForTopLevelFirstPass": 10, diff --git a/Map/Models/Configuration.cs b/Map/Models/Configuration.cs index 2e12279..77f75d9 100644 --- a/Map/Models/Configuration.cs +++ b/Map/Models/Configuration.cs @@ -14,6 +14,7 @@ public class Configuration public int LocationFactor { init; get; } public int MapLogicSigma { init; get; } public bool MappingSaveFaceEncoding { init; get; } + public bool MappingSaveNotMapped { init; get; } public bool MappingSaveMapped { init; get; } public bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { init; get; } public bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { init; get; } @@ -36,6 +37,7 @@ public class Configuration int locationFactor, int mapLogicSigma, bool mappingSaveFaceEncoding, + bool mappingSaveNotMapped, bool mappingSaveMapped, bool mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping, bool mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping, @@ -57,6 +59,7 @@ public class Configuration LocationFactor = locationFactor; MapLogicSigma = mapLogicSigma; MappingSaveFaceEncoding = mappingSaveFaceEncoding; + MappingSaveNotMapped = mappingSaveNotMapped; MappingSaveMapped = mappingSaveMapped; MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping = mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping; MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping = mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping; diff --git a/Map/Models/MapLogic.cs b/Map/Models/MapLogic.cs index b28fc49..5f7269d 100644 --- a/Map/Models/MapLogic.cs +++ b/Map/Models/MapLogic.cs @@ -32,10 +32,7 @@ public class MapLogic private readonly string _ResizeFilenameExtension; private readonly string _FacePartsFilenameExtension; private readonly string _FacesHiddenFilenameExtension; - private readonly string _ZPropertyHolderContentDirectory; private readonly string _ZPropertyHolderContentTicksDirectory; - private readonly string _ZPropertyHolderSingletonTicksDirectory; - private readonly Property.Models.Configuration _PropertyConfiguration; public MapLogic(int maxDegreeOfParallelism, Property.Models.Configuration propertyConfiguration, string resizeFilenameExtension, string facesFilenameExtension, string facesHiddenFilenameExtension, string facePartsFilenameExtension, long ticks, Person[] people, string peopleDateGroupDirectory, string zResultsFullGroupDirectory, Configuration? configuration, List distinctFilteredFaces, Shared.Models.Methods.IFaceDistance? distance) { @@ -43,14 +40,17 @@ public class MapLogic _PersonKeysRanges = new(); _Configuration = configuration; _Log = Serilog.Log.ForContext(); - _PropertyConfiguration = propertyConfiguration; _FacesFilenameExtension = facesFilenameExtension; _MaxDegreeOfParallelism = maxDegreeOfParallelism; _ResizeFilenameExtension = resizeFilenameExtension; _FacePartsFilenameExtension = facePartsFilenameExtension; _FacesHiddenFilenameExtension = facesHiddenFilenameExtension; + if (_Log is null) + { } if (propertyConfiguration.VerifyToSeason is null || !propertyConfiguration.VerifyToSeason.Any()) throw new Exception(); + if (_MaxDegreeOfParallelism == 0) + { } string json; string[] files; string fullPath; @@ -60,15 +60,13 @@ public class MapLogic Dictionary? keyValuePairs; List>? collection; Dictionary indicesFromNew = new(); - string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory); Dictionary peopleKeyValuePairs = new(); string zPropertyHolderContentDirectory = Path.Combine(zResultsFullGroupDirectory, "()"); - string zPropertyHolderSingletonDirectory = Path.Combine(zResultsFullGroupDirectory, "{}"); + string? rootDirectoryParent = Path.GetDirectoryName(propertyConfiguration.RootDirectory); Dictionary> idThenNormalizedPixelPercentageKeyValuePairs = new(); string zPropertyHolderContentTicksDirectory = Path.Combine(zPropertyHolderContentDirectory, $"({ticks})"); string zPropertyHolderPeopleContentDirectory = Path.Combine(peopleDateGroupDirectory, "()", "(KnownPeople)"); Dictionary> incorrectIdThenNormalizedPixelPercentageKeyValuePairs = new(); - string zPropertyHolderSingletonTicksDirectory = Path.Combine(zPropertyHolderSingletonDirectory, string.Concat('{', _Ticks, '}')); for (int i = 1; i < 5; i++) _ = IPath.DeleteEmptyDirectories(zPropertyHolderContentDirectory); _ = IPath.DeleteEmptyDirectories(zPropertyHolderContentDirectory); @@ -114,9 +112,7 @@ public class MapLogic _SkipCollection = skipCollection; _NotMappedPersonKeys = notMappedTicks; _PeopleKeyValuePairs = peopleKeyValuePairs; - _ZPropertyHolderContentDirectory = zPropertyHolderContentDirectory; _ZPropertyHolderContentTicksDirectory = zPropertyHolderContentTicksDirectory; - _ZPropertyHolderSingletonTicksDirectory = zPropertyHolderSingletonTicksDirectory; _IdThenNormalizedPixelPercentageKeyValuePairs = idThenNormalizedPixelPercentageKeyValuePairs; _IncorrectIdThenNormalizedPixelPercentageKeyValuePairs = incorrectIdThenNormalizedPixelPercentageKeyValuePairs; } @@ -139,17 +135,6 @@ public class MapLogic public bool Skip(double deterministicHashCodeKey) => _SkipCollection.Contains(deterministicHashCodeKey); - private long LogDelta(long ticks, string? methodName) - { - long result; - if (_Log is null) - throw new NullReferenceException(nameof(_Log)); - double delta = new TimeSpan(DateTime.Now.Ticks - ticks).TotalMilliseconds; - _Log.Debug($"{methodName} took {Math.Floor(delta)} millisecond(s)"); - result = DateTime.Now.Ticks; - return result; - } - private List<(long, long, long, long)> GetPersonKeysRangesCollection(PersonBirthday[] personBirthdays) { List<(long, long, long, long)> results = new(); @@ -295,32 +280,6 @@ public class MapLogic return result; } - private Dictionary GetKeyValuePairs(string json) - { - if (_Configuration is null) - throw new NullReferenceException(nameof(_Configuration)); - Dictionary results = new(); - PersonBirthday? personBirthday; - List personBirthdays; - Dictionary? keyValuePairs = JsonSerializer.Deserialize>(json); - if (keyValuePairs is null) - throw new NullReferenceException(nameof(keyValuePairs)); - foreach (KeyValuePair keyValuePair in keyValuePairs) - { - personBirthdays = new(); - foreach (string personKey in keyValuePair.Value) - { - personBirthday = IPersonBirthday.GetPersonBirthday(_Configuration.PersonBirthdayFormat, personKey); - if (personBirthday is null) - continue; - } - if (!personBirthdays.Any()) - continue; - results.Add(keyValuePair.Key, personBirthdays.ToArray()); - } - return results; - } - public int AddToMapping(List distinctFilteredFaces) { if (_Configuration is null) @@ -527,32 +486,6 @@ public class MapLogic return results; } - private static Dictionary> Convert(List<(int Id, Face Face)> collection) - { - Dictionary> results = new(); - Dictionary keyValuePairs; - foreach ((int id, Face face) in collection) - { - if (!results.ContainsKey(id)) - results.Add(id, new()); - if (face.Location?.NormalizedPixelPercentage is null) - throw new NotSupportedException(); - keyValuePairs = results[id]; - if (keyValuePairs.ContainsKey(face.Location.NormalizedPixelPercentage.Value)) - continue; - results[id].Add(face.Location.NormalizedPixelPercentage.Value, face); - } - return results; - } - - private Dictionary> GetUsedIdThenNormalizedPixelPercentageKeyValuePairs() - { - Dictionary> results = new(); - foreach (KeyValuePair> keyValuePair in _IdThenNormalizedPixelPercentageKeyValuePairs) - results.Add(keyValuePair.Key, (from l in keyValuePair.Value select l.Key).ToList()); - return results; - } - private int UpdateFromSortingContainers(SortingContainer[] sortingContainers) { if (_Configuration is null) @@ -687,11 +620,11 @@ public class MapLogic { _Mapping => nameof(_Mapping), _Sorting => nameof(_Sorting), - _ForceSingleImage => nameof(MapLogic.ForceSingleImage), + _ForceSingleImage => nameof(_ForceSingleImage), _ => throw new NotImplementedException() }; } - directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, by, personKeyFormatted, face.Mapping.MappingFromPerson.SegmentB); + directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, by[1..], personKeyFormatted, face.Mapping.MappingFromPerson.SegmentB); if (!keyValuePairs.ContainsKey(directory)) keyValuePairs.Add(directory, 0); keyValuePairs[directory]++; @@ -704,8 +637,8 @@ public class MapLogic personDirectory = Path.Combine(directory, face.Mapping.MappingFromPerson.DisplayDirectoryName[..1], "lnk"); saveContainer = new(personDirectory); results.Add(saveContainer); - facesDirectory = string.Concat(dFacesContentDirectory, Path.Combine(directoryName, face.Mapping.MappingFromItem.ImageFileHolder.NameWithoutExtension)); - facePartsDirectory = string.Concat(d2ResultsFullGroupDirectory, Path.Combine(directoryName, face.Mapping.MappingFromItem.ImageFileHolder.NameWithoutExtension)); + facesDirectory = Path.Combine($"{dFacesContentDirectory}{directoryName}", face.Mapping.MappingFromItem.ImageFileHolder.NameWithoutExtension); + facePartsDirectory = Path.Combine($"{d2ResultsFullGroupDirectory}{directoryName}", face.Mapping.MappingFromItem.ImageFileHolder.NameWithoutExtension); checkFile = Path.Combine(directory, $"{face.Mapping.MappingFromLocation.DeterministicHashCodeKey}{face.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}"); faceFileHolder = new(Path.Combine(facesDirectory, $"{face.Mapping.MappingFromLocation.DeterministicHashCodeKey}{face.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_FacesFilenameExtension}")); hiddenFaceFileHolder = new(Path.Combine(facesDirectory, $"{face.Mapping.MappingFromLocation.DeterministicHashCodeKey}{face.Mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_FacesHiddenFilenameExtension}")); diff --git a/Shared/Models/FaceFileSystem.cs b/Shared/Models/FaceFileSystem.cs index d313fe7..e30d34c 100644 --- a/Shared/Models/FaceFileSystem.cs +++ b/Shared/Models/FaceFileSystem.cs @@ -157,7 +157,7 @@ public class FaceFileSystem : FileSystem, Properties.IFaceFileSystem string sourceFullFileName = string.Concat(cResizeContent, face.RelativePath); if (directoryName is null) throw new Exception(); - string faceFullFileName = string.Concat(dFacesContentDirectory, Path.Combine(directoryName, fileNameWithoutExtension, $"{locationIndex} - {fileNameWithoutExtension}.png")); + string faceFullFileName = Path.Combine($"{dFacesContentDirectory}{directoryName}", fileNameWithoutExtension, $"{locationIndex} - {fileNameWithoutExtension}.png"); string faceRelativePath = string.Concat(requestPath, new Uri(faceFullFileName).AbsoluteUri[rootResultsDirectoryAbsoluteUriLength..]); string sourceRelativePath = string.Concat(requestPath, new Uri(sourceFullFileName).AbsoluteUri[rootResultsDirectoryAbsoluteUriLength..]); FileInfo fileInfo = new(sourceFullFileName); diff --git a/Shared/Models/Stateless/Methods/FaceFileSystem.cs b/Shared/Models/Stateless/Methods/FaceFileSystem.cs index d49c3bf..99d4241 100644 --- a/Shared/Models/Stateless/Methods/FaceFileSystem.cs +++ b/Shared/Models/Stateless/Methods/FaceFileSystem.cs @@ -68,7 +68,7 @@ internal abstract class FaceFileSystem continue; fileNameWithoutExtension = Path.GetFileNameWithoutExtension(face[i].RelativePath); jsonFileName = string.Concat(locationIndex.Value, " - ", fileNameWithoutExtension, extension); - eDistanceCollectionFileFullName = string.Concat(tuple.E_DistanceCollectionDirectory, Path.Combine(directoryName, fileNameWithoutExtension, jsonFileName)); + eDistanceCollectionFileFullName = Path.Combine($"{tuple.E_DistanceCollectionDirectory}{directoryName}", fileNameWithoutExtension, jsonFileName); if (i == 0 && extension is ".json" && eDistanceCollectionFileFullName != selectedFileFullName) throw new Exception(); fileInfo = new(eDistanceCollectionFileFullName); diff --git a/TestsWithFaceRecognitionDotNet/Models/Binder/Configuration.cs b/TestsWithFaceRecognitionDotNet/Models/Binder/Configuration.cs index 3ddaab9..9044d69 100644 --- a/TestsWithFaceRecognitionDotNet/Models/Binder/Configuration.cs +++ b/TestsWithFaceRecognitionDotNet/Models/Binder/Configuration.cs @@ -32,7 +32,8 @@ public class Configuration [Display(Name = "Map Logic Sigma"), Required] public int? MapLogicSigma { get; set; } [Display(Name = "Mapped Max Index"), Required] public int? MappedMaxIndex { get; set; } [Display(Name = "Mapping Save Face Encoding"), Required] public bool? MappingSaveFaceEncoding { get; set; } - [Display(Name = "MappingSaveMapped"), Required] public bool? MappingSaveMapped { get; set; } + [Display(Name = "Mapping Save Mapped"), Required] public bool? MappingSaveMapped { get; set; } + [Display(Name = "Mapping Save Not Mapped"), Required] public bool? MappingSaveNotMapped { get; set; } [Display(Name = "Mapping Use Deterministic Hash Code Unknown Face Key Value Pairs for Add to Mapping"), Required] public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { get; set; } [Display(Name = "Mapping Use Deterministic Hash Code Unknown Face Key Value Pairs for Save Mapping"), Required] public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { get; set; } [Display(Name = "Max Items In Distance Collection"), Required] public int? MaxItemsInDistanceCollection { get; set; } @@ -124,6 +125,8 @@ public class Configuration throw new NullReferenceException(nameof(configuration.MapLogicSigma)); if (configuration.MappingSaveFaceEncoding is null) throw new NullReferenceException(nameof(configuration.MappingSaveFaceEncoding)); + if (configuration.MappingSaveNotMapped is null) + throw new NullReferenceException(nameof(configuration.MappingSaveNotMapped)); if (configuration.MappingSaveMapped is null) throw new NullReferenceException(nameof(configuration.MappingSaveMapped)); if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping is null) @@ -227,6 +230,7 @@ public class Configuration configuration.MapLogicSigma.Value, configuration.MappedMaxIndex, configuration.MappingSaveFaceEncoding.Value, + configuration.MappingSaveNotMapped.Value, configuration.MappingSaveMapped.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value, configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value, diff --git a/TestsWithFaceRecognitionDotNet/Models/Configuration.cs b/TestsWithFaceRecognitionDotNet/Models/Configuration.cs index 1279a92..d8ccee7 100644 --- a/TestsWithFaceRecognitionDotNet/Models/Configuration.cs +++ b/TestsWithFaceRecognitionDotNet/Models/Configuration.cs @@ -31,6 +31,7 @@ public class Configuration public int MapLogicSigma { init; get; } public int? MappedMaxIndex { init; get; } public bool MappingSaveFaceEncoding { init; get; } + public bool MappingSaveNotMapped { init; get; } public bool MappingSaveMapped { init; get; } public bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { init; get; } public bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { init; get; } @@ -95,6 +96,7 @@ public class Configuration int mapLogicSigma, int? mappedMaxIndex, bool mappingSaveFaceEncoding, + bool mappingSaveNotMapped, bool mappingSaveMapped, bool mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping, bool mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping, @@ -158,6 +160,7 @@ public class Configuration MapLogicSigma = mapLogicSigma; MappedMaxIndex = mappedMaxIndex; MappingSaveFaceEncoding = mappingSaveFaceEncoding; + MappingSaveNotMapped = mappingSaveNotMapped; MappingSaveMapped = mappingSaveMapped; MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping = mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping; MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping = mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping;