diff --git a/Distance/Models/_E_Distance.cs b/Distance/Models/_E_Distance.cs index 81495d0..dc337c8 100644 --- a/Distance/Models/_E_Distance.cs +++ b/Distance/Models/_E_Distance.cs @@ -553,16 +553,15 @@ public partial class E_Distance : IDistance return results; } - private static void ReviewLocationContainerDistanceTolerance(float locationContainerDistanceTolerance, DateTime dateTime, List<(string, FaceRecognitionDotNet.FaceEncoding)> collection) + private static void ReviewLocationContainerDistanceTolerance(float locationContainerDistanceTolerance, DateTime dateTime, DateTime yesterday, List<(string File, FaceRecognitionDotNet.FaceEncoding FaceRecognitionDotNetFaceEncoding)> collection) { + FileInfo fileInfo; List files = new(); - FaceDistance? faceDistanceEncoding = null; + FaceDistance? faceDistanceEncoding; + List faceDistanceLengths; + List firstPassFailures = new(); List faceDistanceEncodings = new(); - foreach ((string _, FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding) in collection) - { - faceDistanceEncoding = new(faceRecognitionDotNetFaceEncoding); - break; - } + faceDistanceEncoding = new(collection[0].FaceRecognitionDotNetFaceEncoding); foreach ((string file, FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding) in collection) { files.Add(file); @@ -570,16 +569,38 @@ public partial class E_Distance : IDistance } if (faceDistanceEncoding is null) throw new Exception(); - List faceDistanceLengths = FaceRecognition.FaceDistances(faceDistanceEncodings, faceDistanceEncoding); + faceDistanceLengths = FaceRecognition.FaceDistances(faceDistanceEncodings, faceDistanceEncoding); if (faceDistanceLengths.Count != files.Count) throw new Exception(); for (int i = 0; i < files.Count; i++) { - if (!File.Exists(files[i])) - continue; if (faceDistanceLengths[i].Length < locationContainerDistanceTolerance) continue; - File.SetCreationTime(files[i], dateTime); + firstPassFailures.Add(files[i]); + } + faceDistanceEncoding = new(collection[^1].FaceRecognitionDotNetFaceEncoding); + foreach ((string file, FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding) in collection) + { + files.Add(file); + faceDistanceEncodings.Add(new(faceRecognitionDotNetFaceEncoding)); + } + if (faceDistanceEncoding is null) + throw new Exception(); + faceDistanceLengths = FaceRecognition.FaceDistances(faceDistanceEncodings, faceDistanceEncoding); + if (faceDistanceLengths.Count != files.Count) + throw new Exception(); + for (int i = 0; i < files.Count; i++) + { + fileInfo = new(files[i]); + if (!fileInfo.Exists) + continue; + if (fileInfo.CreationTime > yesterday) + File.SetCreationTime(fileInfo.FullName, yesterday); + if (faceDistanceLengths[i].Length < locationContainerDistanceTolerance) + continue; + if (firstPassFailures.Contains(fileInfo.FullName)) + continue; + File.SetCreationTime(fileInfo.FullName, dateTime); } } @@ -588,6 +609,7 @@ public partial class E_Distance : IDistance string? json; int? lastDirectoryNumber = null; DateTime dateTime = DateTime.Now; + DateTime yesterday = DateTime.Now.AddDays(-1); Shared.Models.FaceEncoding? modelsFaceEncoding; FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding; List<(string, FaceRecognitionDotNet.FaceEncoding)> collection = new(); @@ -597,7 +619,8 @@ public partial class E_Distance : IDistance continue; if (lastDirectoryNumber is not null && locationContainer.DirectoryNumber.Value != lastDirectoryNumber.Value) { - ReviewLocationContainerDistanceTolerance(locationContainerDistanceTolerance, dateTime, collection); + if (collection.Count > 2) + ReviewLocationContainerDistanceTolerance(locationContainerDistanceTolerance, dateTime, yesterday, collection); collection.Clear(); } json = Metadata.Models.Stateless.Methods.IMetadata.GetFaceEncoding(locationContainer.Directories); @@ -610,8 +633,8 @@ public partial class E_Distance : IDistance collection.Add((locationContainer.File, faceRecognitionDotNetFaceEncoding)); lastDirectoryNumber = locationContainer.DirectoryNumber.Value; } - if (collection.Count > 0) - ReviewLocationContainerDistanceTolerance(locationContainerDistanceTolerance, dateTime, collection); + if (collection.Count > 2) + ReviewLocationContainerDistanceTolerance(locationContainerDistanceTolerance, dateTime, yesterday, collection); } } \ No newline at end of file