Work with video
This commit is contained in:
@ -278,7 +278,6 @@ public partial class DlibDotNet
|
||||
ReadOnlyDictionary<long, List<int>> personKeyToIds;
|
||||
ReadOnlyCollection<string[]>? filesCollection = null;
|
||||
bool runToDoCollectionFirst = GetRunToDoCollectionFirst(ticks);
|
||||
Dictionary<int, List<MappingFromPhotoPrism>> fileNameToCollection;
|
||||
(aResultsFullGroupDirectory, bResultsFullGroupDirectory) = GetResultsFullGroupDirectories();
|
||||
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
|
||||
Shared.Models.Stateless.Methods.IPath.ChangeDateForEmptyDirectories(_Configuration.PropertyConfiguration.RootDirectory, ticks);
|
||||
@ -350,11 +349,11 @@ public partial class DlibDotNet
|
||||
(t, containers) = Shared.Models.Stateless.Methods.IContainer.GetContainers(_Configuration.PropertyConfiguration, aPropertySingletonDirectory, filesCollectionRootDirectory, filesCollection);
|
||||
progressBar.Tick();
|
||||
}
|
||||
fileNameToCollection = !Directory.Exists(fPhotoPrismSingletonDirectory) ? fileNameToCollection = [] : F_PhotoPrism.GetFileNameToCollection(fPhotoPrismSingletonDirectory);
|
||||
B_Metadata metadata = new(_Configuration.PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory);
|
||||
ReadOnlyCollection<Container> readOnlyContainers = new(containers);
|
||||
SaveDistinctIds(_Configuration.PropertyConfiguration, bResultsFullGroupDirectory, readOnlyContainers);
|
||||
mapLogic ??= new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, _Distance, personContainers, ticks, a2PeopleContentDirectory, a2PeopleSingletonDirectory, eDistanceContentDirectory);
|
||||
FullDoWork(argZero, propertyRoot, ticks, aResultsFullGroupDirectory, bResultsFullGroupDirectory, t, containers, propertyLogic, metadata, fileNameToCollection, mapLogic);
|
||||
ReadOnlyCollection<Item> distinctFilteredItems = Shared.Models.Stateless.Methods.IContainer.GetItems(_Configuration.PropertyConfiguration, new(containers), distinctItems: true, filterItems: true);
|
||||
FullDoWork(argZero, propertyRoot, ticks, aResultsFullGroupDirectory, bResultsFullGroupDirectory, fPhotoPrismSingletonDirectory, t, readOnlyContainers, propertyLogic, mapLogic);
|
||||
ReadOnlyCollection<Item> distinctFilteredItems = Shared.Models.Stateless.Methods.IContainer.GetItems(_Configuration.PropertyConfiguration, readOnlyContainers, distinctItems: true, filterItems: true);
|
||||
if (_Configuration.LookForAbandoned)
|
||||
{
|
||||
string dResultsFullGroupDirectory;
|
||||
@ -362,12 +361,12 @@ public partial class DlibDotNet
|
||||
foreach (string outputResolution in _Configuration.OutputResolutions)
|
||||
{
|
||||
(cResultsFullGroupDirectory, _, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory) = GetResultsFullGroupDirectories(outputResolution);
|
||||
mapLogic.LookForAbandoned(_Configuration.PropertyConfiguration, bResultsFullGroupDirectory, containers, cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory);
|
||||
mapLogic.LookForAbandoned(_Configuration.PropertyConfiguration, bResultsFullGroupDirectory, readOnlyContainers, cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory);
|
||||
}
|
||||
}
|
||||
_Distance.Clear();
|
||||
ReadOnlyCollection<Shared.Models.Face> distinctFilteredFaces = Map.Models.Stateless.Methods.IMapLogic.GetFaces(distinctFilteredItems);
|
||||
ReadOnlyCollection<Mapping> distinctFilteredMappingCollection = GetMappings(_Configuration.PropertyConfiguration, eDistanceContentDirectory, containers, mapLogic, distinctItems: true);
|
||||
ReadOnlyCollection<Mapping> distinctFilteredMappingCollection = GetMappings(_Configuration.PropertyConfiguration, eDistanceContentDirectory, readOnlyContainers, mapLogic, distinctItems: true);
|
||||
if (runToDoCollectionFirst)
|
||||
{
|
||||
if (!Directory.Exists(eDistanceContentDirectory))
|
||||
@ -391,7 +390,7 @@ public partial class DlibDotNet
|
||||
&& outputResolution == _Configuration.OutputResolutions[0]
|
||||
&& _Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution)
|
||||
&& _Exceptions.Count == 0)
|
||||
MapLogic(ticks, new(containers), fPhotoPrismContentDirectory, mapLogic, outputResolution, new(personKeyToIds), distinctFilteredFaces, distinctFilteredMappingCollection);
|
||||
MapLogic(ticks, readOnlyContainers, fPhotoPrismContentDirectory, mapLogic, outputResolution, new(personKeyToIds), distinctFilteredFaces, distinctFilteredMappingCollection);
|
||||
if (runToDoCollectionFirst && _Configuration.SaveRandomForOutputResolutions.Contains(outputResolution) && personKeyToIds.Count > 0 && distinctFilteredMappingCollection.Count > 0)
|
||||
_Random.Random(_Configuration.PropertyConfiguration, _Configuration.RadomUseBirthdayMinimum, _Configuration.ValidKeyWordsToIgnoreInRandom, outputResolution, personKeyToIds, notNineCollection, distinctFilteredMappingCollection);
|
||||
if (_IsEnvironment.Development)
|
||||
@ -509,7 +508,7 @@ public partial class DlibDotNet
|
||||
return result;
|
||||
}
|
||||
|
||||
private void FullDoWork(string argZero, string propertyRoot, long ticks, string aResultsFullGroupDirectory, string bResultsFullGroupDirectory, int t, Container[] containers, A_Property propertyLogic, B_Metadata metadata, Dictionary<int, List<MappingFromPhotoPrism>> fileNameToCollection, MapLogic mapLogic)
|
||||
private void FullDoWork(string argZero, string propertyRoot, long ticks, string aResultsFullGroupDirectory, string bResultsFullGroupDirectory, string fPhotoPrismSingletonDirectory, int t, ReadOnlyCollection<Container> readOnlyContainers, A_Property propertyLogic, MapLogic mapLogic)
|
||||
{
|
||||
int total;
|
||||
int notMapped;
|
||||
@ -525,10 +524,12 @@ public partial class DlibDotNet
|
||||
string dResultsFullGroupDirectory;
|
||||
string c2ResultsFullGroupDirectory;
|
||||
string d2ResultsFullGroupDirectory;
|
||||
int containersLength = containers.Length;
|
||||
int containersLength = readOnlyContainers.Count;
|
||||
List<Tuple<string, DateTime>> sourceDirectoryChanges = [];
|
||||
int maxDegreeOfParallelism = _AppSettings.MaxDegreeOfParallelism;
|
||||
Dictionary<int, List<MappingFromPhotoPrism>> fileNameToCollection = !Directory.Exists(fPhotoPrismSingletonDirectory) ? fileNameToCollection = [] : F_PhotoPrism.GetFileNameToCollection(fPhotoPrismSingletonDirectory);
|
||||
string dResultsDateGroupDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(_Configuration.PropertyConfiguration, nameof(D_Face));
|
||||
B_Metadata metadata = new(_Configuration.PropertyConfiguration, _Configuration.ForceMetadataLastWriteTimeToCreationTime, _Configuration.PropertiesChangedForMetadata, bResultsFullGroupDirectory);
|
||||
foreach (string outputResolution in _Configuration.OutputResolutions)
|
||||
{
|
||||
total = 0;
|
||||
@ -538,9 +539,9 @@ public partial class DlibDotNet
|
||||
_Resize.Update(cResultsFullGroupDirectory);
|
||||
_FaceParts.Update(d2ResultsFullGroupDirectory);
|
||||
_BlurHasher.Update(c2ResultsFullGroupDirectory);
|
||||
for (int i = 0; i < containers.Length; i++)
|
||||
for (int i = 0; i < readOnlyContainers.Count; i++)
|
||||
{
|
||||
container = containers[i];
|
||||
container = readOnlyContainers[i];
|
||||
if (container.Items.Count == 0)
|
||||
continue;
|
||||
if (!_ArgZeroIsConfigurationRootDirectory && !container.SourceDirectory.StartsWith(argZero))
|
||||
@ -595,21 +596,45 @@ public partial class DlibDotNet
|
||||
}
|
||||
}
|
||||
|
||||
private ReadOnlyCollection<Mapping> GetMappings(Property.Models.Configuration propertyConfiguration, string eDistanceContentDirectory, Container[] containers, MapLogic mapLogic, bool distinctItems)
|
||||
private static void SaveDistinctIds(Property.Models.Configuration propertyConfiguration, string bResultsFullGroupDirectory, ReadOnlyCollection<Container> readOnlyContainers)
|
||||
{
|
||||
List<int> distinct = [];
|
||||
string bMetadataCollectionDirectory = Path.Combine(bResultsFullGroupDirectory, propertyConfiguration.ResultCollection);
|
||||
if (!Directory.Exists(bMetadataCollectionDirectory))
|
||||
_ = Directory.CreateDirectory(bMetadataCollectionDirectory);
|
||||
foreach (Container container in readOnlyContainers)
|
||||
{
|
||||
if (container.Items.Count == 0)
|
||||
continue;
|
||||
foreach (Item item in container.Items)
|
||||
{
|
||||
if (item.Property?.Id is null)
|
||||
continue;
|
||||
if (distinct.Contains(item.Property.Id.Value))
|
||||
continue;
|
||||
distinct.Add(item.Property.Id.Value);
|
||||
}
|
||||
}
|
||||
distinct.Sort();
|
||||
string json = JsonSerializer.Serialize(distinct);
|
||||
_ = Shared.Models.Stateless.Methods.IPath.WriteAllText(Path.Combine(bMetadataCollectionDirectory, ".json"), json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null);
|
||||
}
|
||||
|
||||
private ReadOnlyCollection<Mapping> GetMappings(Property.Models.Configuration propertyConfiguration, string eDistanceContentDirectory, ReadOnlyCollection<Container> readOnlyContainers, MapLogic mapLogic, bool distinctItems)
|
||||
{
|
||||
ReadOnlyCollection<Mapping> results;
|
||||
int count = 0;
|
||||
int notMapped;
|
||||
Mapping mapping;
|
||||
bool anyValidFaces;
|
||||
List<int> distinct = [];
|
||||
string focusRelativePath;
|
||||
bool? isFocusRelativePath;
|
||||
List<int> distinct = [];
|
||||
DateTime[] containerDateTimes;
|
||||
IEnumerable<Item> filteredItems;
|
||||
MappingFromItem mappingFromItem;
|
||||
List<Mapping> mappingCollection = [];
|
||||
foreach (Container container in containers)
|
||||
foreach (Container container in readOnlyContainers)
|
||||
{
|
||||
if (container.Items.Count == 0)
|
||||
continue;
|
||||
@ -858,6 +883,7 @@ public partial class DlibDotNet
|
||||
configuration.DistanceRenameToMatch,
|
||||
configuration.FaceConfidencePercent,
|
||||
configuration.FaceDistancePermyriad,
|
||||
configuration.LinkedAlpha,
|
||||
configuration.LocationContainerDebugDirectory,
|
||||
configuration.LocationContainerDirectoryPattern,
|
||||
configuration.LocationContainerDistanceGroupMinimum,
|
||||
@ -885,41 +911,21 @@ public partial class DlibDotNet
|
||||
private (Mapping, int) GetMappingAndUpdateMappingFromPerson(MapLogic mapLogic, Item item, bool? isFocusRelativePath, MappingFromItem mappingFromItem)
|
||||
{
|
||||
Mapping result;
|
||||
bool? canReMap;
|
||||
int? eyeα = null;
|
||||
bool? isFocusPerson;
|
||||
bool? eyeReview = null;
|
||||
bool? inSkipCollection;
|
||||
int confidencePercent = 0;
|
||||
int faceAreaPermyriad = 0;
|
||||
int wholePercentRectangle;
|
||||
string deterministicHashCodeKey;
|
||||
MappingFromLocation? mappingFromLocation;
|
||||
MappingFromFilterPre mappingFromFilterPre;
|
||||
MappingFromFilterPost mappingFromFilterPost;
|
||||
bool? isFocusModel = GetIsFocusModel(item.Property);
|
||||
long[] jLinkResolvedPersonKeys = _JLinkResolvedDirectories.Select(l => l.PersonKey).ToArray();
|
||||
ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>? wholePercentagesToPersonContainers = mapLogic.GetWholePercentagesToPersonContainers(item.Property?.Id);
|
||||
if (item.Property?.Id is null)
|
||||
{
|
||||
canReMap = null;
|
||||
isFocusPerson = null;
|
||||
inSkipCollection = null;
|
||||
mappingFromLocation = null;
|
||||
mappingFromFilterPost = new(canReMap, inSkipCollection, isFocusPerson);
|
||||
mappingFromFilterPre = new(inSkipCollection, isFocusModel, isFocusRelativePath);
|
||||
}
|
||||
else
|
||||
{
|
||||
wholePercentRectangle = Shared.Models.Stateless.Methods.ILocation.GetWholePercentages(Shared.Models.Stateless.ILocation.Digits);
|
||||
deterministicHashCodeKey = IMapping.GetDeterministicHashCodeKey(item.FilePath, Shared.Models.Stateless.ILocation.Digits);
|
||||
mappingFromLocation = new(faceAreaPermyriad, confidencePercent, deterministicHashCodeKey, eyeα, eyeReview, wholePercentRectangle);
|
||||
inSkipCollection = mapLogic.InSkipCollection(item.Property.Id.Value, mappingFromLocation);
|
||||
mappingFromFilterPre = new(inSkipCollection, isFocusModel, isFocusRelativePath);
|
||||
canReMap = Map.Models.Stateless.Methods.IMapLogic.CanReMap(jLinkResolvedPersonKeys, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, jLinkResolvedPersonKeys, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
mappingFromFilterPost = new(canReMap, inSkipCollection, isFocusPerson);
|
||||
}
|
||||
ReadOnlyDictionary<int, ReadOnlyCollection<PersonContainer>>? wholePercentagesToPersonContainers = mapLogic.GetWholePercentagesToPersonContainers(mappingFromItem.Id);
|
||||
int wholePercentRectangle = Shared.Models.Stateless.Methods.ILocation.GetWholePercentages(Shared.Models.Stateless.ILocation.Digits);
|
||||
string deterministicHashCodeKey = IMapping.GetDeterministicHashCodeKey(item.FilePath, Shared.Models.Stateless.ILocation.Digits);
|
||||
MappingFromLocation? mappingFromLocation = new(faceAreaPermyriad, confidencePercent, deterministicHashCodeKey, eyeα, eyeReview, wholePercentRectangle);
|
||||
bool? inSkipCollection = mapLogic.InSkipCollection(mappingFromItem.Id, mappingFromLocation);
|
||||
MappingFromFilterPre mappingFromFilterPre = new(inSkipCollection, isFocusModel, isFocusRelativePath);
|
||||
bool? canReMap = Map.Models.Stateless.Methods.IMapLogic.CanReMap(jLinkResolvedPersonKeys, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
bool? isFocusPerson = mapLogic.IsFocusPerson(_Configuration.SkipPersonWithMoreThen, jLinkResolvedPersonKeys, wholePercentagesToPersonContainers, mappingFromLocation);
|
||||
MappingFromFilterPost mappingFromFilterPost = new(canReMap, inSkipCollection, isFocusPerson);
|
||||
result = new(item.FilePath, mappingFromFilterPost, mappingFromFilterPre, mappingFromItem, mappingFromLocation, mappingFromPhotoPrismCollection: null);
|
||||
int notMapped = mapLogic.UpdateMappingFromPerson(wholePercentagesToPersonContainers, result);
|
||||
return (result, notMapped);
|
||||
|
Reference in New Issue
Block a user