LocationContainerDistanceTolerance
This commit is contained in:
@ -4,10 +4,11 @@ using System.Text.Json;
|
||||
using View_by_Distance.Distance.Models.Stateless;
|
||||
using View_by_Distance.FaceRecognitionDotNet;
|
||||
using View_by_Distance.Shared.Models;
|
||||
using View_by_Distance.Shared.Models.Methods;
|
||||
|
||||
namespace View_by_Distance.Distance.Models;
|
||||
|
||||
public partial class E_Distance
|
||||
public partial class E_Distance : IDistance<MetadataExtractor.Directory>
|
||||
{
|
||||
|
||||
private readonly List<string> _Moved;
|
||||
@ -411,7 +412,7 @@ public partial class E_Distance
|
||||
});
|
||||
}
|
||||
|
||||
private static List<SortingContainer> GetSortingContainers(Map.Models.Configuration mapConfiguration, Shared.Models.Methods.IDistanceLimits distanceLimits, Face face, FaceDistance faceDistanceEncoding, List<Sorting> sortingCollection)
|
||||
private static List<SortingContainer> GetSortingContainers(Map.Models.Configuration mapConfiguration, IDistanceLimits distanceLimits, Face face, FaceDistance faceDistanceEncoding, List<Sorting> sortingCollection)
|
||||
{
|
||||
List<SortingContainer> results = new();
|
||||
SortingContainer sortingContainer;
|
||||
@ -516,7 +517,7 @@ public partial class E_Distance
|
||||
return results.ToArray();
|
||||
}
|
||||
|
||||
public static SortingContainer[] SetFaceMappingSortingCollectionThenGetSortingContainers(int maxDegreeOfParallelism, Map.Models.Configuration mapConfiguration, long ticks, Map.Models.MapLogic mapLogic, Shared.Models.Methods.IDistanceLimits distanceLimits, List<FaceDistance> faceDistanceEncodings, FaceDistanceContainer[] filteredFaceDistanceContainers)
|
||||
public static SortingContainer[] SetFaceMappingSortingCollectionThenGetSortingContainers(int maxDegreeOfParallelism, Map.Models.Configuration mapConfiguration, long ticks, Map.Models.MapLogic mapLogic, IDistanceLimits distanceLimits, List<FaceDistance> faceDistanceEncodings, FaceDistanceContainer[] filteredFaceDistanceContainers)
|
||||
{
|
||||
SortingContainer[] results;
|
||||
List<SortingContainer> collection = new();
|
||||
@ -552,4 +553,65 @@ public partial class E_Distance
|
||||
return results;
|
||||
}
|
||||
|
||||
private static void ReviewLocationContainerDistanceTolerance(float locationContainerDistanceTolerance, DateTime dateTime, List<(string, FaceRecognitionDotNet.FaceEncoding)> collection)
|
||||
{
|
||||
List<string> files = new();
|
||||
FaceDistance? faceDistanceEncoding = null;
|
||||
List<FaceDistance> faceDistanceEncodings = new();
|
||||
foreach ((string _, FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding) in collection)
|
||||
{
|
||||
faceDistanceEncoding = new(faceRecognitionDotNetFaceEncoding);
|
||||
break;
|
||||
}
|
||||
foreach ((string file, FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding) in collection)
|
||||
{
|
||||
files.Add(file);
|
||||
faceDistanceEncodings.Add(new(faceRecognitionDotNetFaceEncoding));
|
||||
}
|
||||
if (faceDistanceEncoding is null)
|
||||
throw new Exception();
|
||||
List<FaceDistance> 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);
|
||||
}
|
||||
}
|
||||
|
||||
void IDistance<MetadataExtractor.Directory>.ReviewLocationContainerDistanceTolerance(float locationContainerDistanceTolerance, ReadOnlyCollection<LocationContainer<MetadataExtractor.Directory>> locationContainers)
|
||||
{
|
||||
string? json;
|
||||
int? lastDirectoryNumber = null;
|
||||
DateTime dateTime = DateTime.Now;
|
||||
Shared.Models.FaceEncoding? modelsFaceEncoding;
|
||||
FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding;
|
||||
List<(string, FaceRecognitionDotNet.FaceEncoding)> collection = new();
|
||||
foreach (LocationContainer<MetadataExtractor.Directory>? locationContainer in locationContainers)
|
||||
{
|
||||
if (locationContainer.DirectoryNumber is null)
|
||||
continue;
|
||||
if (lastDirectoryNumber is not null && locationContainer.DirectoryNumber.Value != lastDirectoryNumber.Value)
|
||||
{
|
||||
ReviewLocationContainerDistanceTolerance(locationContainerDistanceTolerance, dateTime, collection);
|
||||
collection.Clear();
|
||||
}
|
||||
json = Metadata.Models.Stateless.Methods.IMetadata.GetFaceEncoding(locationContainer.Directories);
|
||||
if (json is null)
|
||||
continue;
|
||||
modelsFaceEncoding = JsonSerializer.Deserialize<Shared.Models.FaceEncoding>(json);
|
||||
if (modelsFaceEncoding is null)
|
||||
throw new NotSupportedException();
|
||||
faceRecognitionDotNetFaceEncoding = FaceRecognition.LoadFaceEncoding(modelsFaceEncoding.RawEncoding);
|
||||
collection.Add((locationContainer.File, faceRecognitionDotNetFaceEncoding));
|
||||
lastDirectoryNumber = locationContainer.DirectoryNumber.Value;
|
||||
}
|
||||
if (collection.Count > 0)
|
||||
ReviewLocationContainerDistanceTolerance(locationContainerDistanceTolerance, dateTime, collection);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user