Save Resized Images by Person Key Formatted

for Output Resolutions
This commit is contained in:
Mike Phares 2022-10-02 10:40:32 -07:00
parent 9b8e3bdf55
commit 331d42685a
15 changed files with 125 additions and 141 deletions

View File

@ -130,7 +130,7 @@ public partial class DlibDotNet
if (rootResultsDirectory is null)
throw new Exception();
Storage storage = new(rootDirectory, rootResultsDirectory, peopleRootDirectory);
personContainers = Shared.Models.Stateless.Methods.IPersonContainer.GetPersonContainers(storage, configuration.PersonBirthdayFormat, _Faces.FileNameExtension);
personContainers = Shared.Models.Stateless.Methods.IPersonContainer.GetPersonContainers(storage, configuration.PersonBirthdayFormat, configuration.JuliePhares, _Faces.FileNameExtension);
}
if (!isSilent && configuration.TestDistanceResults)
{
@ -268,8 +268,8 @@ public partial class DlibDotNet
throw new Exception($"One or more {nameof(configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions)} are not in the ValidResolutions list!");
if ((from l in configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any())
throw new Exception($"One or more {nameof(configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions)} are not in the ValidResolutions list!");
if ((from l in configuration.SaveShortcutsForOutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any())
throw new Exception($"One or more {nameof(configuration.SaveShortcutsForOutputResolutions)} are not in the ValidResolutions list!");
if ((from l in configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any())
throw new Exception($"One or more {nameof(configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions)} are not in the ValidResolutions list!");
if ((from l in configuration.SaveFaceLandmarkForOutputResolutions where !configuration.ValidResolutions.Contains(l) select false).Any())
throw new Exception($"One or more {nameof(configuration.SaveFaceLandmarkForOutputResolutions)} are not in the ValidResolutions list!");
if (configuration.DistanceFactor + configuration.LocationConfidenceFactor != 10)
@ -943,8 +943,8 @@ public partial class DlibDotNet
mapLogic.UpdateFromSortingContainersThenSaveContainers(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, useFiltersCounter, sortingContainers, totalNotMapped);
if (_Configuration.MappingSaveNotMapped)
mapLogic.SaveNotMappedTicks();
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
mapLogic.SaveShortcuts(_Configuration.JuliePhares, mappingCollection);
if (_Configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions.Contains(outputResolution))
mapLogic.SaveResizedImagesByPersonKeyFormatted(_Configuration.JuliePhares, mappingCollection, totalNotMapped);
}
private static Container? AreAllSameEndsWith(string argZero, Container[] containers)

View File

@ -67,8 +67,8 @@ public class Configuration
[Display(Name = "Reverse"), Required] public bool? Reverse { get; set; }
[Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; }
[Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { get; set; }
[Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; }
[Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; }
[Display(Name = "Sorting Days Delta Tolerance"), Required] public int? SortingDaysDeltaTolerance { get; set; }
[Display(Name = "SortingMaximumPerFaceShould be High"), Required] public int? SortingMaximumPerFaceShouldBeHigh { get; set; }
@ -190,10 +190,10 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.SaveFaceLandmarkForOutputResolutions));
if (configuration.SaveFullYearOfRandomFiles is null)
throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null)
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>();
if (configuration.SaveResizedSubfiles is null)
throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
if (configuration.SaveShortcutsForOutputResolutions is null)
configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>();
if (configuration.SkipSearch is null)
throw new NullReferenceException(nameof(configuration.SkipSearch));
if (configuration.SortingDaysDeltaTolerance is null)
@ -214,8 +214,8 @@ public class Configuration
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>();
if (configuration.SaveFaceLandmarkForOutputResolutions is null)
configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>();
if (configuration.SaveShortcutsForOutputResolutions is null)
configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>();
if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null)
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>();
_ = DateTime.Now.AddDays(-configuration.SortingDaysDeltaTolerance.Value);
result = new(configuration.PropertyConfiguration,
configuration.CheckDFaceAndUpWriteDates.Value,
@ -274,8 +274,8 @@ public class Configuration
configuration.Reverse.Value,
configuration.SaveFaceLandmarkForOutputResolutions,
configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions,
configuration.SaveResizedSubfiles.Value,
configuration.SaveShortcutsForOutputResolutions,
configuration.SkipSearch.Value,
configuration.SortingDaysDeltaTolerance.Value,
configuration.SortingMaximumPerFaceShouldBeHigh.Value,

View File

@ -65,8 +65,8 @@ public class Configuration
public bool Reverse { init; get; }
public string[] SaveFaceLandmarkForOutputResolutions { init; get; }
public bool SaveFullYearOfRandomFiles { init; get; }
public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { init; get; }
public bool SaveResizedSubfiles { init; get; }
public string[] SaveShortcutsForOutputResolutions { init; get; }
public bool SkipSearch { init; get; }
public int SortingDaysDeltaTolerance { init; get; }
public int SortingMaximumPerFaceShouldBeHigh { init; get; }
@ -133,8 +133,8 @@ public class Configuration
bool reverse,
string[] saveFaceLandmarkForOutputResolutions,
bool saveFullYearOfRandomFiles,
string[] saveResizedImagesByPersonKeyFormattedForOutputResolutions,
bool saveResizedSubfiles,
string[] saveShortcutsForOutputResolutions,
bool skipSearch,
int sortingDaysDeltaTolerance,
int sortingMaximumPerFaceShouldBeHigh,
@ -200,8 +200,8 @@ public class Configuration
Reverse = reverse;
SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions;
SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles;
SaveResizedImagesByPersonKeyFormattedForOutputResolutions = saveResizedImagesByPersonKeyFormattedForOutputResolutions;
SaveResizedSubfiles = saveResizedSubfiles;
SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions;
SkipSearch = skipSearch;
SortingDaysDeltaTolerance = sortingDaysDeltaTolerance;
SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh;

View File

@ -93,8 +93,9 @@ public class G2_Identify : Shared.Models.Properties.IIdentify, IIdentify
string rootResultsDirectory = Path.GetDirectoryName(Path.GetDirectoryName(peopleRootDirectory));
if (rootResultsDirectory is null)
throw new Exception();
string[] verifyPersonKeyFormattedCollection = Array.Empty<string>();
Storage storage = new(rootDirectory, rootResultsDirectory, peopleRootDirectory);
PersonContainer[] personContainers = Shared.Models.Stateless.Methods.IPersonContainer.GetPersonContainers(storage, _Configuration.PersonBirthdayFormat, facesFileNameExtension);
PersonContainer[] personContainers = Shared.Models.Stateless.Methods.IPersonContainer.GetPersonContainers(storage, _Configuration.PersonBirthdayFormat, verifyPersonKeyFormattedCollection, facesFileNameExtension);
string[] peopleBirthDates = (from l in personContainers select Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, l.Person.Birthday)).ToArray();
Dictionary<string, string[]> sourceKeyValuePairs = JsonSerializer.Deserialize<Dictionary<string, string[]>>(json);
foreach (KeyValuePair<string, string[]> keyValuePair in sourceKeyValuePairs)

