From a8b179cb0ce4c56ab980ea1eed3d7c01ed11e2a7 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Mon, 7 Aug 2023 09:16:24 -0700 Subject: [PATCH] Removed AddJsonFile Removed appsettings Moved MoveToDecade --- Drag-Drop-Search/Drag-Drop-Search.csproj | 14 +- Drag-Drop-Search/DragDropSearch.cs | 1 - Instance/DlibDotNet.cs | 195 ++++++++++------- Instance/Instance.csproj | 11 - Instance/Program.cs | 2 - Instance/appsettings.Development.json | 10 - Instance/appsettings.Staging.json | 1 - Instance/appsettings.json | 206 ------------------ Map/Models/MapLogic.cs | 47 ++-- Map/Models/Stateless/Methods/IMapLogic.cs | 5 + Rename/Rename.csproj | 8 - Rename/appsettings.Development.json | 10 - Rename/appsettings.json | 99 --------- Tests/Tests.csproj | 11 - Tests/UnitTestCalculations.cs | 2 - Tests/UnitTestExample.cs | 2 - Tests/UnitTestHardCoded.cs | 2 - Tests/UnitTestResize.cs | 2 - .../TestsWithFaceRecognitionDotNet.csproj | 11 - .../UnitTestExample.cs | 2 - .../UnitTestFace.cs | 2 - 21 files changed, 140 insertions(+), 503 deletions(-) delete mode 100644 Instance/appsettings.Development.json delete mode 100644 Instance/appsettings.Staging.json delete mode 100644 Instance/appsettings.json delete mode 100644 Rename/appsettings.Development.json delete mode 100644 Rename/appsettings.json diff --git a/Drag-Drop-Search/Drag-Drop-Search.csproj b/Drag-Drop-Search/Drag-Drop-Search.csproj index b7c7324..e7e3636 100644 --- a/Drag-Drop-Search/Drag-Drop-Search.csproj +++ b/Drag-Drop-Search/Drag-Drop-Search.csproj @@ -1,4 +1,4 @@ - + enable 10.0 @@ -7,6 +7,7 @@ win-x64 net7.0-windows true + 7b153e3d-672b-4f7a-888a-cb31645a2439 true @@ -42,15 +43,4 @@ - - - Always - - - Always - - - Always - - \ No newline at end of file diff --git a/Drag-Drop-Search/DragDropSearch.cs b/Drag-Drop-Search/DragDropSearch.cs index 9f0d7b1..7a1ad0e 100644 --- a/Drag-Drop-Search/DragDropSearch.cs +++ b/Drag-Drop-Search/DragDropSearch.cs @@ -43,7 +43,6 @@ public partial class DragDropSearch : Form isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() .AddEnvironmentVariables() - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true) .AddUserSecrets(); configurationRoot = configurationBuilder.Build(); diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index 95bef66..41643cd 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -295,13 +295,15 @@ public partial class DlibDotNet return result; } - private void SetMapping(MapLogic mapLogic, Item item, bool? isFocusRelativePath, bool? isIgnoreRelativePath, ReadOnlyCollection> locationContainers, MappingFromItem mappingFromItem, List? mappingFromPhotoPrismCollection, List faces) + private int GetNotMappedCountAndSetMapping(MapLogic mapLogic, Item item, bool? isFocusRelativePath, bool? isIgnoreRelativePath, ReadOnlyCollection> locationContainers, MappingFromItem mappingFromItem, List? mappingFromPhotoPrismCollection, List faces) { + int result; double? α; int? eyeα; bool? isUsed; bool? eyeReview; Mapping mapping; + int notMapped = 0; bool? isFocusPerson; int confidencePercent; int faceAreaPermyriad; @@ -312,9 +314,11 @@ public partial class DlibDotNet MappingFromLocation? mappingFromLocation; bool? isFocusModel = GetIsFocusModel(item.Property); bool ignoreXMatches = _JLinkResolvedDirectories.Count > 0; + ReadOnlyDictionary>? wholePercentagesToPersonContainers; ReadOnlyCollection locationContainersFiles = new((from l in locationContainers select l.File).ToArray()); foreach (Shared.Models.Face face in faces) { + wholePercentagesToPersonContainers = mapLogic.GetWholePercentagesToPersonContainers(item.Property?.Id); if (item.Property?.Id is null || face.FaceEncoding is null || face.Location is null || face.OutputResolution is null) { isUsed = null; @@ -337,22 +341,25 @@ public partial class DlibDotNet wholePercentRectangle = Shared.Models.Stateless.Methods.ILocation.GetWholePercentages(face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution); deterministicHashCodeKey = IMapping.GetDeterministicHashCodeKey(item.Property.Id.Value, face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution); mappingFromLocation = new(faceAreaPermyriad, confidencePercent, deterministicHashCodeKey, eyeα, eyeReview, wholePercentRectangle); - isUsed = mapLogic.IsUsed(ignoreXMatches, item.Property.Id.Value, mappingFromLocation); + isUsed = mapLogic.IsUsed(ignoreXMatches, item.Property.Id.Value, wholePercentagesToPersonContainers, mappingFromLocation); inSkipCollection = mapLogic.InSkipCollection(item.Property.Id.Value, mappingFromLocation); - isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, _JLinkResolvedDirectories, item.Property.Id.Value, mappingFromLocation); + isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, _JLinkResolvedDirectories, wholePercentagesToPersonContainers, mappingFromLocation); mappingFromFilter = new(isFocusModel, isFocusPerson, isFocusRelativePath, isIgnoreRelativePath, inSkipCollection, isUsed); } mapping = new(mappingFromItem, mappingFromFilter, mappingFromLocation, mappingFromPhotoPrismCollection); - _ = mapLogic.UpdateMappingFromPerson(locationContainersFiles, mapping); + notMapped += mapLogic.UpdateMappingFromPerson(locationContainersFiles, wholePercentagesToPersonContainers, mapping); face.SetMapping(mapping); } + result = notMapped; + return result; } - private Mapping GetMapping(MapLogic mapLogic, Item item, bool? isFocusRelativePath, bool? isIgnoreRelativePath, MappingFromItem mappingFromItem) + private (Mapping, int) GetMapping(MapLogic mapLogic, ReadOnlyCollection? locationContainersFiles, Item item, bool? isFocusRelativePath, bool? isIgnoreRelativePath, MappingFromItem mappingFromItem) { Mapping result; bool? isUsed; int? eyeα = null; + int notMapped = 0; bool? isFocusPerson; bool? eyeReview = null; bool? inSkipCollection; @@ -364,6 +371,7 @@ public partial class DlibDotNet MappingFromLocation? mappingFromLocation; bool? isFocusModel = GetIsFocusModel(item.Property); bool ignoreXMatches = _JLinkResolvedDirectories.Count > 0; + ReadOnlyDictionary>? wholePercentagesToPersonContainers = mapLogic.GetWholePercentagesToPersonContainers(item.Property?.Id); if (item.Property?.Id is null) { isUsed = null; @@ -377,13 +385,14 @@ public partial class DlibDotNet wholePercentRectangle = Shared.Models.Stateless.Methods.ILocation.GetWholePercentages(Shared.Models.Stateless.ILocation.Digits); deterministicHashCodeKey = IMapping.GetDeterministicHashCodeKey(item.Property.Id.Value, Shared.Models.Stateless.ILocation.Digits); mappingFromLocation = new(faceAreaPermyriad, confidencePercent, deterministicHashCodeKey, eyeα, eyeReview, wholePercentRectangle); - isUsed = mapLogic.IsUsed(ignoreXMatches, item.Property.Id.Value, mappingFromLocation); + isUsed = mapLogic.IsUsed(ignoreXMatches, item.Property.Id.Value, wholePercentagesToPersonContainers, mappingFromLocation); inSkipCollection = mapLogic.InSkipCollection(item.Property.Id.Value, mappingFromLocation); - isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, _JLinkResolvedDirectories, item.Property.Id.Value, mappingFromLocation); + isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, _JLinkResolvedDirectories, wholePercentagesToPersonContainers, mappingFromLocation); mappingFromFilter = new(isFocusModel, isFocusPerson, isFocusRelativePath, isIgnoreRelativePath, inSkipCollection, isUsed); } result = new(mappingFromItem, mappingFromFilter, mappingFromLocation, mappingFromPhotoPrismCollection: null); - return result; + notMapped += mapLogic.UpdateMappingFromPerson(locationContainersFiles, wholePercentagesToPersonContainers, result); + return (result, notMapped); } private void LogItemPropertyIsNull(Item item) @@ -408,24 +417,25 @@ public partial class DlibDotNet File.Move(item.ImageFileHolder.FullName, $"{item.ImageFileHolder.FullName}.rename"); } - private void FullParallelForWork(A_Property propertyLogic, - B_Metadata metadata, - MapLogic mapLogic, - string outputResolution, - bool outputResolutionHasNumber, - string cResultsFullGroupDirectory, - string dResultsFullGroupDirectory, - string d2ResultsFullGroupDirectory, - List> sourceDirectoryChanges, - Dictionary> fileNameToCollection, - Container container, - int index, - Item item, - DateTime[] containerDateTimes, - bool? isFocusRelativePath, - bool? isIgnoreRelativePath, - string facePartsCollectionDirectory) + private int FullParallelForWork(A_Property propertyLogic, + B_Metadata metadata, + MapLogic mapLogic, + string outputResolution, + bool outputResolutionHasNumber, + string cResultsFullGroupDirectory, + string dResultsFullGroupDirectory, + string d2ResultsFullGroupDirectory, + List> sourceDirectoryChanges, + Dictionary> fileNameToCollection, + Container container, + int index, + Item item, + DateTime[] containerDateTimes, + bool? isFocusRelativePath, + bool? isIgnoreRelativePath, + string facePartsCollectionDirectory) { + int result = 0; List faces; long ticks = DateTime.Now.Ticks; DateTime dateTime = DateTime.Now; @@ -502,7 +512,7 @@ public partial class DlibDotNet faces = _Faces.GetFaces(outputResolution, dResultsFullGroupDirectory, subFileTuples, parseExceptions, property, mappingFromItem, outputResolutionToResize, locationContainers, mappingFromPhotoPrismCollection); if (_AppSettings.MaxDegreeOfParallelism < 2) ticks = LogDelta(ticks, nameof(D_Face.GetFaces)); - SetMapping(mapLogic, item, isFocusRelativePath, isIgnoreRelativePath, locationContainers, mappingFromItem, mappingFromPhotoPrismCollection, faces); + result = GetNotMappedCountAndSetMapping(mapLogic, item, isFocusRelativePath, isIgnoreRelativePath, locationContainers, mappingFromItem, mappingFromPhotoPrismCollection, faces); List<(Shared.Models.Face, FileInfo?, string, bool Saved)> faceCollection = _Faces.SaveFaces(_FaceParts.FileNameExtension, dResultsFullGroupDirectory, subFileTuples, parseExceptions, mappingFromItem, faces); if (_Configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions.Contains(outputResolution)) _FaceParts.CopyFacesAndSaveFaceLandmarkImage(facePartsCollectionDirectory, mappingFromItem, faceCollection); @@ -527,26 +537,29 @@ public partial class DlibDotNet item.Faces.AddRange(faces); sourceDirectoryChanges.AddRange(from l in subFileTuples where l.Item2 > dateTime select l); } + return result; } - private int FullParallelWork(int maxDegreeOfParallelism, - A_Property propertyLogic, - B_Metadata metadata, - MapLogic mapLogic, - string outputResolution, - bool outputResolutionHasNumber, - string cResultsFullGroupDirectory, - string dResultsFullGroupDirectory, - string d2ResultsFullGroupDirectory, - List> sourceDirectoryChanges, - Dictionary> fileNameToCollection, - Container container, - Item[] filteredItems, - string message) + private (int, bool) FullParallelWork(int maxDegreeOfParallelism, + A_Property propertyLogic, + B_Metadata metadata, + MapLogic mapLogic, + string outputResolution, + bool outputResolutionHasNumber, + string cResultsFullGroupDirectory, + string dResultsFullGroupDirectory, + string d2ResultsFullGroupDirectory, + List> sourceDirectoryChanges, + Dictionary> fileNameToCollection, + Container container, + Item[] filteredItems, + string message) { if (_Log is null) throw new NullReferenceException(nameof(_Log)); - int result = 0; + int notMapped = 0; + int exceptionsCount = 0; + bool exceptions = false; bool ignoreXMatches = _JLinkResolvedDirectories.Count > 0; ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism }; DateTime[] containerDateTimes = Shared.Models.Stateless.Methods.IContainer.GetContainerDateTimes(filteredItems); @@ -560,35 +573,37 @@ public partial class DlibDotNet { try { - FullParallelForWork(propertyLogic, - metadata, - mapLogic, - outputResolution, - outputResolutionHasNumber, - cResultsFullGroupDirectory, - dResultsFullGroupDirectory, - d2ResultsFullGroupDirectory, - sourceDirectoryChanges, - fileNameToCollection, - container, - index: i, - filteredItems[i], - containerDateTimes, - isFocusRelativePath, - isIgnoreRelativePath, - facePartsCollectionDirectory); + notMapped = FullParallelForWork(propertyLogic, + metadata, + mapLogic, + outputResolution, + outputResolutionHasNumber, + cResultsFullGroupDirectory, + dResultsFullGroupDirectory, + d2ResultsFullGroupDirectory, + sourceDirectoryChanges, + fileNameToCollection, + container, + index: i, + filteredItems[i], + containerDateTimes, + isFocusRelativePath, + isIgnoreRelativePath, + facePartsCollectionDirectory); if (i == 0 || sourceDirectoryChanges.Count > 0) progressBar.Tick(); } catch (Exception ex) { - result += 1; + if (!exceptions) + exceptions = true; + exceptionsCount++; _Log.Error(string.Concat(container.SourceDirectory, Environment.NewLine, ex.Message, Environment.NewLine, ex.StackTrace), ex); - if (result == filteredItems.Length) + if (exceptionsCount == filteredItems.Length) throw new Exception(string.Concat("All in [", container.SourceDirectory, "] failed!")); } }); - return result; + return (notMapped, exceptions); } private static void WriteTab(string checkDirectory, List<(string Id, string Line)> metadataIdLines, string fileName) @@ -678,14 +693,16 @@ public partial class DlibDotNet return new(cResultsFullGroupDirectory, c2ResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory); } - private void FullDoWork(string argZero, string propertyRoot, long ticks, string aResultsFullGroupDirectory, string bResultsFullGroupDirectory, int t, Container[] containers, A_Property propertyLogic, B_Metadata metadata, Dictionary> fileNameToCollection, MapLogic mapLogic) + private int FullDoWork(string argZero, string propertyRoot, long ticks, string aResultsFullGroupDirectory, string bResultsFullGroupDirectory, int t, Container[] containers, A_Property propertyLogic, B_Metadata metadata, Dictionary> fileNameToCollection, MapLogic mapLogic) { if (_Log is null) throw new NullReferenceException(nameof(_Log)); + int result = 0; int total; + int notMapped; string message; + bool exceptions; int totalSeconds; - int exceptionCount; Container container; Item[] filteredItems; bool outputResolutionHasNumber; @@ -724,21 +741,22 @@ public partial class DlibDotNet propertyLogic.SetAngleBracketCollection(aResultsFullGroupDirectory, container.SourceDirectory, anyNullOrNoIsUniqueFileName); if (outputResolutionHasNumber) _Resize.SetAngleBracketCollection(cResultsFullGroupDirectory, container.SourceDirectory); - exceptionCount = FullParallelWork(maxDegreeOfParallelism, - propertyLogic, - metadata, - mapLogic, - outputResolution, - outputResolutionHasNumber, - cResultsFullGroupDirectory, - dResultsFullGroupDirectory, - d2ResultsFullGroupDirectory, - sourceDirectoryChanges, - fileNameToCollection, - container, - filteredItems, - message); - if (exceptionCount != 0) + (notMapped, exceptions) = FullParallelWork(maxDegreeOfParallelism, + propertyLogic, + metadata, + mapLogic, + outputResolution, + outputResolutionHasNumber, + cResultsFullGroupDirectory, + dResultsFullGroupDirectory, + d2ResultsFullGroupDirectory, + sourceDirectoryChanges, + fileNameToCollection, + container, + filteredItems, + message); + result += notMapped; + if (exceptions) { _Exceptions.Add(container.SourceDirectory); continue; @@ -756,6 +774,7 @@ public partial class DlibDotNet total += container.Items.Count; } } + return result; } private void SaveFaceDistances(long ticks, MapLogic mapLogic, Mapping[] mappingCollection, string dFacesContentDirectory, string d2FacePartsContentDirectory, string d2FacePartsContentCollectionDirectory, Dictionary> idToWholePercentagesToMapping, List faceDistanceEncodings, FaceDistanceContainer[] faceDistanceContainers) @@ -887,11 +906,12 @@ public partial class DlibDotNet return result; } - private Mapping[] GetMappings(Property.Models.Configuration propertyConfiguration, Container[] containers, MapLogic mapLogic, bool distinctItems) + private Mapping[] GetMappings(Property.Models.Configuration propertyConfiguration, Container[] containers, MapLogic mapLogic, int totalNotMapped, bool distinctItems) { Mapping[] results; int count = 0; Mapping mapping; + int notMapped = 0; bool anyValidFaces; string focusRelativePath; bool? isFocusRelativePath; @@ -901,6 +921,7 @@ public partial class DlibDotNet IEnumerable filteredItems; MappingFromItem mappingFromItem; List mappingCollection = new(); + ReadOnlyCollection? locationContainersFiles = null; foreach (Container container in containers) { if (container.Items.Count == 0) @@ -934,12 +955,21 @@ public partial class DlibDotNet } if (!anyValidFaces) { - mapping = GetMapping(mapLogic, item, isFocusRelativePath, isIgnoreRelativePath, mappingFromItem); + (mapping, notMapped) = GetMapping(mapLogic, locationContainersFiles, item, isFocusRelativePath, isIgnoreRelativePath, mappingFromItem); mappingCollection.Add(mapping); + if (mapping.MappingFromPerson is null || mapping.MappingFromPerson.LocationContainersFiles.Count == 0) + continue; + if (_Configuration.LocationContainerDistanceTolerance is null) + Map.Models.Stateless.Methods.IMapLogic.MoveToDecade(propertyConfiguration, mapping.MappingFromItem, mapping.MappingFromPerson); } } } results = (from l in mappingCollection orderby l.MappingFromItem.Id select l).ToArray(); + if (notMapped != totalNotMapped) + { + if (notMapped != totalNotMapped) + { } + } return results; } @@ -1179,7 +1209,7 @@ public partial class DlibDotNet B_Metadata metadata = new(_Configuration.PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory); mapLogic ??= new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, _Distance, personContainers, ticks, a2PeopleSingletonDirectory, eDistanceContentDirectory); containers = Shared.Models.Stateless.Methods.IContainer.SortContainers(_Configuration.PropertyConfiguration, _Configuration.IgnoreRelativePaths, _ArgZeroIsConfigurationRootDirectory, argZero, containers); - FullDoWork(argZero, propertyRoot, ticks, aResultsFullGroupDirectory, bResultsFullGroupDirectory, t, containers, propertyLogic, metadata, fileNameToCollection, mapLogic); + int totalNotMapped = FullDoWork(argZero, propertyRoot, ticks, aResultsFullGroupDirectory, bResultsFullGroupDirectory, t, containers, propertyLogic, metadata, fileNameToCollection, mapLogic); List distinctFilteredItems = Shared.Models.Stateless.Methods.IContainer.GetItems(_Configuration.PropertyConfiguration, containers, distinctItems: true, filterItems: true); if (_Configuration.LookForAbandoned) { @@ -1192,8 +1222,7 @@ public partial class DlibDotNet _Distance.Clear(); Verify(eDistanceContentDirectory, distinctFilteredItems); List distinctFilteredFaces = Map.Models.Stateless.Methods.IMapLogic.GetFaces(distinctFilteredItems); - Mapping[] distinctFilteredMappingCollection = GetMappings(_Configuration.PropertyConfiguration, containers, mapLogic, distinctItems: true); - int totalNotMapped = mapLogic.UpdateMappingFromPerson(_Configuration.PropertyConfiguration, distinctFilteredMappingCollection); + Mapping[] distinctFilteredMappingCollection = GetMappings(_Configuration.PropertyConfiguration, containers, mapLogic, totalNotMapped, distinctItems: true); string json = JsonSerializer.Serialize(distinctFilteredMappingCollection); File.WriteAllText(Path.Combine(eDistanceContentDirectory, $"{ticks}.json"), json); foreach (string outputResolution in _Configuration.OutputResolutions) diff --git a/Instance/Instance.csproj b/Instance/Instance.csproj index e7f7f02..2628475 100644 --- a/Instance/Instance.csproj +++ b/Instance/Instance.csproj @@ -63,15 +63,4 @@ - - - Always - - - Always - - - Always - - \ No newline at end of file diff --git a/Instance/Program.cs b/Instance/Program.cs index 52aa054..760422d 100644 --- a/Instance/Program.cs +++ b/Instance/Program.cs @@ -18,8 +18,6 @@ public class Program IsEnvironment isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() .AddEnvironmentVariables() - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true) .AddUserSecrets(); IConfigurationRoot configurationRoot = configurationBuilder.Build(); AppSettings appSettings = Models.Binder.AppSettings.Get(configurationRoot); diff --git a/Instance/appsettings.Development.json b/Instance/appsettings.Development.json deleted file mode 100644 index ad9619a..0000000 --- a/Instance/appsettings.Development.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Log4netProvider": "Debug" - } - }, - "Serilog": { - "MinimumLevel": "Debug" - } -} \ No newline at end of file diff --git a/Instance/appsettings.Staging.json b/Instance/appsettings.Staging.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Instance/appsettings.Staging.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Instance/appsettings.json b/Instance/appsettings.json deleted file mode 100644 index a39f886..0000000 --- a/Instance/appsettings.json +++ /dev/null @@ -1,206 +0,0 @@ -{ - "Company": "Mike Phares", - "Linux": {}, - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Log4netProvider": "Information", - "Microsoft.Hosting.Lifetime": "Information" - } - }, - "MaxDegreeOfParallelism": 12, - "Serilog": { - "Using": [ - "Serilog.Sinks.Console", - "Serilog.Sinks.File" - ], - "MinimumLevel": "Debug", - "WriteTo": [ - { - "Name": "Debug", - "Args": { - "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}" - } - }, - { - "Name": "Console", - "Args": { - "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}" - } - }, - { - "Name": "File", - "Args": { - "path": "%workingDirectory% - Log/log-.txt", - "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}", - "rollingInterval": "Hour" - } - } - ], - "Enrich": [ - "FromLogContext", - "WithMachineName", - "WithThreadId" - ], - "Properties": { - "Application": "Sample" - } - }, - "WorkingDirectoryName": "PharesApps", - "Windows": { - "Configuration": { - "CheckDFaceAndUpWriteDates": false, - "CheckJsonForDistanceResults": false, - "CrossDirectoryMaxItemsInDistanceCollection": 7, - "DateGroup": "DateGroup", - "DeletePossibleDuplicates": false, - "DistanceFactor": 8, - "DistanceMoveUnableToMatch": false, - "DistancePixelDistanceTolerance": 1, - "DistanceRenameToMatch": false, - "EyeThreshold": 33, - "FaceAreaPermyriad": 10000, - "FaceDistanceHiddenImageFactor": 2, - "FaceConfidencePercent": 100, - "FaceDistancePermyriad": 10000, - "FileNameDirectorySeparator": ".Z.", - "ForceFaceLastWriteTimeToCreationTime": false, - "ForceMetadataLastWriteTimeToCreationTime": false, - "ForcePropertyLastWriteTimeToCreationTime": false, - "ForceResizeLastWriteTimeToCreationTime": false, - "FocusDirectory": "", - "FocusModel": "", - "GenealogicalDataCommunicationFile": "", - "LoadPhotoPrismLocations": false, - "LocationDigits": 9, - "LocationFactor": 10000, - "LookForAbandoned": true, - "MappingDefaultName": "John Doe~25", - "MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping": false, - "MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping": false, - "MaxImagesInDirectoryForTopLevelFirstPass": 10, - "ModelDirectory": "C:/GitHub/dlib-models", - "ModelName": "Hog", - "NumberOfJitters": 0, - "NumberOfTimesToUpsample": 0, - "OutputExtension": ".jpg", - "OutputQuality": 95, - "OverrideForFaceImages": false, - "OverrideForFaceLandmarkImages": false, - "OverrideForResizeImages": false, - "Pattern": "[^ABCDEFGHIJKLMNOPQRSTUVWXYZbcdfghjklmnpqrstvwxyz0-9]", - "PersonBirthdayFirstYear": 1500, - "PersonBirthdayFormat": "yyyy-MM-dd_HH", - "PersonCharacters": "!#%]^_`~+=", - "PersonCharactersCopyCount": 0, - "PersonKeyFormat": "yyyy-MM-dd_HH", - "PopulatePropertyId": true, - "PredictorModelName": "Large", - "PropertiesChangedForDistance": false, - "PropertiesChangedForFaces": false, - "PropertiesChangedForIndex": false, - "PropertiesChangedForMetadata": false, - "PropertiesChangedForProperty": false, - "PropertiesChangedForResize": false, - "ResultAllInOne": "_ _ _", - "ResultAllInOneSubdirectoryLength": 2, - "ResultCollection": "[]", - "ResultContent": "()", - "ResultSingleton": "{}", - "Reverse": false, - "RootDirectory": "D:/Images", - "SaveIndividually": false, - "SaveFullYearOfRandomFiles": true, - "SaveResizedSubFiles": true, - "SaveSortingWithoutPerson": false, - "SkipOlderThanDays": null, - "SkipSearch": false, - "SortingMaximumPerFaceShouldBeHigh": 3000, - "SortingMaximumPerKey": 7, - "SortingMinimumToUseSigma": 10, - "TestDistanceResults": true, - "UseFilterTries": 0, - "CopyFacesAndSaveFaceLandmarkForOutputResolutions": [], - "IgnoreExtensions": [ - ".gif", - ".GIF", - ".json", - ".JOSN", - ".txt", - ".TXT", - ".ico", - ".ICO" - ], - "JLinks": [], - "LoadOrCreateThenSaveDistanceResultsForOutputResolutions": [], - "LoadOrCreateThenSaveImageFacesResultsForOutputResolutions": [], - "OutputResolutions": [], - "PropertyContentCollectionFiles": [], - "RangeDaysDeltaTolerance": [ - 0, - 700, - 123456 - ], - "RangeDistanceTolerance": [ - 0, - 0.4, - 0.6 - ], - "RangeFaceAreaTolerance": [ - 0, - 0.001, - 1 - ], - "RangeFaceConfidence": [ - 0, - 0.2, - 0.8 - ], - "RectangleIntersectMinimums": [ - 0.99 - ], - "IgnoreRelativePaths": [], - "MixedYearRelativePaths": [], - "SaveFaceDistancesForOutputResolutions": [], - "SaveFaceLandmarkForOutputResolutions": [], - "SaveFilteredOriginalImagesFromJLinksForOutputResolutions": [], - "SaveMappedForOutputResolutions": [], - "SaveRandomForOutputResolutions": [], - "SaveShortcutsForOutputResolutions": [], - "SkipNotSkipDirectories": [], - "VerifyToSeason": [], - "ValidImageFormatExtensions": [ - ".bmp", - ".BMP", - ".gif", - ".GIF", - ".jpeg", - ".JPEG", - ".jpg", - ".JPG", - ".png", - ".PNG", - ".tiff", - ".TIFF", - ".tif", - ".TIF" - ], - "ValidResolutions": [ - "Original", - "176 x 176", - "256 x 256", - "353 x 353", - "1024 x 768", - "1280 x 720", - "1280 x 800", - "1376 x 768", - "1600 x 1200", - "1920 x 1080", - "2256 x 1496", - "3840 x 2160", - "7680 x 4320" - ] - } - } -} \ No newline at end of file diff --git a/Map/Models/MapLogic.cs b/Map/Models/MapLogic.cs index 07098c7..126dfa1 100644 --- a/Map/Models/MapLogic.cs +++ b/Map/Models/MapLogic.cs @@ -178,7 +178,7 @@ public class MapLogic : Shared.Models.Methods.IMapLogic return new(result, wholePercentagesToPersonContainers); } - public int UpdateMappingFromPerson(ReadOnlyCollection? locationContainersFiles, Mapping mapping) + public int UpdateMappingFromPerson(ReadOnlyCollection? locationContainersFiles, ReadOnlyDictionary>? wholePercentagesToPersonContainers, Mapping mapping) { int result = 0; long personKey; @@ -186,18 +186,22 @@ public class MapLogic : Shared.Models.Methods.IMapLogic string mappingSegmentB; PersonBirthday personBirthday; ReadOnlyCollection? personContainers; - ReadOnlyDictionary>? wholePercentagesToPersonContainers; for (int i = 1; i < 2; i++) { if (mapping.MappingFromLocation is null) continue; - if (!_IdThenWholePercentagesToPersonContainers.TryGetValue(mapping.MappingFromItem.Id, out wholePercentagesToPersonContainers)) + if (wholePercentagesToPersonContainers is not null) { if (mapping.MappingFromFilter.InSkipCollection is not null && mapping.MappingFromFilter.InSkipCollection.Value) continue; result += 1; continue; } + if (wholePercentagesToPersonContainers is null) + { + result += 1; + continue; + } if (!wholePercentagesToPersonContainers.TryGetValue(mapping.MappingFromLocation.WholePercentages, out personContainers)) { if (mapping.MappingFromFilter.InSkipCollection is not null && mapping.MappingFromFilter.InSkipCollection.Value) @@ -225,23 +229,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic return result; } - public int UpdateMappingFromPerson(Property.Models.Configuration propertyConfiguration, Mapping[] mappingCollection) - { - int result = 0; - ReadOnlyCollection? locationContainersFiles = null; - foreach (Mapping mapping in mappingCollection) - { - if (mapping.MappingFromLocation is null) - continue; - result += UpdateMappingFromPerson(locationContainersFiles, mapping); - if (mapping.MappingFromPerson is null || mapping.MappingFromPerson.LocationContainersFiles.Count == 0) - continue; - if (_Configuration?.LocationContainerDistanceTolerance is null) - Stateless.MapLogic.MoveToDecade(propertyConfiguration, mapping.MappingFromItem, mapping.MappingFromPerson); - } - return result; - } - public void SaveContainers(bool saveIndividually, int totalNotMapped, int? updated, List saveContainers) { if (_Configuration is null) @@ -1369,14 +1356,23 @@ public class MapLogic : Shared.Models.Methods.IMapLogic return results; } - public bool IsUsed(bool ignoreXMatches, int id, MappingFromLocation mappingFromLocation) + public ReadOnlyDictionary>? GetWholePercentagesToPersonContainers(int? id) + { + ReadOnlyDictionary>? result; + if (id is null) + result = null; + else + _ = _IdThenWholePercentagesToPersonContainers.TryGetValue(id.Value, out result); + return result; + } + + public bool IsUsed(bool ignoreXMatches, int id, ReadOnlyDictionary>? wholePercentagesToPersonContainers, MappingFromLocation mappingFromLocation) { bool result; List? wholePercentagesCollection; ReadOnlyCollection? personContainers; - ReadOnlyDictionary>? wholePercentagesToPersonContainers; result = _SkipCollection.TryGetValue(id, out wholePercentagesCollection) && wholePercentagesCollection.Contains(mappingFromLocation.WholePercentages); - if (!result && _IdThenWholePercentagesToPersonContainers.TryGetValue(id, out wholePercentagesToPersonContainers)) + if (!result && wholePercentagesToPersonContainers is not null) { if (wholePercentagesToPersonContainers.TryGetValue(mappingFromLocation.WholePercentages, out personContainers)) { @@ -1390,14 +1386,13 @@ public class MapLogic : Shared.Models.Methods.IMapLogic public bool InSkipCollection(int id, MappingFromLocation mappingFromLocation) => _SkipCollection.TryGetValue(id, out List? wholePercentagesCollection) && wholePercentagesCollection.Contains(mappingFromLocation.WholePercentages); - public bool? IsFocusPerson(int? skipPersonWithMoreThen, List<(string Directory, long PersonKey)> jLinkResolvedDirectories, int id, MappingFromLocation mappingFromLocation) + public bool? IsFocusPerson(int? skipPersonWithMoreThen, List<(string Directory, long PersonKey)> jLinkResolvedDirectories, ReadOnlyDictionary>? wholePercentagesToPersonContainers, MappingFromLocation mappingFromLocation) { bool? result; ReadOnlyCollection? personContainers; - ReadOnlyDictionary>? wholePercentagesToPersonContainers; if (skipPersonWithMoreThen is null && jLinkResolvedDirectories.Count == 0) result = null; - else if (!_IdThenWholePercentagesToPersonContainers.TryGetValue(id, out wholePercentagesToPersonContainers)) + else if (wholePercentagesToPersonContainers is null) result = null; else if (!wholePercentagesToPersonContainers.TryGetValue(mappingFromLocation.WholePercentages, out personContainers)) result = null; diff --git a/Map/Models/Stateless/Methods/IMapLogic.cs b/Map/Models/Stateless/Methods/IMapLogic.cs index c004a7c..8ed8acc 100644 --- a/Map/Models/Stateless/Methods/IMapLogic.cs +++ b/Map/Models/Stateless/Methods/IMapLogic.cs @@ -33,4 +33,9 @@ public interface IMapLogic static List<(string, long)> GetJLinkDirectories(string genealogicalDataCommunicationFile, string[] jLinks, string personBirthdayFormat, char[] personCharacters, string a2PeopleSingletonDirectory, string a2PeopleContentDirectory) => MapLogic.GetJLinkDirectories(genealogicalDataCommunicationFile, jLinks, personBirthdayFormat, personCharacters, a2PeopleSingletonDirectory, a2PeopleContentDirectory); + void TestStatic_MoveToDecade(Property.Models.Configuration propertyConfiguration, Shared.Models.MappingFromItem mappingFromItem, Shared.Models.MappingFromPerson mappingFromPerson) => + MoveToDecade(propertyConfiguration, mappingFromItem, mappingFromPerson); + static void MoveToDecade(Property.Models.Configuration propertyConfiguration, Shared.Models.MappingFromItem mappingFromItem, Shared.Models.MappingFromPerson mappingFromPerson) => + MapLogic.MoveToDecade(propertyConfiguration, mappingFromItem, mappingFromPerson); + } \ No newline at end of file diff --git a/Rename/Rename.csproj b/Rename/Rename.csproj index a60d072..874bcdd 100644 --- a/Rename/Rename.csproj +++ b/Rename/Rename.csproj @@ -51,12 +51,4 @@ - - - Always - - - Always - - \ No newline at end of file diff --git a/Rename/appsettings.Development.json b/Rename/appsettings.Development.json deleted file mode 100644 index ad9619a..0000000 --- a/Rename/appsettings.Development.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Log4netProvider": "Debug" - } - }, - "Serilog": { - "MinimumLevel": "Debug" - } -} \ No newline at end of file diff --git a/Rename/appsettings.json b/Rename/appsettings.json deleted file mode 100644 index 03a9ef9..0000000 --- a/Rename/appsettings.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "ComparePathsFile": "", - "Company": "Mike Phares", - "ForceIdName": false, - "Linux": {}, - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft": "Warning", - "Log4netProvider": "Debug", - "Microsoft.Hosting.Lifetime": "Information" - } - }, - "MaxDegreeOfParallelism": 6, - "MaxMinutesDelta": 2, - "RenameUndo": false, - "Serilog": { - "Using": [ - "Serilog.Sinks.Console", - "Serilog.Sinks.File" - ], - "MinimumLevel": "Information", - "WriteTo": [ - { - "Name": "Debug", - "Args": { - "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}" - } - }, - { - "Name": "Console", - "Args": { - "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}" - } - }, - { - "Name": "File", - "Args": { - "path": "%workingDirectory% - Log/log-.txt", - "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}.{MethodName}) ({InstanceId}) ({RemoteIpAddress}) {Message}{NewLine}{Exception}", - "rollingInterval": "Hour" - } - } - ], - "Enrich": [ - "FromLogContext", - "WithMachineName", - "WithThreadId" - ], - "Properties": { - "Application": "Sample" - } - }, - "WorkingDirectoryName": "PharesApps", - "Windows": { - "Configuration": { - "DateGroup": "dd514b88", - "DiffPropertyDirectory": "", - "FileNameDirectorySeparator": ".Z.", - "ForcePropertyLastWriteTimeToCreationTime": false, - "MaxImagesInDirectoryForTopLevelFirstPass": 10, - "OutputExtension": ".jpg", - "Pattern": "[^ABCDEFGHIJKLMNOPQRSTUVWXYZbcdfghjklmnpqrstvwxyz0-9]", - "PersonBirthdayFormat": "yyyy-MM-dd_HH", - "PopulatePropertyId": true, - "PropertiesChangedForProperty": false, - "ResultAllInOne": "_ _ _", - "ResultAllInOneSubdirectoryLength": 2, - "ResultCollection": "[]", - "ResultContent": "()", - "ResultSingleton": "{}", - "RootDirectory": "D:/Images", - "IgnoreExtensions": [ - ".gif", - ".GIF", - ".nef", - ".NEF", - ".pdf", - ".PDF" - ], - "ValidImageFormatExtensions": [ - ".bmp", - ".BMP", - ".gif", - ".GIF", - ".jpeg", - ".JPEG", - ".jpg", - ".JPG", - ".png", - ".PNG", - ".tiff", - ".TIFF", - ".tif", - ".TIF" - ] - } - } -} \ No newline at end of file diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index 4be4e99..c328c96 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -48,15 +48,4 @@ - - - Always - - - Always - - - Always - - \ No newline at end of file diff --git a/Tests/UnitTestCalculations.cs b/Tests/UnitTestCalculations.cs index 0f4a975..2609cc3 100644 --- a/Tests/UnitTestCalculations.cs +++ b/Tests/UnitTestCalculations.cs @@ -39,8 +39,6 @@ public partial class UnitTestCalculations isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() .AddEnvironmentVariables() - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true) .AddUserSecrets(); configurationRoot = configurationBuilder.Build(); appSettings = Models.Binder.AppSettings.Get(configurationRoot); diff --git a/Tests/UnitTestExample.cs b/Tests/UnitTestExample.cs index 20da7be..d62ce04 100644 --- a/Tests/UnitTestExample.cs +++ b/Tests/UnitTestExample.cs @@ -36,8 +36,6 @@ public class UnitTestExample isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() .AddEnvironmentVariables() - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true) .AddUserSecrets(); configurationRoot = configurationBuilder.Build(); appSettings = Models.Binder.AppSettings.Get(configurationRoot); diff --git a/Tests/UnitTestHardCoded.cs b/Tests/UnitTestHardCoded.cs index 7792579..adfc81a 100644 --- a/Tests/UnitTestHardCoded.cs +++ b/Tests/UnitTestHardCoded.cs @@ -38,8 +38,6 @@ public partial class UnitTestHardCoded isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() .AddEnvironmentVariables() - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true) .AddUserSecrets(); configurationRoot = configurationBuilder.Build(); appSettings = Models.Binder.AppSettings.Get(configurationRoot); diff --git a/Tests/UnitTestResize.cs b/Tests/UnitTestResize.cs index c7f5142..1f07ffc 100644 --- a/Tests/UnitTestResize.cs +++ b/Tests/UnitTestResize.cs @@ -41,8 +41,6 @@ public class UnitTestResize isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() .AddEnvironmentVariables() - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true) .AddUserSecrets(); configurationRoot = configurationBuilder.Build(); appSettings = Models.Binder.AppSettings.Get(configurationRoot); diff --git a/TestsWithFaceRecognitionDotNet/TestsWithFaceRecognitionDotNet.csproj b/TestsWithFaceRecognitionDotNet/TestsWithFaceRecognitionDotNet.csproj index b2f4278..aece9c4 100644 --- a/TestsWithFaceRecognitionDotNet/TestsWithFaceRecognitionDotNet.csproj +++ b/TestsWithFaceRecognitionDotNet/TestsWithFaceRecognitionDotNet.csproj @@ -48,15 +48,4 @@ - - - Always - - - Always - - - Always - - \ No newline at end of file diff --git a/TestsWithFaceRecognitionDotNet/UnitTestExample.cs b/TestsWithFaceRecognitionDotNet/UnitTestExample.cs index 20da7be..d62ce04 100644 --- a/TestsWithFaceRecognitionDotNet/UnitTestExample.cs +++ b/TestsWithFaceRecognitionDotNet/UnitTestExample.cs @@ -36,8 +36,6 @@ public class UnitTestExample isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() .AddEnvironmentVariables() - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true) .AddUserSecrets(); configurationRoot = configurationBuilder.Build(); appSettings = Models.Binder.AppSettings.Get(configurationRoot); diff --git a/TestsWithFaceRecognitionDotNet/UnitTestFace.cs b/TestsWithFaceRecognitionDotNet/UnitTestFace.cs index 2d8cf6b..5156828 100644 --- a/TestsWithFaceRecognitionDotNet/UnitTestFace.cs +++ b/TestsWithFaceRecognitionDotNet/UnitTestFace.cs @@ -43,8 +43,6 @@ public class UnitTestFace isEnvironment = new(processesCount: null, nullASPNetCoreEnvironmentIsDevelopment: debuggerWasAttachedAtLineZero, nullASPNetCoreEnvironmentIsProduction: !debuggerWasAttachedAtLineZero); IConfigurationBuilder configurationBuilder = new ConfigurationBuilder() .AddEnvironmentVariables() - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddJsonFile(isEnvironment.AppSettingsFileName, optional: false, reloadOnChange: true) .AddUserSecrets(); configurationRoot = configurationBuilder.Build(); appSettings = Models.Binder.AppSettings.Get(configurationRoot);