Save Possibly New Person Containers

This commit is contained in:
2022-09-19 13:52:01 -07:00
parent 8b2cbf7e16
commit 5fb99aac45
27 changed files with 423 additions and 218 deletions

View File

@ -271,6 +271,7 @@ public partial class DlibDotNet
configuration.LocationDigits,
configuration.LocationFactor,
configuration.MapLogicSigma,
configuration.MappingDefaultName,
configuration.MappingMoveUnableToMatch,
configuration.MappingSaveFaceEncoding,
configuration.MappingSaveNotMapped,
@ -750,9 +751,9 @@ public partial class DlibDotNet
E_Distance.SaveFaceDistances(_Configuration.PropertyConfiguration, eResultsFullGroupDirectory, sortingContainers);
int totalNotMapped = mapLogic.AddToMapping(distinctFilteredFaces);
if (totalNotMapped > 0)
mapLogic.ForceSingleImageThenSaveMapping(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, distinctFilteredFaces, sortingContainers, totalNotMapped);
mapLogic.ForceSingleImageThenSaveMapping(_MapConfiguration, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory, distinctFilteredFaces, sortingContainers, totalNotMapped);
if (_MapConfiguration.MappingSaveNotMapped)
mapLogic.SaveNotMappedTicks(_Configuration.PropertyConfiguration);
mapLogic.SaveNotMappedTicks(_MapConfiguration);
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
mapLogic.SaveShortcuts(_Configuration.JuliePhares, distinctFilteredFaces);
}

View File

@ -32,6 +32,7 @@ public class Configuration
[Display(Name = "Location Factor"), Required] public int? LocationFactor { get; set; }
[Display(Name = "Map Logic Sigma"), Required] public int? MapLogicSigma { get; set; }
[Display(Name = "Mapped Max Index"), Required] public int? MappedMaxIndex { get; set; }
[Display(Name = "Mapping Default Name"), Required] public string MappingDefaultName { get; set; }
[Display(Name = "Mapping Move Unable to Match by 1 Tick"), Required] public bool? MappingMoveUnableToMatch { get; set; }
[Display(Name = "Mapping Save Face Encoding"), Required] public bool? MappingSaveFaceEncoding { get; set; }
[Display(Name = "Mapping Save Mapped"), Required] public bool? MappingSaveMapped { get; set; }
@ -127,6 +128,8 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.LocationFactor));
if (configuration.MapLogicSigma is null)
throw new NullReferenceException(nameof(configuration.MapLogicSigma));
if (configuration.MappingDefaultName is null)
throw new NullReferenceException(nameof(configuration.MappingDefaultName));
if (configuration.MappingMoveUnableToMatch is null)
throw new NullReferenceException(nameof(configuration.MappingMoveUnableToMatch));
if (configuration.MappingSaveFaceEncoding is null)
@ -236,6 +239,7 @@ public class Configuration
configuration.LocationFactor.Value,
configuration.MapLogicSigma.Value,
configuration.MappedMaxIndex,
configuration.MappingDefaultName,
configuration.MappingMoveUnableToMatch.Value,
configuration.MappingSaveFaceEncoding.Value,
configuration.MappingSaveNotMapped.Value,

View File

@ -31,6 +31,7 @@ public class Configuration
public int LocationFactor { init; get; }
public int MapLogicSigma { init; get; }
public int? MappedMaxIndex { init; get; }
public string MappingDefaultName { init; get; }
public bool MappingMoveUnableToMatch { init; get; }
public bool MappingSaveFaceEncoding { init; get; }
public bool MappingSaveNotMapped { init; get; }
@ -98,6 +99,7 @@ public class Configuration
int locationFactor,
int mapLogicSigma,
int? mappedMaxIndex,
string mappingDefaultName,
bool mappingMoveUnableToMatch,
bool mappingSaveFaceEncoding,
bool mappingSaveNotMapped,
@ -164,6 +166,7 @@ public class Configuration
LocationFactor = locationFactor;
MapLogicSigma = mapLogicSigma;
MappedMaxIndex = mappedMaxIndex;
MappingDefaultName = mappingDefaultName;
MappingMoveUnableToMatch = mappingMoveUnableToMatch;
MappingSaveFaceEncoding = mappingSaveFaceEncoding;
MappingSaveNotMapped = mappingSaveNotMapped;

View File

