Removed both
faceDistanceLength.Length.Value / distanceTolerance and confidence / rangeFaceConfidence[1] Removed ReviewLocationContainerDistanceTolerance Added MoveToDecade IFaceDistance.MappingFromFilterPost ISorting.CanReMap
This commit is contained in:
@ -39,7 +39,7 @@ public partial class DlibDotNet
|
||||
private readonly Models.Configuration _Configuration;
|
||||
private readonly bool _ArgZeroIsConfigurationRootDirectory;
|
||||
private readonly Map.Models.Configuration _MapConfiguration;
|
||||
private readonly List<(string, long)> _JLinkResolvedDirectories;
|
||||
private readonly List<(string Directory, long PersonKey)> _JLinkResolvedDirectories;
|
||||
|
||||
public DlibDotNet(
|
||||
List<string> args,
|
||||
@ -107,7 +107,7 @@ public partial class DlibDotNet
|
||||
_FaceParts = new D2_FaceParts(_Configuration.PropertyConfiguration, imageCodecInfo, encoderParameters, filenameExtension, configuration.CheckDFaceAndUpWriteDates, configuration.OverrideForFaceLandmarkImages);
|
||||
}
|
||||
_MapConfiguration = Get(configuration, _Faces.FileNameExtension, _Faces.HiddenFileNameExtension, _FaceParts.FileNameExtension);
|
||||
_Distance = new(configuration.DistanceMoveUnableToMatch, configuration.DistanceRenameToMatch, configuration.FaceConfidencePercent, configuration.RangeDistanceTolerance, configuration.RangeFaceConfidence, configuration.RectangleIntersectMinimums);
|
||||
_Distance = new(configuration.DistanceMoveUnableToMatch, configuration.DistanceRenameToMatch, configuration.FaceConfidencePercent, configuration.RangeDistanceTolerance, configuration.RectangleIntersectMinimums);
|
||||
if (_PropertyRootExistedBefore || !_ArgZeroIsConfigurationRootDirectory)
|
||||
personContainers = new(new List<PersonContainer>());
|
||||
else
|
||||
@ -256,7 +256,7 @@ 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), _Configuration.PropertyConfiguration.ResultContent);
|
||||
string a2PeopleSingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(A2_People), _Configuration.PropertyConfiguration.ResultSingleton);
|
||||
_ = Directory.CreateDirectory(Path.Combine(eDistanceContentDirectory, $"({ticks})"));
|
||||
_ = Directory.CreateDirectory(Path.Combine(eDistanceContentDirectory, $"{ticks}"));
|
||||
if (runToDoCollectionFirst)
|
||||
mapLogic = null;
|
||||
else
|
||||
@ -338,7 +338,7 @@ public partial class DlibDotNet
|
||||
}
|
||||
_Distance.Clear();
|
||||
ReadOnlyCollection<Shared.Models.Face> distinctFilteredFaces = Map.Models.Stateless.Methods.IMapLogic.GetFaces(distinctFilteredItems);
|
||||
ReadOnlyCollection<Mapping> distinctFilteredMappingCollection = GetMappings(_Configuration.PropertyConfiguration, containers, mapLogic, distinctItems: true);
|
||||
ReadOnlyCollection<Mapping> distinctFilteredMappingCollection = SetCreationTimeAndGetMappings(_Configuration.PropertyConfiguration, eDistanceContentDirectory, containers, mapLogic, distinctItems: true);
|
||||
if (runToDoCollectionFirst)
|
||||
{
|
||||
string json = JsonSerializer.Serialize(distinctFilteredMappingCollection);
|
||||
@ -556,7 +556,7 @@ public partial class DlibDotNet
|
||||
}
|
||||
}
|
||||
|
||||
private ReadOnlyCollection<Mapping> GetMappings(Property.Models.Configuration propertyConfiguration, Container[] containers, MapLogic mapLogic, bool distinctItems)
|
||||
private ReadOnlyCollection<Mapping> SetCreationTimeAndGetMappings(Property.Models.Configuration propertyConfiguration, string eDistanceContentDirectory, Container[] containers, MapLogic mapLogic, bool distinctItems)
|
||||
{
|
||||
ReadOnlyCollection<Mapping> results;
|
||||
int count = 0;
|
||||
@ -602,7 +602,8 @@ public partial class DlibDotNet
|
||||
mappingCollection.Add(face.Mapping);
|
||||
if (face.Mapping.MappingFromPerson is null || face.Mapping.MappingFromPerson.LocationContainersFiles.Count == 0)
|
||||
continue;
|
||||
if (_Configuration.LocationContainerDistanceTolerance is null)
|
||||
Map.Models.Stateless.Methods.IMapLogic.SetCreationTime(face.Mapping.MappingFromItem, face.Mapping.MappingFromPerson);
|
||||
if (_Configuration.MoveToDecade && _Configuration.LocationContainerDistanceTolerance is null)
|
||||
Map.Models.Stateless.Methods.IMapLogic.MoveToDecade(propertyConfiguration, face.Mapping.MappingFromItem, face.Mapping.MappingFromPerson);
|
||||
}
|
||||
if (!anyValidFaces)
|
||||
@ -612,6 +613,8 @@ public partial class DlibDotNet
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_Configuration.MoveToDecade && _Configuration.LocationContainerDistanceTolerance is null)
|
||||
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(eDistanceContentDirectory);
|
||||
results = new((from l in mappingCollection orderby l.MappingFromItem.Id select l).ToArray());
|
||||
return results;
|
||||
}
|
||||
@ -779,6 +782,7 @@ public partial class DlibDotNet
|
||||
double? α;
|
||||
int? eyeα;
|
||||
bool? isUsed;
|
||||
bool? canReMap;
|
||||
bool? eyeReview;
|
||||
Mapping mapping;
|
||||
int notMapped = 0;
|
||||
@ -790,8 +794,11 @@ public partial class DlibDotNet
|
||||
string deterministicHashCodeKey;
|
||||
MappingFromFilter mappingFromFilter;
|
||||
MappingFromLocation? mappingFromLocation;
|
||||
MappingFromFilterPre mappingFromFilterPre;
|
||||
MappingFromFilterPost mappingFromFilterPost;
|
||||
bool? isFocusModel = GetIsFocusModel(item.Property);
|
||||
bool ignoreXMatches = _JLinkResolvedDirectories.Count > 0;
|
||||
long[] jLinkResolvedPersonKeys = _JLinkResolvedDirectories.Select(l => l.PersonKey).ToArray();
|
||||
ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>? wholePercentagesToPersonContainers;
|
||||
ReadOnlyCollection<string> locationContainersFiles = new((from l in locationContainers select l.File).ToArray());
|
||||
foreach (Shared.Models.Face face in faces)
|
||||
@ -799,10 +806,13 @@ public partial class DlibDotNet
|
||||
wholePercentagesToPersonContainers = mapLogic.GetWholePercentagesToPersonContainers(item.Property?.Id);
|
||||
if (item.Property?.Id is null || face.FaceEncoding is null || face.Location is null || face.OutputResolution is null)
|
||||
{
|
||||
canReMap = null;
|
||||
isUsed = null;
|
||||
isFocusPerson = null;
|
||||
inSkipCollection = null;
|
||||
mappingFromLocation = null;
|
||||
mappingFromFilterPost = new(canReMap, inSkipCollection, isFocusPerson);
|
||||
mappingFromFilterPre = new(inSkipCollection, isFocusModel, isFocusRelativePath);
|
||||
mappingFromFilter = new(isFocusModel, isFocusPerson, isFocusRelativePath, inSkipCollection, isUsed);
|
||||
}
|
||||
else
|
||||
@ -814,17 +824,21 @@ public partial class DlibDotNet
|
||||
(eyeReview, α) = Shared.Models.Stateless.Methods.IFace.GetEyeα(face.FaceParts);
|
||||
eyeα = α is null ? null : (int)Math.Round(Math.Abs(α.Value));
|
||||
}
|
||||
confidencePercent = Shared.Models.Stateless.Methods.ILocation.GetConfidencePercent(_Configuration.FaceConfidencePercent, _Configuration.RangeFaceConfidence, face.Location.Confidence);
|
||||
confidencePercent = Shared.Models.Stateless.Methods.ILocation.GetConfidencePercent(_Configuration.FaceConfidencePercent, face.Location.Confidence);
|
||||
faceAreaPermyriad = IMapping.GetAreaPermyriad(_Configuration.FaceAreaPermyriad, face.Location, face.OutputResolution);
|
||||
wholePercentRectangle = Shared.Models.Stateless.Methods.ILocation.GetWholePercentages(face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
|
||||
deterministicHashCodeKey = IMapping.GetDeterministicHashCodeKey(item.Property.Id.Value, face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
|
||||
mappingFromLocation = new(faceAreaPermyriad, confidencePercent, deterministicHashCodeKey, eyeα, eyeReview, wholePercentRectangle);
|
||||
isUsed = mapLogic.IsUsed(ignoreXMatches, item.Property.Id.Value, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
inSkipCollection = mapLogic.InSkipCollection(item.Property.Id.Value, mappingFromLocation);
|
||||
isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, _JLinkResolvedDirectories, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
mappingFromFilterPre = new(inSkipCollection, isFocusModel, isFocusRelativePath);
|
||||
canReMap = Map.Models.Stateless.Methods.IMapLogic.CanReMap(jLinkResolvedPersonKeys, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
isUsed = mapLogic.IsUsed(ignoreXMatches, item.Property.Id.Value, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
isFocusPerson = mapLogic.IsFocusPersonOld(_Configuration.SkipPersonWithMoreThen, _JLinkResolvedDirectories, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
mappingFromFilter = new(isFocusModel, isFocusPerson, isFocusRelativePath, inSkipCollection, isUsed);
|
||||
isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, jLinkResolvedPersonKeys, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
mappingFromFilterPost = new(canReMap, inSkipCollection, isFocusPerson);
|
||||
}
|
||||
mapping = new(mappingFromItem, mappingFromFilter, mappingFromLocation, mappingFromPhotoPrismCollection);
|
||||
mapping = new(mappingFromFilter, mappingFromFilterPost, mappingFromFilterPre, mappingFromItem, mappingFromLocation, mappingFromPhotoPrismCollection);
|
||||
notMapped += mapLogic.UpdateMappingFromPerson(locationContainersFiles, wholePercentagesToPersonContainers, mapping);
|
||||
face.SetMapping(mapping);
|
||||
}
|
||||
@ -848,7 +862,6 @@ public partial class DlibDotNet
|
||||
configuration.PersonCharacters.ToArray(),
|
||||
configuration.RangeDaysDeltaTolerance,
|
||||
configuration.RangeDistanceTolerance,
|
||||
configuration.SaveMappedRelations,
|
||||
configuration.SaveSortingWithoutPerson,
|
||||
configuration.SkipNotSkipDirectories,
|
||||
configuration.SortingMaximumPerKey,
|
||||
@ -863,6 +876,7 @@ public partial class DlibDotNet
|
||||
{
|
||||
Mapping result;
|
||||
bool? isUsed;
|
||||
bool? canReMap;
|
||||
int? eyeα = null;
|
||||
bool? isFocusPerson;
|
||||
bool? eyeReview = null;
|
||||
@ -873,15 +887,21 @@ public partial class DlibDotNet
|
||||
string deterministicHashCodeKey;
|
||||
MappingFromFilter mappingFromFilter;
|
||||
MappingFromLocation? mappingFromLocation;
|
||||
MappingFromFilterPre mappingFromFilterPre;
|
||||
MappingFromFilterPost mappingFromFilterPost;
|
||||
bool? isFocusModel = GetIsFocusModel(item.Property);
|
||||
bool ignoreXMatches = _JLinkResolvedDirectories.Count > 0;
|
||||
long[] jLinkResolvedPersonKeys = _JLinkResolvedDirectories.Select(l => l.PersonKey).ToArray();
|
||||
ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>? wholePercentagesToPersonContainers = mapLogic.GetWholePercentagesToPersonContainers(item.Property?.Id);
|
||||
if (item.Property?.Id is null)
|
||||
{
|
||||
isUsed = null;
|
||||
canReMap = null;
|
||||
isFocusPerson = null;
|
||||
inSkipCollection = null;
|
||||
mappingFromLocation = null;
|
||||
mappingFromFilterPost = new(canReMap, inSkipCollection, isFocusPerson);
|
||||
mappingFromFilterPre = new(inSkipCollection, isFocusModel, isFocusRelativePath);
|
||||
mappingFromFilter = new(isFocusModel, isFocusPerson, isFocusRelativePath, inSkipCollection, isUsed);
|
||||
}
|
||||
else
|
||||
@ -889,12 +909,16 @@ public partial class DlibDotNet
|
||||
wholePercentRectangle = Shared.Models.Stateless.Methods.ILocation.GetWholePercentages(Shared.Models.Stateless.ILocation.Digits);
|
||||
deterministicHashCodeKey = IMapping.GetDeterministicHashCodeKey(item.Property.Id.Value, Shared.Models.Stateless.ILocation.Digits);
|
||||
mappingFromLocation = new(faceAreaPermyriad, confidencePercent, deterministicHashCodeKey, eyeα, eyeReview, wholePercentRectangle);
|
||||
isUsed = mapLogic.IsUsed(ignoreXMatches, item.Property.Id.Value, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
inSkipCollection = mapLogic.InSkipCollection(item.Property.Id.Value, mappingFromLocation);
|
||||
isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, _JLinkResolvedDirectories, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
mappingFromFilterPre = new(inSkipCollection, isFocusModel, isFocusRelativePath);
|
||||
canReMap = Map.Models.Stateless.Methods.IMapLogic.CanReMap(jLinkResolvedPersonKeys, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
isUsed = mapLogic.IsUsed(ignoreXMatches, item.Property.Id.Value, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
isFocusPerson = mapLogic.IsFocusPersonOld(_Configuration.SkipPersonWithMoreThen, _JLinkResolvedDirectories, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
mappingFromFilter = new(isFocusModel, isFocusPerson, isFocusRelativePath, inSkipCollection, isUsed);
|
||||
isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, jLinkResolvedPersonKeys, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
mappingFromFilterPost = new(canReMap, inSkipCollection, isFocusPerson);
|
||||
}
|
||||
result = new(mappingFromItem, mappingFromFilter, mappingFromLocation, mappingFromPhotoPrismCollection: null);
|
||||
result = new(mappingFromFilter, mappingFromFilterPost, mappingFromFilterPre, mappingFromItem, mappingFromLocation, mappingFromPhotoPrismCollection: null);
|
||||
int notMapped = mapLogic.UpdateMappingFromPerson(locationContainersFiles, wholePercentagesToPersonContainers, result);
|
||||
return (result, notMapped);
|
||||
}
|
||||
@ -1144,8 +1168,8 @@ public partial class DlibDotNet
|
||||
{
|
||||
if (_Log is null)
|
||||
throw new NullReferenceException(nameof(_Log));
|
||||
DistanceLimits distanceLimits;
|
||||
int? useFiltersCounter = null;
|
||||
DistanceLimits distanceLimits;
|
||||
SortingContainer[] sortingContainers;
|
||||
FaceDistanceContainer[] filteredFaceDistanceContainers;
|
||||
long? skipOlderThan = _Configuration.SkipOlderThanDays is null ? null : new DateTime(ticks).AddDays(-_Configuration.SkipOlderThanDays.Value).Ticks;
|
||||
@ -1175,7 +1199,7 @@ public partial class DlibDotNet
|
||||
E_Distance.SaveFaceDistances(_Configuration.PropertyConfiguration, sortingContainers);
|
||||
if (filteredFaceDistanceContainers.Length > 0)
|
||||
{
|
||||
int updated = mapLogic.UpdateFromSortingContainers(_Configuration.SaveIndividually, idToWholePercentagesToMapping, distanceLimits, sortingContainers);
|
||||
int updated = sortingContainers.Length == 0 ? 0 : mapLogic.UpdateFromSortingContainers(_Configuration.SaveIndividually, idToWholePercentagesToMapping, distanceLimits, sortingContainers);
|
||||
List<SaveContainer> saveContainers = mapLogic.GetSaveContainers(_Configuration.SaveIndividually, dFacesContentDirectory, d2FacePartsContentDirectory, d2FacePartsContentCollectionDirectory, mappingCollection, idToWholePercentagesToMapping, useFiltersCounter, sortingContainers.Length > 0);
|
||||
mapLogic.SaveContainers(_Configuration.SaveIndividually, updated, saveContainers);
|
||||
}
|
||||
@ -1184,7 +1208,7 @@ public partial class DlibDotNet
|
||||
|
||||
private void SaveFaceDistances(long ticks, MapLogic mapLogic, ReadOnlyCollection<Shared.Models.Face> distinctFilteredFaces, ReadOnlyCollection<Mapping> mappingCollection, string dFacesContentDirectory, string d2FacePartsContentDirectory, string d2FacePartsContentCollectionDirectory, ReadOnlyDictionary<int, ReadOnlyDictionary<int, Mapping>> idToWholePercentagesToMapping)
|
||||
{
|
||||
E_Distance.SetFaceDistances(_AppSettings.MaxDegreeOfParallelism, ticks, distinctFilteredFaces);
|
||||
E_Distance.PreFilterSetFaceDistances(_AppSettings.MaxDegreeOfParallelism, ticks, distinctFilteredFaces);
|
||||
ReadOnlyCollection<FaceDistanceContainer> faceDistanceContainers = E_Distance.GetFaceDistanceContainers(distinctFilteredFaces);
|
||||
if (faceDistanceContainers.Count > 0)
|
||||
{
|
||||
|
@ -42,8 +42,7 @@ public class Configuration
|
||||
public string[]? MixedYearRelativePaths { get; set; }
|
||||
public string? ModelDirectory { get; set; }
|
||||
public string? ModelName { get; set; }
|
||||
public int? NumberOfJitters { get; set; }
|
||||
public int? NumberOfTimesToUpsample { get; set; }
|
||||
public bool? MoveToDecade { get; set; }
|
||||
public string? OutputExtension { get; set; }
|
||||
public int? OutputQuality { get; set; }
|
||||
public string[]? OutputResolutions { get; set; }
|
||||
@ -75,8 +74,6 @@ public class Configuration
|
||||
public bool? SaveFullYearOfRandomFiles { get; set; }
|
||||
public bool? SaveIndividually { get; set; }
|
||||
public string[]? SaveMappedForOutputResolutions { get; set; }
|
||||
public bool? SaveMappedRelations { get; set; }
|
||||
public string[]? SaveMappedRelationsForOutputResolutions { get; set; }
|
||||
public string[]? SavePropertyShortcutsForOutputResolutions { get; set; }
|
||||
public string[]? SaveRandomForOutputResolutions { get; set; }
|
||||
public bool? SaveResizedSubfiles { get; set; }
|
||||
@ -142,6 +139,7 @@ public class Configuration
|
||||
// if (configuration?.MixedYearRelativePaths is null) throw new NullReferenceException(nameof(configuration.MixedYearRelativePaths));
|
||||
if (configuration?.ModelDirectory is null) throw new NullReferenceException(nameof(configuration.ModelDirectory));
|
||||
if (configuration?.ModelName is null) throw new NullReferenceException(nameof(configuration.ModelName));
|
||||
if (configuration?.MoveToDecade is null) throw new NullReferenceException(nameof(configuration.MoveToDecade));
|
||||
if (configuration?.OutputExtension is null) throw new NullReferenceException(nameof(configuration.OutputExtension));
|
||||
if (configuration?.OutputQuality is null) throw new NullReferenceException(nameof(configuration.OutputQuality));
|
||||
// if (configuration?.OutputResolutions is null) throw new NullReferenceException(nameof(configuration.OutputResolutions));
|
||||
@ -173,7 +171,6 @@ public class Configuration
|
||||
if (configuration?.SaveFullYearOfRandomFiles is null) throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
|
||||
if (configuration?.SaveIndividually is null) throw new NullReferenceException(nameof(configuration.SaveIndividually));
|
||||
// if (configuration?.SaveMappedForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveMappedForOutputResolutions));
|
||||
if (configuration?.SaveMappedRelations is null) throw new NullReferenceException(nameof(configuration.SaveMappedRelations));
|
||||
// if (configuration?.SavePropertyShortcutsForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SavePropertyShortcutsForOutputResolutions));
|
||||
// if (configuration?.SaveRandomForOutputResolutions is null) throw new NullReferenceException(nameof(configuration.SaveRandomForOutputResolutions));
|
||||
if (configuration?.SaveResizedSubfiles is null) throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
|
||||
@ -226,6 +223,7 @@ public class Configuration
|
||||
configuration.MixedYearRelativePaths ?? Array.Empty<string>(),
|
||||
configuration.ModelDirectory,
|
||||
configuration.ModelName,
|
||||
configuration.MoveToDecade.Value,
|
||||
configuration.OutputExtension,
|
||||
configuration.OutputQuality.Value,
|
||||
configuration.OutputResolutions ?? Array.Empty<string>(),
|
||||
@ -257,7 +255,6 @@ public class Configuration
|
||||
configuration.SaveFullYearOfRandomFiles.Value,
|
||||
configuration.SaveIndividually.Value,
|
||||
configuration.SaveMappedForOutputResolutions ?? Array.Empty<string>(),
|
||||
configuration.SaveMappedRelations.Value,
|
||||
configuration.SavePropertyShortcutsForOutputResolutions ?? Array.Empty<string>(),
|
||||
configuration.SaveRandomForOutputResolutions ?? Array.Empty<string>(),
|
||||
configuration.SaveResizedSubfiles.Value,
|
||||
|
@ -36,6 +36,7 @@ public record Configuration(Property.Models.Configuration PropertyConfiguration,
|
||||
string[] MixedYearRelativePaths,
|
||||
string ModelDirectory,
|
||||
string ModelName,
|
||||
bool MoveToDecade,
|
||||
string OutputExtension,
|
||||
int OutputQuality,
|
||||
string[] OutputResolutions,
|
||||
@ -67,7 +68,6 @@ public record Configuration(Property.Models.Configuration PropertyConfiguration,
|
||||
bool SaveFullYearOfRandomFiles,
|
||||
bool SaveIndividually,
|
||||
string[] SaveMappedForOutputResolutions,
|
||||
bool SaveMappedRelations,
|
||||
string[] SavePropertyShortcutsForOutputResolutions,
|
||||
string[] SaveRandomForOutputResolutions,
|
||||
bool SaveResizedSubfiles,
|
||||
|
Reference in New Issue
Block a user