View File

@ -201,7 +201,7 @@
"176 x 176",
"256 x 256"
],
"SaveShortcutsForOutputResolutions": [
"SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [
],
"ValidImageFormatExtensions": [
".bmp",

View File

@ -136,7 +136,7 @@
"176 x 176",
"256 x 256"
],
"SaveShortcutsForOutputResolutions": [
"SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [
"1920 x 1080"
],
"ValidImageFormatExtensions": [

View File

@ -200,7 +200,7 @@
"176 x 176",
"256 x 256"
],
"SaveShortcutsForOutputResolutions": [
"SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [
"1920 x 1080"
],
"ValidImageFormatExtensions": [

View File

@ -167,9 +167,9 @@ public class MapLogic
using ProgressBar progressBar = new(saveContainers.Count, message, options);
foreach (SaveContainer saveContainer in saveContainers)
{
progressBar.Tick();
if (string.IsNullOrEmpty(saveContainer.Directory) || string.IsNullOrEmpty(saveContainer.CheckFile) || saveContainer.FaceFileHolder is null)
continue;
progressBar.Tick();
if (!saveContainer.FaceFileHolder.Exists && saveContainer.ResizedFileHolder is not null && saveContainer.ResizedFileHolder.Exists)
{
checkFile = saveContainer.CheckFile;
@ -200,6 +200,16 @@ public class MapLogic
File.Copy(sourceFile, checkFile);
}
foreach (SaveContainer saveContainer in saveContainers)
{
if (string.IsNullOrEmpty(saveContainer.Directory) || string.IsNullOrEmpty(saveContainer.CheckFile) || saveContainer.ResizedFileHolder is null || !saveContainer.ResizedFileHolder.Exists)
continue;
checkFile = saveContainer.CheckFile;
sourceFile = saveContainer.ResizedFileHolder.FullName;
if (File.Exists(checkFile))
continue;
File.Copy(sourceFile, checkFile);
}
foreach (SaveContainer saveContainer in saveContainers)
{
if (string.IsNullOrEmpty(saveContainer.ShortcutFile) || saveContainer.ResizedFileHolder is null || !saveContainer.ResizedFileHolder.Exists)
continue;
@ -598,8 +608,8 @@ public class MapLogic
int? normalizedPixelPercentage;
WindowsShortcut windowsShortcut;
string by = nameof(IMapLogic.ManualCopy);
Dictionary<int, PersonContainer[]>? keyValuePairs;
Dictionary<int, Mapping>? normalizedPixelPercentageToMapping;
Dictionary<int, PersonContainer[]>? normalizedPixelPercentageToPeronContainerCollection;
string successfull = $"_ {nameof(IMapLogic.ManualCopy).Humanize(LetterCasing.Title)} Successfull";
foreach (KeyValuePair<long, PersonContainer> keyValuePair in _PersonKeyToPersonContainer)
{
@ -613,11 +623,6 @@ public class MapLogic
(id, normalizedPixelPercentage, _) = IMapping.GetReversedDeterministicHashCodeKey(_Configuration.FacesFileNameExtension, personDisplayDirectoryAllFile);
if (id is null || normalizedPixelPercentage is null)
continue;
if (_IdThenNormalizedPixelPercentageToPersonContainers.TryGetValue(id.Value, out keyValuePairs))
{
if (keyValuePairs.ContainsKey(normalizedPixelPercentage.Value))
continue;
}
fileInfo = new(personDisplayDirectoryAllFile);
if (!fileInfo.Exists)
continue;
@ -641,17 +646,23 @@ public class MapLogic
facesDirectory = Path.Combine($"{dFacesContentDirectory}{directoryName}", mapping.MappingFromItem.ImageFileHolder.NameWithoutExtension);
faceFileName = $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}{_Configuration.FacesFileNameExtension}";
checkFile = Path.Combine(directory, fileInfo.Name);
if (!Directory.Exists(personDirectory))
_ = Directory.CreateDirectory(personDirectory);
if (!File.Exists(checkFile))
File.Copy(personDisplayDirectoryAllFile, checkFile);
if (!_IdThenNormalizedPixelPercentageToPersonContainers.TryGetValue(id.Value, out normalizedPixelPercentageToPeronContainerCollection) || !normalizedPixelPercentageToPeronContainerCollection.ContainsKey(normalizedPixelPercentage.Value))
{
if (!Directory.Exists(personDirectory))
_ = Directory.CreateDirectory(personDirectory);
if (!File.Exists(checkFile))
File.Copy(personDisplayDirectoryAllFile, checkFile);
}
if (personDisplayDirectoryAllFile.Contains(successfull))
continue;
directoryName = Path.Combine(personDisplayDirectory, successfull);
if (!Directory.Exists(directoryName))
_ = Directory.CreateDirectory(directoryName);
checkFile = Path.Combine(directoryName, personDisplayFileName);
File.Move(personDisplayDirectoryAllFile, checkFile);
if (File.Exists(checkFile))
File.Delete(personDisplayDirectoryAllFile);
else
File.Move(personDisplayDirectoryAllFile, checkFile);
faceFile = Path.Combine(facesDirectory, faceFileName);
if (!File.Exists(faceFile))
continue;
@ -693,113 +704,59 @@ public class MapLogic
SaveContainers(totalNotMapped, updated, saveContainers);
}
private List<(Mapping, List<(string?, string, string?, string?, string)>)> GetCollection(Mapping[] mappingCollection)
private (FileHolder, string, string, string, string)[] GetCollection(Mapping[] mappingCollection)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
List<(Mapping, List<(string?, string, string?, string?, string)>)> results = new();
int years;
(FileHolder, string, string, string, string)[] results;
string checkFile;
string directory;
TimeSpan? timeSpan;
string? copyFileName;
string? relativePath;
string? copyDirectory;
string isWrongYearFlag;
string shortcutFileName;
string subDirectoryName;
string? directoryName;
string personDirectory;
string personKeyFormatted;
DateTime dateTime = DateTime.Now;
PersonContainer[] personContainers;
Dictionary<int, PersonContainer[]>? idToPersonContainers;
List<(string?, string, string?, string?, string)> collection;
List<(FileHolder ResizedFileHolder, string PersonKeyFormatted, string CheckFile, string Directory, string PersonDirectory)> collection = new();
foreach (Mapping mapping in mappingCollection)
{
collection = new();
copyFileName = null;
copyDirectory = null;
relativePath = Path.GetDirectoryName($"C:{mapping.MappingFromItem.RelativePath}");
if (string.IsNullOrEmpty(relativePath) || relativePath.Length < 3)
directoryName = Path.GetDirectoryName(mapping.MappingFromItem.RelativePath);
if (directoryName is null)
throw new NotSupportedException();
if (mapping.By is null or IMapLogic.Sorting)
continue;
if (!_IdThenNormalizedPixelPercentageToPersonContainers.TryGetValue(mapping.MappingFromItem.Id, out idToPersonContainers))
{
directory = Path.Combine(_EDistanceContentTicksDirectory, $"Unnamed{relativePath[2..]}");
shortcutFileName = Path.Combine(directory, $"{mapping.MappingFromItem.Id}.lnk");
collection.Add(new(null, directory, copyDirectory, copyFileName, shortcutFileName));
}
else
{
if (!idToPersonContainers.ContainsKey(mapping.MappingFromLocation.NormalizedPixelPercentage))
continue;
isWrongYearFlag = IItem.GetWrongYearFlag(mapping.MappingFromItem.IsWrongYear);
subDirectoryName = $"{isWrongYearFlag}{mapping.MappingFromItem.MinimumDateTime:yyyy}";
personContainers = idToPersonContainers[mapping.MappingFromLocation.NormalizedPixelPercentage];
foreach (PersonContainer personContainer in personContainers)
{
if (personContainers.Length != 1)
break;
if (personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
continue;
foreach (PersonBirthday personBirthday in personContainer.Birthdays)
{
timeSpan = IPersonBirthday.GetTimeSpan(mapping.MappingFromItem.MinimumDateTime, mapping.MappingFromItem.IsWrongYear, personBirthday);
if (timeSpan.HasValue)
{
if (timeSpan.Value.Ticks < 0)
subDirectoryName = "!---";
else
{
(years, _) = IPersonBirthday.GetAge(dateTime, personBirthday);
subDirectoryName = $"^{years:000}";
}
}
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, personBirthday);
directory = Path.Combine(_EDistanceContentTicksDirectory, "Shortcuts", personKeyFormatted, subDirectoryName);
copyDirectory = Path.Combine(_EDistanceContentTicksDirectory, "Images", personKeyFormatted, subDirectoryName);
copyFileName = Path.Combine(copyDirectory, $"{mapping.MappingFromItem.Id}{mapping.MappingFromItem.ResizedFileHolder.ExtensionLowered}");
shortcutFileName = Path.Combine(directory, $"{mapping.MappingFromItem.Id}.lnk");
collection.Add(new(personKeyFormatted, directory, copyDirectory, copyFileName, shortcutFileName));
}
}
if (!collection.Any())
{
copyFileName = null;
copyDirectory = null;
directory = Path.Combine(_EDistanceContentTicksDirectory, $"Not Supported{relativePath[2..]}", subDirectoryName);
shortcutFileName = Path.Combine(directory, $"{mapping.MappingFromItem.Id}.lnk");
collection.Add(new(null, directory, copyDirectory, copyFileName, shortcutFileName));
}
}
results.Add(new(mapping, collection));
if (mapping.MappingFromPerson is null)
continue;
if (string.IsNullOrEmpty(mapping.MappingFromPerson.SegmentB))
throw new NotSupportedException();
if (string.IsNullOrEmpty(mapping.MappingFromPerson.DisplayDirectoryName))
throw new NotSupportedException();
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonBirthday);
directory = Path.Combine(_EDistanceContentTicksDirectory, "Images", personKeyFormatted);
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName);
checkFile = Path.Combine(directory, $"{mapping.MappingFromLocation.DeterministicHashCodeKey}{mapping.MappingFromItem.ImageFileHolder.ExtensionLowered}");
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder, personKeyFormatted, checkFile, directory, personDirectory));
}
results = (from l in collection orderby l.PersonKeyFormatted descending select l).ToArray();
return results;
}
public void SaveShortcuts(string[] juliePhares, Mapping[] mappingCollection)
public void SaveResizedImagesByPersonKeyFormatted(string[] juliePhares, Mapping[] mappingCollection, int totalNotMapped)
{
if (_Configuration is null)
throw new NullReferenceException(nameof(_Configuration));
List<(Mapping, List<(string?, string, string?, string?, string)>)> facesToCollection = GetCollection(mappingCollection);
foreach ((Mapping mapping, List<(string? PersonKeyFormatted, string, string?, string?, string)> collection) in facesToCollection)
List<SaveContainer> saveContainers = new();
SaveContainer? saveContainer;
(FileHolder, string, string, string, string)[] collection = GetCollection(mappingCollection);
foreach ((FileHolder resizedFileHolder, string personKeyFormatted, string checkFile, string directory, string personDirectory) in collection)
{
if (collection.Any(l => l.PersonKeyFormatted is not null and "1501-04-10_00"))
if (personKeyFormatted == "1501-04-10_00")
continue;
foreach ((string? personKeyFormatted, string directory, string? copyDirectory, string? copyFileName, string _) in collection)
{
if (personKeyFormatted is null)
continue;
if (!Directory.Exists(directory))
_ = Directory.CreateDirectory(directory);
if (string.IsNullOrEmpty(copyDirectory) || string.IsNullOrEmpty(copyFileName))
continue;
if (!juliePhares.Contains(personKeyFormatted))
continue;
if (!Directory.Exists(copyDirectory))
_ = Directory.CreateDirectory(copyDirectory);
if (!File.Exists(copyFileName))
File.Copy(mapping.MappingFromItem.ResizedFileHolder.FullName, copyFileName);
break;
}
if (!juliePhares.Contains(personKeyFormatted))
continue;
saveContainer = new(personDirectory);
saveContainers.Add(saveContainer);
saveContainer = new(resizedFileHolder, checkFile, directory);
saveContainers.Add(saveContainer);
}
SaveContainers(totalNotMapped, null, saveContainers);
}
}