@ -19,7 +19,7 @@ internal class A2_People
string directoryFullName;
Dictionary<string, List<G2_Identify>> keyValuePairs = new();
JsonSerializerOptions writeIndentedJsonSerializerOptions = new() { WriteIndented = true };
string hPeopleCollectionDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(configuration, nameof(A2_People), "[]");
string a2PeopleCollectionDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(configuration, nameof(A2_People), "[]");
string aPropertySingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(configuration, nameof(Property.Models.A_Property), "{}");
foreach (G2_Identify identified in identifiedCollection)
{
@ -34,7 +34,7 @@ internal class A2_People
foreach (KeyValuePair<string, List<G2_Identify>> keyValuePair in keyValuePairs)
{
segments = keyValuePair.Key.Split('|');
directoryFullName = Path.Combine(hPeopleCollectionDirectory, segments[0]);
directoryFullName = Path.Combine(a2PeopleCollectionDirectory, segments[0]);
if (!Directory.Exists(directoryFullName))
_ = Directory.CreateDirectory(directoryFullName);
jsonFile = Path.Combine(directoryFullName, $"{segments[1]}.json");

View File

@ -1,7 +1,9 @@
using ShellProgressBar;
using System.Text.Json;
using View_by_Distance.FaceRecognitionDotNet;
using View_by_Distance.Map.Models;
using View_by_Distance.Shared.Models;
using View_by_Distance.Shared.Models.Properties;
namespace View_by_Distance.Instance.Models;
@ -151,7 +153,7 @@ internal class E_Distance : Shared.Models.Methods.IFaceDistance
FaceDistance faceDistanceLength;
string json = File.ReadAllText(checkFile);
List<(Face Face, double Length)> collection = new();
Shared.Models.FaceEncoding? modelsFaceEncoding = System.Text.Json.JsonSerializer.Deserialize<Shared.Models.FaceEncoding>(json);
Shared.Models.FaceEncoding? modelsFaceEncoding = JsonSerializer.Deserialize<Shared.Models.FaceEncoding>(json);
if (modelsFaceEncoding is null)
throw new NotSupportedException();
FaceRecognitionDotNet.FaceEncoding faceRecognitionDotNetFaceEncoding = FaceRecognition.LoadFaceEncoding(modelsFaceEncoding.RawEncoding);
@ -184,4 +186,56 @@ internal class E_Distance : Shared.Models.Methods.IFaceDistance
return results;
}
void Shared.Models.Methods.IFaceDistance.SavePossiblyNewPersonContainers(IPropertyConfiguration propertyConfiguration, string personBirthdayFormat, string resizeFilenameExtension, Dictionary<long, PersonContainer> personKeyToPersonContainer, List<(string[], PersonContainer)> possiblyNewPersonDisplayDirectoryNamesAndPersonContainer)
{
char @char;
string json;
string[] files;
string checkFile;
string[] segments;
const int zero = 0;
string checkPersonKeyFormattedDirectory;
string personKeyFormatted;
string personDisplayDirectory;
PersonBirthday personBirthday;
string personDisplayDirectoryName;
string checkPersonDisplayDirectory;
char[] chars = Shared.Models.Stateless.Methods.IAge.GetChars();
JsonSerializerOptions jsonSerializerOptions = new() { WriteIndented = true };
string a2PeopleSingletonDirectory = Property.Models.Stateless.IResult.GetResultsDateGroupDirectory(propertyConfiguration, nameof(A2_People), "{}");
foreach ((string[] personDisplayDirectoryNames, PersonContainer personContainer) in possiblyNewPersonDisplayDirectoryNamesAndPersonContainer)
{
if (personContainer.PersonKey is null || personContainer.PersonBirthdays is null || !personContainer.PersonBirthdays.Any())
continue;
personBirthday = personContainer.PersonBirthdays[zero];
personDisplayDirectoryName = personDisplayDirectoryNames[^1];
personDisplayDirectory = Path.Combine(personDisplayDirectoryNames);
personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(personBirthdayFormat, personBirthday);
segments = personDisplayDirectoryName.Split(chars);
if (segments.Length != 2)
@char = '_';
else
@char = personDisplayDirectoryName[segments[zero].Length];
checkPersonDisplayDirectory = Path.Combine(a2PeopleSingletonDirectory, @char.ToString(), personDisplayDirectoryName);
checkPersonKeyFormattedDirectory = Path.Combine(checkPersonDisplayDirectory, personKeyFormatted);
if (Directory.Exists(checkPersonKeyFormattedDirectory))
continue;
_ = Directory.CreateDirectory(checkPersonKeyFormattedDirectory);
checkFile = Path.Combine(checkPersonKeyFormattedDirectory, $"{personKeyFormatted}.json");
json = JsonSerializer.Serialize(personContainer.Person, jsonSerializerOptions);
_ = Shared.Models.Stateless.Methods.IPath.WriteAllText(checkFile, json, updateDateWhenMatches: false, compareBeforeWrite: true);
if (!Directory.Exists(personDisplayDirectory))
continue;
files = Directory.GetFiles(personDisplayDirectory, $"*{resizeFilenameExtension}", SearchOption.TopDirectoryOnly);
foreach (string file in files)
{
checkFile = Path.Combine(checkPersonDisplayDirectory, Path.GetFileName(file));
if (File.Exists(checkFile))
continue;
File.Copy(files[0], checkFile);
break;
}
}
}
}

View File

@ -70,6 +70,7 @@
"LocationFactor": 1000000,
"MapLogicSigma": 3,
"MappedMaxIndex": 1034720,
"MappingDefaultName": "John Doe~25",
"MappingMoveUnableToMatch": false,
"MappingSaveFaceEncoding": false,
"MappingSaveMapped": false,

View File

@ -70,6 +70,7 @@
"LocationFactor": 1000000,
"MapLogicSigma": 3,
"MappedMaxIndex": 1034720,
"MappingDefaultName": "John Doe~25",
"MappingMoveUnableToMatch": false,
"MappingSaveFaceEncoding": false,
"MappingSaveMapped": false,

View File

@ -70,6 +70,7 @@
"LocationFactor": 1000000,
"MapLogicSigma": 3,
"MappedMaxIndex": 1034720,
"MappingDefaultName": "John Doe~25",
"MappingMoveUnableToMatch": false,
"MappingSaveFaceEncoding": false,
"MappingSaveMapped": false,