|
|
|
@ -272,7 +272,6 @@ public partial class DlibDotNet
|
|
|
|
|
configuration.MappingDefaultName,
|
|
|
|
|
configuration.PersonBirthdayFirstYear,
|
|
|
|
|
configuration.PersonBirthdayFormat,
|
|
|
|
|
configuration.PhotoPrismDirectory,
|
|
|
|
|
configuration.RangeDaysDeltaTolerance,
|
|
|
|
|
configuration.RangeDistanceTolerance,
|
|
|
|
|
configuration.SortingMaximumPerKey,
|
|
|
|
@ -283,7 +282,7 @@ public partial class DlibDotNet
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void FullParallelForWork(A_Property propertyLogic, Dictionary<int, List<(string, int, IReadOnlyList<MetadataExtractor.Directory>?)>> idToMappedFaceFilesWithCollection, string outputResolution, string bResultsFullGroupDirectory, string cResultsFullGroupDirectory, string dResultsDateGroupDirectory, string dResultsFullGroupDirectory, string? eDistanceContentDirectory, List<Tuple<string, DateTime>> sourceDirectoryChanges, List<FileHolder?> propertyFileHolderCollection, List<Shared.Models.Property?> propertyCollection, List<List<KeyValuePair<string, string>>> metadataCollections, List<Dictionary<string, int[]>> resizeKeyValuePairs, List<List<Shared.Models.Face>> imageFaceCollections, Container container, int index, Item item, DateTime[] containerDateTimes)
|
|
|
|
|
private void FullParallelForWork(A_Property propertyLogic, Dictionary<int, List<(string, int, IReadOnlyList<MetadataExtractor.Directory>?)>> idToMappedFaceFilesWithCollection, string outputResolution, string bResultsFullGroupDirectory, string cResultsFullGroupDirectory, string dResultsDateGroupDirectory, string dResultsFullGroupDirectory, string eDistanceContentDirectory, List<Tuple<string, DateTime>> sourceDirectoryChanges, List<FileHolder?> propertyFileHolderCollection, List<Shared.Models.Property?> propertyCollection, List<List<KeyValuePair<string, string>>> metadataCollections, List<Dictionary<string, int[]>> resizeKeyValuePairs, List<List<Shared.Models.Face>> imageFaceCollections, Container container, int index, Item item, DateTime[] containerDateTimes)
|
|
|
|
|
{
|
|
|
|
|
if (_Log is null)
|
|
|
|
|
throw new NullReferenceException(nameof(_Log));
|
|
|
|
@ -408,7 +407,7 @@ public partial class DlibDotNet
|
|
|
|
|
string cResultsFullGroupDirectory,
|
|
|
|
|
string dResultsDateGroupDirectory,
|
|
|
|
|
string dResultsFullGroupDirectory,
|
|
|
|
|
string? eDistanceContentDirectory,
|
|
|
|
|
string eDistanceContentDirectory,
|
|
|
|
|
List<Tuple<string, DateTime>> sourceDirectoryChanges,
|
|
|
|
|
List<FileHolder?> propertyFileHolderCollection,
|
|
|
|
|
List<Shared.Models.Property?> propertyCollection,
|
|
|
|
@ -854,7 +853,7 @@ public partial class DlibDotNet
|
|
|
|
|
return items;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void MapLogic(string argZero, long ticks, Container[] containers, string a2PeopleSingletonDirectory, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, MapLogicSupport mapLogicSupport, MapLogic mapLogic, string outputResolution)
|
|
|
|
|
private void MapLogic(string argZero, long ticks, Container[] containers, string a2PeopleSingletonDirectory, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, string fPhotoPrismContentDirectory, MapLogicSupport mapLogicSupport, MapLogic mapLogic, string outputResolution)
|
|
|
|
|
{
|
|
|
|
|
int? useFiltersCounter = null;
|
|
|
|
|
SortingContainer[] sortingContainers;
|
|
|
|
@ -864,8 +863,8 @@ public partial class DlibDotNet
|
|
|
|
|
Mapping[] mappingCollection = MapLogicSupport.GetSelectedMappingCollection(distinctFilteredFaces);
|
|
|
|
|
string dFacesCollectionDirectory = Path.Combine(dResultsFullGroupDirectory, "[]", _Configuration.PropertyConfiguration.ResultAllInOne);
|
|
|
|
|
(Dictionary<long, int> personKeyToCount, int totalNotMapped) = mapLogic.AddToMapping(mappingCollection);
|
|
|
|
|
if (!string.IsNullOrEmpty(_Configuration.PhotoPrismDirectory) && Directory.Exists(_Configuration.PhotoPrismDirectory))
|
|
|
|
|
F_PhotoPrism.WriteMatches(_Configuration.PhotoPrismDirectory, _Configuration.PersonBirthdayFormat, ticks, distinctFilteredFaces, mapLogic);
|
|
|
|
|
if (Directory.Exists(fPhotoPrismContentDirectory))
|
|
|
|
|
F_PhotoPrism.WriteMatches(fPhotoPrismContentDirectory, _Configuration.PersonBirthdayFormat, ticks, distinctFilteredFaces, mapLogic);
|
|
|
|
|
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
|
|
|
|
|
{
|
|
|
|
|
List<Item> filteredItems = GetItems(argZero, containers);
|
|
|
|
@ -1013,7 +1012,7 @@ public partial class DlibDotNet
|
|
|
|
|
collection.Add(new(value.MappedFaceFile, normalizedRectangle.Value, directories));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Dictionary<int, List<(string, int, IReadOnlyList<MetadataExtractor.Directory>?)>> GetCollection(long ticks, string? a2PeopleContentDirectory, string? eDistanceContentDirectory)
|
|
|
|
|
private Dictionary<int, List<(string, int, IReadOnlyList<MetadataExtractor.Directory>?)>> GetCollection(long ticks, string? a2PeopleContentDirectory, string eDistanceContentDirectory)
|
|
|
|
|
{
|
|
|
|
|
Dictionary<int, List<(string, int, IReadOnlyList<MetadataExtractor.Directory>?)>> results = new();
|
|
|
|
|
int? id;
|
|
|
|
@ -1052,18 +1051,14 @@ public partial class DlibDotNet
|
|
|
|
|
int t;
|
|
|
|
|
Container[] containers;
|
|
|
|
|
string? a2PeopleContentDirectory;
|
|
|
|
|
string eDistanceContentDirectory;
|
|
|
|
|
string aResultsFullGroupDirectory;
|
|
|
|
|
string bResultsFullGroupDirectory;
|
|
|
|
|
string cResultsFullGroupDirectory;
|
|
|
|
|
string dResultsFullGroupDirectory;
|
|
|
|
|
string? eDistanceContentDirectory;
|
|
|
|
|
string d2ResultsFullGroupDirectory;
|
|
|
|
|
if (!string.IsNullOrEmpty(_Configuration.PhotoPrismDirectory) && Directory.Exists(_Configuration.PhotoPrismDirectory))
|
|
|
|
|
{
|
|
|
|
|
Dictionary<string, List<MappingFromPhotoPrism>> fileNameToCollection = F_PhotoPrism.GetFileNameToCollection(_Configuration.PhotoPrismDirectory);
|
|
|
|
|
foreach (KeyValuePair<string, List<MappingFromPhotoPrism>> keyValuePair in fileNameToCollection)
|
|
|
|
|
_FileNameToCollection.Add(keyValuePair.Key, keyValuePair.Value);
|
|
|
|
|
}
|
|
|
|
|
string fPhotoPrismContentDirectory;
|
|
|
|
|
string fPhotoPrismSingletonDirectory;
|
|
|
|
|
string a2PeopleSingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(A2_People), "{}");
|
|
|
|
|
int totalSeconds = (int)Math.Floor(new TimeSpan(DateTime.Now.Ticks - ticks).TotalSeconds);
|
|
|
|
|
string message = $") Building Container(s) - {totalSeconds} total second(s)";
|
|
|
|
@ -1079,14 +1074,16 @@ public partial class DlibDotNet
|
|
|
|
|
{
|
|
|
|
|
a2PeopleContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(A2_People), "([])");
|
|
|
|
|
eDistanceContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(E_Distance), "()");
|
|
|
|
|
fPhotoPrismContentDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(F_PhotoPrism), "()");
|
|
|
|
|
fPhotoPrismSingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(F_PhotoPrism), "{}");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
string resultsGroupDirectory;
|
|
|
|
|
a2PeopleContentDirectory = null;
|
|
|
|
|
eDistanceContentDirectory = Path.GetPathRoot(argZero);
|
|
|
|
|
if (eDistanceContentDirectory is null)
|
|
|
|
|
throw new NullReferenceException(nameof(eDistanceContentDirectory));
|
|
|
|
|
eDistanceContentDirectory = Path.Combine($"{Path.GetPathRoot(argZero)}", "()");
|
|
|
|
|
fPhotoPrismContentDirectory = Path.Combine($"{Path.GetPathRoot(argZero)}", "()");
|
|
|
|
|
fPhotoPrismSingletonDirectory = Path.Combine($"{Path.GetPathRoot(argZero)}", "{}");
|
|
|
|
|
string? newRootDirectory = SaveUrlAndGetNewRootDirectory(container);
|
|
|
|
|
for (int i = 1; i < 10; i++)
|
|
|
|
|
{
|
|
|
|
@ -1101,6 +1098,12 @@ public partial class DlibDotNet
|
|
|
|
|
containers = Shared.Models.Stateless.Methods.IContainer.SortContainers(_Configuration.PropertyConfiguration, _Configuration.IgnoreRelativePaths, _ArgZeroIsConfigurationRootDirectory, argZero, containers);
|
|
|
|
|
MapLogicSupport mapLogicSupport = new(_Configuration.FaceConfidencePercent, _Configuration.FaceDistancePermyriad, _Configuration.RangeDaysDeltaTolerance, _Configuration.RangeFaceAreaPermilleTolerance, _Configuration.SortingMaximumPerFaceShouldBeHigh);
|
|
|
|
|
MapLogic? mapLogic = _Configuration.DistanceMoveUnableToMatch ? null : new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, ticks, _PersonContainers, a2PeopleSingletonDirectory, eDistanceContentDirectory, mapLogicSupport);
|
|
|
|
|
if (Directory.Exists(fPhotoPrismSingletonDirectory))
|
|
|
|
|
{
|
|
|
|
|
Dictionary<string, List<MappingFromPhotoPrism>> fileNameToCollection = F_PhotoPrism.GetFileNameToCollection(fPhotoPrismContentDirectory);
|
|
|
|
|
foreach (KeyValuePair<string, List<MappingFromPhotoPrism>> keyValuePair in fileNameToCollection)
|
|
|
|
|
_FileNameToCollection.Add(keyValuePair.Key, keyValuePair.Value);
|
|
|
|
|
}
|
|
|
|
|
FullDoWork(argZero, propertyRoot, ticks, propertyLogic, t, containers, a2PeopleContentDirectory, eDistanceContentDirectory);
|
|
|
|
|
_Distance.Clear();
|
|
|
|
|
mapLogic ??= new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, ticks, _PersonContainers, a2PeopleSingletonDirectory, eDistanceContentDirectory, mapLogicSupport);
|
|
|
|
@ -1115,13 +1118,12 @@ public partial class DlibDotNet
|
|
|
|
|
&& _Configuration.SaveResizedSubfiles
|
|
|
|
|
&& outputResolution == _Configuration.OutputResolutions[0]
|
|
|
|
|
&& _Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution)
|
|
|
|
|
&& _Exceptions.Count == 0
|
|
|
|
|
&& !string.IsNullOrEmpty(eDistanceContentDirectory))
|
|
|
|
|
&& _Exceptions.Count == 0)
|
|
|
|
|
{
|
|
|
|
|
if (!_Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Any())
|
|
|
|
|
break;
|
|
|
|
|
SetMapping(_FileNameToCollection, argZero, containers);
|
|
|
|
|
MapLogic(argZero, ticks, containers, a2PeopleSingletonDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, mapLogicSupport, mapLogic, outputResolution);
|
|
|
|
|
MapLogic(argZero, ticks, containers, a2PeopleSingletonDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, fPhotoPrismContentDirectory, mapLogicSupport, mapLogic, outputResolution);
|
|
|
|
|
if (_IsEnvironment.Development)
|
|
|
|
|
continue;
|
|
|
|
|
List<MappingFromItem> mappingFromItemCollection = GetMappingFromItemCollection(containers);
|
|
|
|
|