Moved more to Map library
This commit is contained in:
@ -234,6 +234,7 @@ public class DlibDotNet
|
||||
sourceDirectoryNames = Array.Empty<string>();
|
||||
else
|
||||
{
|
||||
string? century;
|
||||
string argZero = Path.GetFullPath(args[0]);
|
||||
sourceDirectoryNames = argZero.Split(Path.DirectorySeparatorChar);
|
||||
if (!argZero.StartsWith(propertyConfiguration.RootDirectory))
|
||||
@ -243,7 +244,8 @@ public class DlibDotNet
|
||||
if (!configuration.MixedYearRelativePaths.Contains(sourceDirectoryNames[0]))
|
||||
{
|
||||
string[] segments = sourceDirectoryNames[0].Split(' ');
|
||||
if (segments.Length < 2 || segments[^1].Length != 4 || (segments[^1][..2] != "19" && segments[^1][..2] != "20"))
|
||||
century = segments[^1].Length == 4 ? segments[^1][..2] : null;
|
||||
if (segments.Length < 2 || century is null || (century != "18" && century != "19" && century != "20"))
|
||||
throw new Exception("root subdirectory must have a year at the end or directory name needs to be added to the exclude list!");
|
||||
}
|
||||
}
|
||||
@ -362,7 +364,7 @@ public class DlibDotNet
|
||||
string message = $"{container.R:000}.{container.G} / {containersCount:000}) {filteredItems.Length:000} file(s) - {totalSeconds} total second(s) - {outputResolution} - {container.SourceDirectory}";
|
||||
using (ProgressBar progressBar = new(filteredItems.Length, message, options))
|
||||
{
|
||||
_ = Parallel.For(0, filteredItems.Length, parallelOptions, i =>
|
||||
_ = Parallel.For(0, filteredItems.Length, parallelOptions, (i, state) =>
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -640,6 +642,36 @@ public class DlibDotNet
|
||||
}
|
||||
}
|
||||
|
||||
private static List<(string, int, Mapping, DateTime, bool?, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>)> Convert(Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> keyValuePairs)
|
||||
{
|
||||
List<(string, int, Mapping, DateTime, bool?, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>)> results = new();
|
||||
MappingContainer mc;
|
||||
foreach (KeyValuePair<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> keyValuePair in keyValuePairs)
|
||||
{
|
||||
foreach ((FaceRecognitionDotNet.FaceEncoding _, MappingContainer mappingContainer) in keyValuePair.Value)
|
||||
{
|
||||
mc = mappingContainer;
|
||||
results.Add(new(mc.Key, mc.Id, mc.Mapping, mc.MinimumDateTime, mc.IsWrongYear, keyValuePair.Value));
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
private static Dictionary<int, List<MappingContainer>> Strip(Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> keyValuePairs)
|
||||
{
|
||||
Dictionary<int, List<MappingContainer>> results = new();
|
||||
foreach (KeyValuePair<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> keyValuePair in keyValuePairs)
|
||||
{
|
||||
foreach ((FaceRecognitionDotNet.FaceEncoding _, MappingContainer mappingContainer) in keyValuePair.Value)
|
||||
{
|
||||
if (!results.ContainsKey(mappingContainer.Id))
|
||||
results.Add(mappingContainer.Id, new());
|
||||
results[mappingContainer.Id].Add(mappingContainer);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
private void Search(Property.Models.Configuration configuration, bool reverse, Model? model, PredictorModel? predictorModel, string argZero, Person[] people, bool isSilent)
|
||||
{
|
||||
if (_Log is null)
|
||||
@ -653,8 +685,8 @@ public class DlibDotNet
|
||||
string eResultsFullGroupDirectory;
|
||||
string zResultsFullGroupDirectory;
|
||||
string d2ResultsFullGroupDirectory;
|
||||
Dictionary<string, List<Person>> peopleCollection = A2_People.Convert(people);
|
||||
Map.Models.MapLogic mapLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration);
|
||||
Dictionary<string, Person> personKeyValuePairs = A2_People.Convert(people);
|
||||
Map.Models.MapLogic mapLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Resize.FilenameExtension, personKeyValuePairs);
|
||||
A_Property propertyLogic = new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _Resize.FilenameExtension, reverse, model, predictorModel, mapLogic.IndicesFromNew, mapLogic.KeyValuePairs);
|
||||
if (string.IsNullOrEmpty(configuration.RootDirectory))
|
||||
containers = A_Property.Get(configuration, propertyLogic);
|
||||
@ -669,30 +701,35 @@ public class DlibDotNet
|
||||
mapLogic.UseKeyValuePairsSaveFaceEncoding(containers);
|
||||
foreach (Container container in containers)
|
||||
{
|
||||
mapLogic.AddToNamed(container.Items);
|
||||
mapLogic.AddToMapping(container.Items);
|
||||
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
|
||||
D_Face.SaveShortcuts(_Configuration.JuliePhares, dResultsFullGroupDirectory, ticks, peopleCollection, mapLogic, container.Items);
|
||||
mapLogic.SaveShortcuts(_Configuration.JuliePhares, dResultsFullGroupDirectory, ticks, container.Items);
|
||||
}
|
||||
mapLogic.SaveAllCollection();
|
||||
if (_Configuration.SaveResizedSubfiles)
|
||||
{
|
||||
string dFacesContentDirectory;
|
||||
string eDistanceContentDirectory;
|
||||
string eDistanceCollectionDirectory;
|
||||
string zPropertyHolderContentDirectory;
|
||||
string zPropertyHolderSingletonDirectory;
|
||||
string zPropertyHolderCollectionDirectory;
|
||||
dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, "()");
|
||||
eDistanceContentDirectory = Path.Combine(eResultsFullGroupDirectory, $"({ticks})");
|
||||
zPropertyHolderSingletonDirectory = Path.Combine(zResultsFullGroupDirectory, "{}");
|
||||
eDistanceCollectionDirectory = Path.Combine(eResultsFullGroupDirectory, $"[{ticks}]");
|
||||
List<(DateTime, bool?, PersonBirthday, FaceRecognitionDotNet.FaceEncoding[])> collection;
|
||||
collection = E_Distance.ParallelWork(_AppSettings.MaxDegreeOfParallelism, argZero, mapLogic, containers);
|
||||
zPropertyHolderContentDirectory = Path.Combine(zResultsFullGroupDirectory, $"({ticks})");
|
||||
zPropertyHolderCollectionDirectory = Path.Combine(zResultsFullGroupDirectory, $"[{ticks}]");
|
||||
Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> keyValuePairs = _Distance.ParallelWork(_AppSettings.MaxDegreeOfParallelism, _Configuration.IgnoreRelativePaths, argZero, ticks, containers);
|
||||
_ = LogDeltaInSeconds(ticks, nameof(E_Distance.ParallelWork));
|
||||
Dictionary<int, List<MappingContainer>> strippedKeyValuePairs = Strip(keyValuePairs);
|
||||
List<(string, int, Mapping, DateTime, bool?, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>)> collection = Convert(keyValuePairs);
|
||||
mapLogic.SaveMapping(argZero, containers, dFacesContentDirectory, d2ResultsFullGroupDirectory, zPropertyHolderContentDirectory);
|
||||
_ = LogDeltaInMinutes(ticks, nameof(mapLogic.SaveMapping));
|
||||
_Distance.AddToFaceDistance(_AppSettings.MaxDegreeOfParallelism, argZero, ticks, mapLogic, containers, outputResolution, collection);
|
||||
_ = LogDeltaInSeconds(ticks, nameof(_Distance.AddToFaceDistance));
|
||||
mapLogic.AddToClosest(_AppSettings.MaxDegreeOfParallelism, argZero, containers);
|
||||
_ = LogDeltaInMinutes(ticks, nameof(mapLogic.AddToClosest));
|
||||
mapLogic.SaveClosest(argZero, containers, dFacesContentDirectory, d2ResultsFullGroupDirectory, zPropertyHolderContentDirectory);
|
||||
_ = LogDeltaInMinutes(ticks, nameof(mapLogic.SaveClosest));
|
||||
E_Distance.SavePropertyHolders(argZero, containers, zPropertyHolderSingletonDirectory);
|
||||
_ = LogDeltaInSeconds(ticks, nameof(E_Distance.SavePropertyHolders));
|
||||
E_Distance.SaveThreeSigmaFaceEncodings(collection, peopleCollection, eDistanceCollectionDirectory);
|
||||
_ = LogDeltaInSeconds(ticks, nameof(E_Distance.SaveThreeSigmaFaceEncodings));
|
||||
E_Distance.SaveClosest(argZero, containers, peopleCollection, dFacesContentDirectory, d2ResultsFullGroupDirectory, eDistanceContentDirectory);
|
||||
_ = LogDeltaInMinutes(ticks, nameof(E_Distance.SaveClosest));
|
||||
}
|
||||
if (!_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Any())
|
||||
break;
|
||||
|
Reference in New Issue
Block a user