View File

@ -30,10 +30,14 @@ public class SaveContainer
this(string.Empty, directory, null, null, null, null, string.Empty)
{ }
public SaveContainer(string checkFile, string directory, FileHolder? faceFileHolder) :
public SaveContainer(string checkFile, string directory, FileHolder faceFileHolder) :
this(checkFile, directory, faceFileHolder, null, null, null, string.Empty)
{ }
public SaveContainer(FileHolder resizedFileHolder, string checkFile, string directory) :
this(checkFile, directory, null, null, null, resizedFileHolder, string.Empty)
{ }
public override string ToString()
{
string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true });

View File

@ -5,10 +5,10 @@ public interface IPersonContainer
// ...
Models.PersonContainer[] TestStatic_GetPersonContainers(Properties.IStorage storage, string personBirthdayFormat, string facesFileNameExtension) =>
GetPersonContainers(storage, personBirthdayFormat, facesFileNameExtension);
static Models.PersonContainer[] GetPersonContainers(Properties.IStorage storage, string personBirthdayFormat, string facesFileNameExtension) =>
PersonContainer.GetPersonContainers(storage, personBirthdayFormat, facesFileNameExtension);
Models.PersonContainer[] TestStatic_GetPersonContainers(Properties.IStorage storage, string personBirthdayFormat, string[] verifyPersonKeyFormattedCollection, string facesFileNameExtension) =>
GetPersonContainers(storage, personBirthdayFormat, verifyPersonKeyFormattedCollection, facesFileNameExtension);
static Models.PersonContainer[] GetPersonContainers(Properties.IStorage storage, string personBirthdayFormat, string[] verifyPersonKeyFormattedCollection, string facesFileNameExtension) =>
PersonContainer.GetPersonContainers(storage, personBirthdayFormat, verifyPersonKeyFormattedCollection, facesFileNameExtension);
List<(long?, string)> TestStatic_GetDisplay(string personBirthdayFormat, Models.PersonContainer personContainer) =>
GetDisplay(personBirthdayFormat, personContainer);

