diff --git a/Distance/Models/_E_Distance.cs b/Distance/Models/_E_Distance.cs index 293bc1a..2b4f9e3 100644 --- a/Distance/Models/_E_Distance.cs +++ b/Distance/Models/_E_Distance.cs @@ -473,13 +473,15 @@ public partial class E_Distance return faceDistanceEncodings; } - public static FaceDistanceContainer[] FilteredFaceDistanceContainers(Map.Models.MapLogic mapLogic, FaceDistanceContainer[] faceDistanceContainers, DistanceLimits distanceLimits) + public static FaceDistanceContainer[] FilteredFaceDistanceContainers(Map.Models.MapLogic mapLogic, FaceDistanceContainer[] faceDistanceContainers, long? skipOlderThan, DistanceLimits distanceLimits) { List results = new(); foreach (FaceDistanceContainer faceDistanceContainer in faceDistanceContainers) { if (faceDistanceContainer.FaceDistance is null || faceDistanceContainer.Face.Mapping?.MappingFromLocation is null) throw new NotSupportedException(); + if (skipOlderThan is not null && (faceDistanceContainer.FaceDistance.MinimumDateTime is null || faceDistanceContainer.FaceDistance.MinimumDateTime.Value.Ticks < skipOlderThan.Value)) + continue; if (faceDistanceContainer.Face.Mapping.MappingFromLocation.ConfidencePercent < distanceLimits.FaceConfidencePercent) continue; if (faceDistanceContainer.Face.Mapping.MappingFromLocation.AreaPermyriad < distanceLimits.FaceAreaPermyriad) diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index bd48bdb..fbc12ba 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -732,8 +732,9 @@ public partial class DlibDotNet int? useFiltersCounter = null; SortingContainer[] sortingContainers; FaceDistanceContainer[] filteredFaceDistanceContainers; + long? skipOlderThan = _Configuration.SkipOlderThanDays is null ? null : new DateTime(ticks).AddDays(-_Configuration.SkipOlderThanDays.Value).Ticks; distanceLimits = new(_Configuration.FaceAreaPermyriad, _Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeDistanceTolerance, _Configuration.RangeFaceAreaTolerance, _Configuration.RangeFaceConfidence, _Configuration.SortingMaximumPerFaceShouldBeHigh); - filteredFaceDistanceContainers = E_Distance.FilteredFaceDistanceContainers(mapLogic, faceDistanceContainers, distanceLimits); + filteredFaceDistanceContainers = E_Distance.FilteredFaceDistanceContainers(mapLogic, faceDistanceContainers, skipOlderThan, distanceLimits); if (!filteredFaceDistanceContainers.Any()) _Log.Information("All images have been filtered!"); else @@ -744,7 +745,7 @@ public partial class DlibDotNet for (useFiltersCounter = 1; useFiltersCounter < _Configuration.UseFilterTries; useFiltersCounter++) { distanceLimits = new(_Configuration.FaceAreaPermyriad, _Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeDistanceTolerance, _Configuration.RangeFaceAreaTolerance, _Configuration.RangeFaceConfidence, _Configuration.SortingMaximumPerFaceShouldBeHigh, useFiltersCounter); - filteredFaceDistanceContainers = E_Distance.FilteredFaceDistanceContainers(mapLogic, faceDistanceContainers, distanceLimits); + filteredFaceDistanceContainers = E_Distance.FilteredFaceDistanceContainers(mapLogic, faceDistanceContainers, skipOlderThan, distanceLimits); if (filteredFaceDistanceContainers.Any()) _Log.Information("All images have been filtered!"); else diff --git a/Instance/Models/Binder/Configuration.cs b/Instance/Models/Binder/Configuration.cs index 68bcce9..1fe735d 100644 --- a/Instance/Models/Binder/Configuration.cs +++ b/Instance/Models/Binder/Configuration.cs @@ -75,6 +75,7 @@ public class Configuration [Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; } [Display(Name = "Save Sorting Without Person"), Required] public bool? SaveSortingWithoutPerson { get; set; } [Display(Name = "Skip Not Skip Directories"), Required] public string[] SkipNotSkipDirectories { get; set; } + [Display(Name = "Skip Older Than Days"), Required] public int? SkipOlderThanDays { get; set; } [Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; } [Display(Name = "SortingMaximumPerFaceShould be High"), Required] public int? SortingMaximumPerFaceShouldBeHigh { get; set; } [Display(Name = "Sorting Maximum Per Key"), Required] public int? SortingMaximumPerKey { get; set; } @@ -284,6 +285,7 @@ public class Configuration configuration.SaveShortcutsForOutputResolutions, configuration.SaveSortingWithoutPerson.Value, configuration.SkipNotSkipDirectories, + configuration.SkipOlderThanDays, configuration.SkipSearch.Value, configuration.SortingMaximumPerFaceShouldBeHigh.Value, configuration.SortingMaximumPerKey.Value, diff --git a/Instance/Models/Configuration.cs b/Instance/Models/Configuration.cs index 468e4b6..d2082fa 100644 --- a/Instance/Models/Configuration.cs +++ b/Instance/Models/Configuration.cs @@ -72,6 +72,7 @@ public class Configuration public bool SaveSortingWithoutPerson { init; get; } public string[] SkipNotSkipDirectories { init; get; } public bool SkipSearch { init; get; } + public int? SkipOlderThanDays { init; get; } public int SortingMaximumPerFaceShouldBeHigh { init; get; } public int SortingMaximumPerKey { init; get; } public int SortingMinimumToUseSigma { init; get; } @@ -143,6 +144,7 @@ public class Configuration string[] saveShortcutsForOutputResolutions, bool saveSortingWithoutPerson, string[] skipNotSkipDirectories, + int? skipOlderThanDays, bool skipSearch, int sortingMaximumPerFaceShouldBeHigh, int sortingMaximumPerKey, @@ -214,6 +216,7 @@ public class Configuration SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions; SaveSortingWithoutPerson = saveSortingWithoutPerson; SkipNotSkipDirectories = skipNotSkipDirectories; + SkipOlderThanDays = skipOlderThanDays; SkipSearch = skipSearch; SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh; SortingMaximumPerKey = sortingMaximumPerKey; diff --git a/Instance/appsettings.Development.json b/Instance/appsettings.Development.json index 0abb5a1..b520c6c 100644 --- a/Instance/appsettings.Development.json +++ b/Instance/appsettings.Development.json @@ -19,7 +19,7 @@ "FocusDirectory": "", "xFocusDirectory": "/Hawaii 2022", "FocusModel": "", - "xxFocusModel": "NIKON D3400", + "xFocusModel": "NIKON D3400", "PersonCharactersCopyCount": 0, "xPersonCharactersCopyCount": 2, "xRootDirectory": "D:/Tmp/phares/Pictures", @@ -28,6 +28,8 @@ "RootDirectory": "D:/1) Images A/Images-45f4401", "xxxxxRootDirectory": "D:/1) Images A/Images-45f4401/Facebook/=2022.3 Facebook", "SaveSortingWithoutPerson": true, + "xSkipOlderThanDays": null, + "SkipOlderThanDays": 1800, "JLinks": [ "Julie" ], @@ -48,7 +50,7 @@ ], "RangeDistanceTolerance": [ 0, - 0.65, + 0.98, 1.8 ], "RangeFaceAreaTolerance": [ @@ -58,7 +60,7 @@ ], "RangeFaceConfidence": [ 0, - 0.8, + 0.5, 1.6 ], "SaveFaceDistancesForOutputResolutions": [ diff --git a/Instance/appsettings.json b/Instance/appsettings.json index b97fa6a..0aa27d9 100644 --- a/Instance/appsettings.json +++ b/Instance/appsettings.json @@ -108,6 +108,7 @@ "SaveFullYearOfRandomFiles": true, "SaveResizedSubFiles": true, "SaveSortingWithoutPerson": false, + "SkipOlderThanDays": null, "SkipSearch": false, "SortingMaximumPerFaceShouldBeHigh": 3000, "SortingMaximumPerKey": 7,