Removed GetMissingFaceDistanceContainer

This commit is contained in:
2023-08-07 16:30:05 -07:00
parent 2eb5cfd42f
commit 9991d2bfac
3 changed files with 28 additions and 105 deletions

View File

@ -315,59 +315,6 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
_DuplicateMappedFaceFiles.Clear();
}
public ReadOnlyCollection<FaceDistanceContainer> GetMissingFaceDistanceContainer(int maxDegreeOfParallelism, long ticks, string dFacesCollectionDirectory, ReadOnlyDictionary<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> missingIdThenWholePercentagesToPersonContainers)
{
List<FaceDistanceContainer> results = new();
string[] files;
List<Face>? faces;
int wholePercentages;
int confidencePercent;
bool? isWrongYear = null;
FaceDistance faceDistance;
List<(int id, string json)> collection = new();
FaceDistanceContainer faceDistanceContainer;
foreach (KeyValuePair<int, ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>> keyValuePair in missingIdThenWholePercentagesToPersonContainers)
{
files = Directory.GetFiles(dFacesCollectionDirectory, $"{keyValuePair.Key}*.json", SearchOption.TopDirectoryOnly);
if (files.Length != 1)
continue;
collection.Add(new(keyValuePair.Key, Shared.Models.Stateless.Methods.IFace.GetJson(files[0])));
}
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism };
string message = $") {collection.Count:000} Setting missing distance containers - {totalSeconds} total second(s)";
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
using ProgressBar progressBar = new(collection.Count, message, options);
_ = Parallel.For(0, collection.Count, parallelOptions, (i, state) =>
{
progressBar.Tick();
int id = collection[i].id;
string json = collection[i].json;
faces = JsonSerializer.Deserialize<List<Face>>(json);
if (faces is null)
throw new NullReferenceException(nameof(faces));
foreach (Face face in faces)
{
if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null)
continue;
confidencePercent = Shared.Models.Stateless.Methods.ILocation.GetConfidencePercent(_FaceConfidencePercent, _RangeFaceConfidence, face.Location.Confidence);
wholePercentages = Shared.Models.Stateless.Methods.ILocation.GetWholePercentages(face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
if (face.FaceDistance?.Encoding is not null && face.FaceDistance.Encoding is FaceRecognitionDotNet.FaceEncoding faceEncoding)
faceDistance = new(confidencePercent, face.DateTime, faceEncoding, id, isWrongYear, wholePercentages);
else
{
faceEncoding = FaceRecognition.LoadFaceEncoding(face.FaceEncoding.RawEncoding);
faceDistance = new(confidencePercent, face.DateTime, faceEncoding, id, isWrongYear, wholePercentages);
face.SetFaceDistance(faceDistance);
}
faceDistanceContainer = new(face, faceDistance);
lock (results)
results.Add(faceDistanceContainer);
}
});
return new(results);
}
public static void SaveFaceDistances(Property.Models.Configuration configuration, SortingContainer[] sortingContainers)
{
string eDistanceContentCollectionDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(configuration, nameof(E_Distance), "([])");
@ -387,7 +334,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
{
if (face.Mapping?.MappingFromFilter is null)
throw new NotSupportedException();
if (face.Mapping.MappingFromFilter.IsFocusPerson is not null && !face.Mapping.MappingFromFilter.IsFocusPerson.Value)
if (face.Mapping.MappingFromFilter.IsUsed is not null && face.Mapping.MappingFromFilter.IsUsed.Value && face.Mapping.MappingFromFilter.IsFocusPerson is not null && !face.Mapping.MappingFromFilter.IsFocusPerson.Value)
continue;
if (face.FaceEncoding is not null && face.FaceDistance?.Encoding is not null && face.FaceDistance.Encoding is FaceRecognitionDotNet.FaceEncoding _)
continue;
@ -443,11 +390,11 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
return results;
}
private static List<Sorting> GetSortingCollection(Map.Models.MapLogic mapLogic, ReadOnlyCollection<FaceDistance> faceDistanceEncodings, int i, FaceDistance faceDistanceEncoding)
private static List<Sorting> GetSortingCollection(Map.Models.MapLogic mapLogic, ReadOnlyCollection<FaceDistance> faceDistanceEncodings, int i, FaceDistance faceDistanceEncoding, Face face)
{
List<Sorting> results;
List<FaceDistance> faceDistanceLengths = FaceRecognition.FaceDistances(faceDistanceEncodings, faceDistanceEncoding);
results = mapLogic.GetSortingCollection(i, faceDistanceEncoding, faceDistanceLengths);
results = mapLogic.GetSortingCollection(i, faceDistanceEncoding, face, faceDistanceLengths);
return results;
}
@ -471,24 +418,6 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
return results;
}
public static ReadOnlyCollection<FaceDistance> GetFaceDistanceEncodings(ReadOnlyCollection<FaceDistanceContainer> faceDistanceContainers, ReadOnlyCollection<FaceDistanceContainer> missingFaceDistanceContainers)
{
List<FaceDistance> faceDistanceEncodings = new();
foreach (FaceDistanceContainer faceDistanceContainer in faceDistanceContainers)
{
if (faceDistanceContainer.FaceDistance.Encoding is null)
continue;
faceDistanceEncodings.Add(faceDistanceContainer.FaceDistance);
}
foreach (FaceDistanceContainer faceDistanceContainer in missingFaceDistanceContainers)
{
if (faceDistanceContainer.FaceDistance.Encoding is null)
continue;
faceDistanceEncodings.Add(faceDistanceContainer.FaceDistance);
}
return new(faceDistanceEncodings);
}
public static FaceDistanceContainer[] FilteredFaceDistanceContainers(Map.Models.MapLogic mapLogic, ReadOnlyCollection<FaceDistanceContainer> faceDistanceContainers, long? skipOlderThan, DistanceLimits distanceLimits)
{
List<FaceDistanceContainer> results = new();
@ -531,7 +460,7 @@ public partial class E_Distance : IDistance<MetadataExtractor.Directory>
progressBar.Tick();
FaceDistance faceDistanceEncoding = filteredFaceDistanceContainers[i].FaceDistance;
Face face = filteredFaceDistanceContainers[i].Face;
List<Sorting> sortingCollection = GetSortingCollection(mapLogic, faceDistanceEncodings, i, faceDistanceEncoding);
List<Sorting> sortingCollection = GetSortingCollection(mapLogic, faceDistanceEncodings, i, faceDistanceEncoding, face);
if (sortingCollection.Count == 0)
return;
List<SortingContainer> sortingContainers = GetSortingContainers(mapConfiguration, distanceLimits, face, faceDistanceEncoding, sortingCollection);