View File

@ -155,7 +155,28 @@ internal abstract class PersonContainer
return results;
}
internal static Models.PersonContainer[] GetPersonContainers(Properties.IStorage storage, string personBirthdayFormat, string facesFileNameExtension)
private static void Verify(string personBirthdayFormat, string[] verifyPersonKeyFormattedCollection, Models.PersonContainer[] results)
{
const int zero = 0;
string personKeyFormatted;
List<string> collection = new();
Models.PersonBirthday personBirthday;
foreach (Models.PersonContainer personContainer in results)
{
if (personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
continue;
personBirthday = personContainer.Birthdays[zero];
personKeyFormatted = IPersonBirthday.GetFormatted(personBirthdayFormat, personBirthday);
if (!verifyPersonKeyFormattedCollection.Contains(personKeyFormatted))
continue;
if (personContainer.DisplayDirectoryAllFiles.Any(l => !l.Contains('^')))
collection.Add(personContainer.DisplayDirectoryName);
}
if (collection.Any())
throw new NotSupportedException($"A person in the verify collection has a approximate birthday!{Environment.NewLine}{string.Join(Environment.NewLine, collection.ToArray())}");
}
internal static Models.PersonContainer[] GetPersonContainers(Properties.IStorage storage, string personBirthdayFormat, string[] verifyPersonKeyFormattedCollection, string facesFileNameExtension)
{
Models.PersonContainer[] results;
char[] chars = IAge.GetChars();
@ -174,6 +195,7 @@ internal abstract class PersonContainer
results = Array.Empty<Models.PersonContainer>();
else
results = GetPersonContainersGroups(personBirthdayFormat, facesFileNameExtension, chars, groupDirectories);
Verify(personBirthdayFormat, verifyPersonKeyFormattedCollection, results);
return results;
}

View File

@ -48,8 +48,8 @@ public class Configuration
[Display(Name = "Reverse"), Required] public bool? Reverse { get; set; }
[Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; }
[Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { get; set; }
[Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; }
[Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; }
[Display(Name = "Test Distance Results"), Required] public bool? TestDistanceResults { get; set; }
[Display(Name = "Valid Resolutions"), Required] public string[] ValidResolutions { get; set; }
@ -137,8 +137,8 @@ public class Configuration
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>();
if (configuration.SaveFaceLandmarkForOutputResolutions is null)
configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>();
if (configuration.SaveShortcutsForOutputResolutions is null)
configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>();
if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null)
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>();
result = new(configuration.PropertyConfiguration,
configuration.CheckDFaceAndUpWriteDates.Value,
configuration.CheckJsonForDistanceResults.Value,
@ -177,8 +177,8 @@ public class Configuration
configuration.Reverse.Value,
configuration.SaveFaceLandmarkForOutputResolutions,
configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions,
configuration.SaveResizedSubfiles.Value,
configuration.SaveShortcutsForOutputResolutions,
configuration.SkipSearch.Value,
configuration.TestDistanceResults.Value,
configuration.ValidResolutions);

View File

@ -46,8 +46,8 @@ public class Configuration
public bool Reverse { init; get; }
public string[] SaveFaceLandmarkForOutputResolutions { init; get; }
public bool SaveFullYearOfRandomFiles { init; get; }
public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { init; get; }
public bool SaveResizedSubfiles { init; get; }
public string[] SaveShortcutsForOutputResolutions { init; get; }
public bool SkipSearch { init; get; }
public bool TestDistanceResults { init; get; }
public string[] ValidResolutions { init; get; }
@ -91,8 +91,8 @@ public class Configuration
bool reverse,
string[] saveFaceLandmarkForOutputResolutions,
bool saveFullYearOfRandomFiles,
string[] saveResizedImagesByPersonKeyFormattedForOutputResolutions,
bool saveResizedSubfiles,
string[] saveShortcutsForOutputResolutions,
bool skipSearch,
bool testDistanceResults,
string[] validResolutions)
@ -135,8 +135,8 @@ public class Configuration
Reverse = reverse;
SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions;
SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles;
SaveResizedImagesByPersonKeyFormattedForOutputResolutions = saveResizedImagesByPersonKeyFormattedForOutputResolutions;
SaveResizedSubfiles = saveResizedSubfiles;
SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions;
SkipSearch = skipSearch;
TestDistanceResults = testDistanceResults;
ValidResolutions = validResolutions;

