Face => Mapping

This commit is contained in:
2022-09-30 10:58:05 -07:00
parent 4568d3fbc6
commit b81d9e9862
19 changed files with 310 additions and 249 deletions

View File

@ -327,12 +327,14 @@ public partial class DlibDotNet
private static Map.Models.Configuration Get(Models.Configuration configuration, string facesFileNameExtension, string facesHiddenFileNameExtension, string facePartsFileNameExtension)
{
Map.Models.Configuration result = new(
configuration.FaceDistanceHiddenImageFactor,
configuration.FaceDistancePermyriad,
configuration.FaceDistanceTolerance,
configuration.MappingDefaultName,
configuration.PersonBirthdayFirstYear,
configuration.PersonBirthdayFormat,
configuration.SortingDaysDeltaTolerance,
configuration.SortingMaximumPerKey,
configuration.SortingMinimumToUseSigma,
facesFileNameExtension,
facesHiddenFileNameExtension,
facePartsFileNameExtension);
@ -833,9 +835,27 @@ public partial class DlibDotNet
}
}
private List<Shared.Models.Face> SetMappingThenGetDistinctFilteredFacesWithMapping(string argZero, Container[] containers)
private bool IsIgnoreRelativePath(string directory)
{
List<Shared.Models.Face> results = new();
bool result = false;
string? checkDirectory = Path.GetFullPath(directory);
for (int i = 0; i < int.MaxValue; i++)
{
if (_Configuration.IgnoreRelativePaths.Contains(Path.GetFileName(checkDirectory)))
{
result = true;
break;
}
checkDirectory = Path.GetDirectoryName(checkDirectory);
if (string.IsNullOrEmpty(checkDirectory) || checkDirectory == _Configuration.PropertyConfiguration.RootDirectory)
break;
}
return result;
}
private Shared.Models.Face[] SetMappingThenGetDistinctFilteredFacesWithMapping(string argZero, Container[] containers)
{
Shared.Models.Face[] results;
Mapping mapping;
int areaPermille;
bool? isWrongYear;
@ -846,12 +866,15 @@ public partial class DlibDotNet
MappingFromItem mappingFromItem;
MappingFromPerson mappingFromPerson;
MappingFromLocation mappingFromLocation;
List<Shared.Models.Face> collection = new();
foreach (Container container in containers)
{
if (!container.Items.Any())
continue;
if (!_ArgZeroIsConfigurationRootDirectory && !container.SourceDirectory.StartsWith(argZero))
continue;
if (_Configuration.IgnoreRelativePaths.Any(l => container.SourceDirectory.Contains(l)) && IsIgnoreRelativePath(container.SourceDirectory))
continue;
filteredItems = GetFilterItems(container);
if (!filteredItems.Any())
continue;
@ -877,10 +900,11 @@ public partial class DlibDotNet
mappingFromLocation = new(areaPermille, face.Location.Confidence, deterministicHashCodeKey, normalizedPixelPercentage);
mapping = new(mappingFromItem, mappingFromLocation, mappingFromPerson);
face.SetMapping(mapping);
results.Add(face);
collection.Add(face);
}
}
}
results = (from l in collection orderby l.Mapping?.MappingFromItem.Id select l).ToArray();
return results;
}
@ -889,9 +913,8 @@ public partial class DlibDotNet
int? useFiltersCounter = null;
SortingContainer[] sortingContainers;
string dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, "()");
List<Shared.Models.Face> distinctFilteredFaces = SetMappingThenGetDistinctFilteredFacesWithMapping(argZero, containers);
Shared.Models.Face[] selectedFilteredFaces = E_Distance.GetSelectedFilteredFaces(distinctFilteredFaces);
E_Distance.SetFaceDistances(_AppSettings.MaxDegreeOfParallelism, ticks, selectedFilteredFaces);
Shared.Models.Face[] distinctFilteredFaces = SetMappingThenGetDistinctFilteredFacesWithMapping(argZero, containers);
Mapping[] mappingCollection = E_Distance.GetSelectedMappingCollection(distinctFilteredFaces);
MapLogic mapLogic = new(
_AppSettings.MaxDegreeOfParallelism,
_Configuration.PropertyConfiguration,
@ -900,29 +923,30 @@ public partial class DlibDotNet
personContainers,
a2PeopleSingletonDirectory,
eDistanceContentDirectory,
distinctFilteredFaces,
mappingCollection,
_Distance);
mapLogic.CopyManualFiles(dFacesContentDirectory, distinctFilteredFaces);
int totalNotMapped = mapLogic.AddToMapping(distinctFilteredFaces);
mapLogic.CopyManualFiles(dFacesContentDirectory, mappingCollection);
int totalNotMapped = mapLogic.AddToMapping(mappingCollection);
if (_Configuration.MappingSaveMapped)
mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, distinctFilteredFaces, totalNotMapped);
sortingContainers = _Distance.SetFaceMappingSortingCollectionThenGetSortingContainers(_AppSettings.MaxDegreeOfParallelism, ticks, mapLogic, selectedFilteredFaces, useFiltersCounter);
mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, totalNotMapped);
E_Distance.SetFaceDistances(_AppSettings.MaxDegreeOfParallelism, ticks, distinctFilteredFaces);
sortingContainers = _Distance.SetFaceMappingSortingCollectionThenGetSortingContainers(_AppSettings.MaxDegreeOfParallelism, ticks, mapLogic, distinctFilteredFaces, useFiltersCounter);
if (!sortingContainers.Any())
{
for (useFiltersCounter = 1; useFiltersCounter < 11; useFiltersCounter++)
{
sortingContainers = _Distance.SetFaceMappingSortingCollectionThenGetSortingContainers(_AppSettings.MaxDegreeOfParallelism, ticks, mapLogic, selectedFilteredFaces, useFiltersCounter);
sortingContainers = _Distance.SetFaceMappingSortingCollectionThenGetSortingContainers(_AppSettings.MaxDegreeOfParallelism, ticks, mapLogic, distinctFilteredFaces, useFiltersCounter);
if (sortingContainers.Any())
break;
}
}
E_Distance.SaveFaceDistances(_Configuration.PropertyConfiguration, sortingContainers);
if (totalNotMapped > 0)
mapLogic.ForceSingleImageThenSaveSorting(dFacesContentDirectory, d2FacePartsContentDirectory, distinctFilteredFaces, sortingContainers, useFiltersCounter, totalNotMapped);
mapLogic.ForceSingleImageThenSaveSorting(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, sortingContainers, useFiltersCounter, totalNotMapped);
if (_Configuration.MappingSaveNotMapped)
mapLogic.SaveNotMappedTicks();
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
mapLogic.SaveShortcuts(_Configuration.JuliePhares, distinctFilteredFaces);
mapLogic.SaveShortcuts(_Configuration.JuliePhares, mappingCollection);
}
private static Container? AreAllSameEndsWith(string argZero, Container[] containers)