View File

@ -67,8 +67,8 @@ public class Configuration
[Display(Name = "Reverse"), Required] public bool? Reverse { get; set; }
[Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; }
[Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { get; set; }
[Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; }
[Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; }
[Display(Name = "Sorting Days Delta Tolerance"), Required] public int? SortingDaysDeltaTolerance { get; set; }
[Display(Name = "SortingMaximumPerFaceShould be High"), Required] public int? SortingMaximumPerFaceShouldBeHigh { get; set; }
@ -190,10 +190,10 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.SaveFaceLandmarkForOutputResolutions));
if (configuration.SaveFullYearOfRandomFiles is null)
throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null)
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>();
if (configuration.SaveResizedSubfiles is null)
throw new NullReferenceException(nameof(configuration.SaveResizedSubfiles));
if (configuration.SaveShortcutsForOutputResolutions is null)
configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>();
if (configuration.SkipSearch is null)
throw new NullReferenceException(nameof(configuration.SkipSearch));
if (configuration.SortingDaysDeltaTolerance is null)
@ -214,8 +214,8 @@ public class Configuration
configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions = Array.Empty<string>();
if (configuration.SaveFaceLandmarkForOutputResolutions is null)
configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>();
if (configuration.SaveShortcutsForOutputResolutions is null)
configuration.SaveShortcutsForOutputResolutions = Array.Empty<string>();
if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null)
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions = Array.Empty<string>();
_ = DateTime.Now.AddDays(-configuration.SortingDaysDeltaTolerance.Value);
result = new(configuration.PropertyConfiguration,
configuration.CheckDFaceAndUpWriteDates.Value,
@ -274,8 +274,8 @@ public class Configuration
configuration.Reverse.Value,
configuration.SaveFaceLandmarkForOutputResolutions,
configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions,
configuration.SaveResizedSubfiles.Value,
configuration.SaveShortcutsForOutputResolutions,
configuration.SkipSearch.Value,
configuration.SortingDaysDeltaTolerance.Value,
configuration.SortingMaximumPerFaceShouldBeHigh.Value,

View File

@ -65,8 +65,8 @@ public class Configuration
public bool Reverse { init; get; }
public string[] SaveFaceLandmarkForOutputResolutions { init; get; }
public bool SaveFullYearOfRandomFiles { init; get; }
public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { init; get; }
public bool SaveResizedSubfiles { init; get; }
public string[] SaveShortcutsForOutputResolutions { init; get; }
public bool SkipSearch { init; get; }
public int SortingDaysDeltaTolerance { init; get; }
public int SortingMaximumPerFaceShouldBeHigh { init; get; }
@ -133,8 +133,8 @@ public class Configuration
bool reverse,
string[] saveFaceLandmarkForOutputResolutions,
bool saveFullYearOfRandomFiles,
string[] saveResizedImagesByPersonKeyFormattedForOutputResolutions,
bool saveResizedSubfiles,
string[] saveShortcutsForOutputResolutions,
bool skipSearch,
int sortingDaysDeltaTolerance,
int sortingMaximumPerFaceShouldBeHigh,
@ -200,8 +200,8 @@ public class Configuration
Reverse = reverse;
SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions;
SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles;
SaveResizedImagesByPersonKeyFormattedForOutputResolutions = saveResizedImagesByPersonKeyFormattedForOutputResolutions;
SaveResizedSubfiles = saveResizedSubfiles;
SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions;
SkipSearch = skipSearch;
SortingDaysDeltaTolerance = sortingDaysDeltaTolerance;
SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh;