After
(637967784888423594)-2,042.zip (637969699845057599)-548.zip
This commit is contained in:
@ -12,16 +12,12 @@ public class MapLogic
|
||||
protected readonly Dictionary<int, int[]> _IndicesFromNew;
|
||||
protected readonly string _DeterministicHashCodeRootDirectory;
|
||||
protected readonly Dictionary<int, string[]> _SixCharacterNamedFaceInfo;
|
||||
protected readonly Dictionary<int, string[]> _NamedFaceInfoDeterministicHashCodeKeyValuePairs;
|
||||
protected readonly Dictionary<double, string[]> _NamedDeterministicHashCodeKeyValuePairs;
|
||||
protected readonly Dictionary<int, string[]> _DeterministicHashCodeUnknownFaceKeyValuePairs;
|
||||
protected readonly Dictionary<double, string[]> _DeterministicHashCodeKeyValuePairs;
|
||||
protected readonly Dictionary<double, string[]> _IncorrectDeterministicHashCodeKeyValuePairs;
|
||||
|
||||
public Dictionary<int, int[]> KeyValuePairs => _KeyValuePairs;
|
||||
public Dictionary<int, int[]> IndicesFromNew => _IndicesFromNew;
|
||||
public string DeterministicHashCodeRootDirectory => _DeterministicHashCodeRootDirectory;
|
||||
public Dictionary<double, string[]> NamedDeterministicHashCodeKeyValuePairs => _NamedDeterministicHashCodeKeyValuePairs;
|
||||
public Dictionary<double, string[]> IncorrectDeterministicHashCodeKeyValuePairs => _IncorrectDeterministicHashCodeKeyValuePairs;
|
||||
public Dictionary<int, string[]> NamedFaceInfoDeterministicHashCodeKeyValuePairs => _NamedFaceInfoDeterministicHashCodeKeyValuePairs;
|
||||
|
||||
private readonly Serilog.ILogger? _Log;
|
||||
private readonly Configuration _Configuration;
|
||||
@ -31,7 +27,7 @@ public class MapLogic
|
||||
_AllCollection = new();
|
||||
_Configuration = configuration;
|
||||
_Log = Serilog.Log.ForContext<MapLogic>();
|
||||
Dictionary<int, string[]>? namedFaceInfoDeterministicHashCode;
|
||||
Dictionary<int, string[]>? deterministicHashCodeUnknownFaceKeyValuePairs;
|
||||
if (configuration.VerifyToSeason is null || !configuration.VerifyToSeason.Any())
|
||||
throw new Exception();
|
||||
string json;
|
||||
@ -42,20 +38,20 @@ public class MapLogic
|
||||
List<KeyValuePair<int, int[]>>? collection;
|
||||
Dictionary<int, int[]> indicesFromNew = new();
|
||||
Dictionary<int, string[]>? sixCharacterNamedFaceInfo;
|
||||
Dictionary<double, string[]> namedDeterministicHashCode = new();
|
||||
Dictionary<double, string[]> incorrectDeterministicHashCode = new();
|
||||
Dictionary<double, string[]> deterministicHashCodeKeyValuePairs = new();
|
||||
Dictionary<double, string[]> incorrectDeterministicHashCodeKeyValuePairs = new();
|
||||
string? rootDirectoryParent = Path.GetDirectoryName(configuration.RootDirectory);
|
||||
if (string.IsNullOrEmpty(rootDirectoryParent))
|
||||
throw new NullReferenceException(nameof(rootDirectoryParent));
|
||||
files = Directory.GetFiles(rootDirectoryParent, "*DeterministicHashCode*.json", SearchOption.TopDirectoryOnly);
|
||||
if (files.Length != 1)
|
||||
namedFaceInfoDeterministicHashCode = new();
|
||||
deterministicHashCodeUnknownFaceKeyValuePairs = new();
|
||||
else
|
||||
{
|
||||
json = File.ReadAllText(files[0]);
|
||||
namedFaceInfoDeterministicHashCode = JsonSerializer.Deserialize<Dictionary<int, string[]>>(json);
|
||||
if (namedFaceInfoDeterministicHashCode is null)
|
||||
throw new NullReferenceException(nameof(namedFaceInfoDeterministicHashCode));
|
||||
deterministicHashCodeUnknownFaceKeyValuePairs = JsonSerializer.Deserialize<Dictionary<int, string[]>>(json);
|
||||
if (deterministicHashCodeUnknownFaceKeyValuePairs is null)
|
||||
throw new NullReferenceException(nameof(deterministicHashCodeUnknownFaceKeyValuePairs));
|
||||
}
|
||||
string[] directories = Directory.GetDirectories(rootDirectoryParent, "*DeterministicHashCode*", SearchOption.TopDirectoryOnly);
|
||||
if (!directories.Any())
|
||||
@ -64,9 +60,9 @@ public class MapLogic
|
||||
{
|
||||
Dictionary<int, List<Shared.Models.Face>> faces = new();
|
||||
deterministicHashCodeRootDirectory = directories[0];
|
||||
SetKeyValuePairs(deterministicHashCodeRootDirectory, namedDeterministicHashCode, incorrectDeterministicHashCode, faces);
|
||||
SetKeyValuePairs(deterministicHashCodeRootDirectory, deterministicHashCodeKeyValuePairs, incorrectDeterministicHashCodeKeyValuePairs, faces);
|
||||
}
|
||||
if (!namedFaceInfoDeterministicHashCode.Any())
|
||||
if (!deterministicHashCodeUnknownFaceKeyValuePairs.Any())
|
||||
sixCharacterNamedFaceInfo = new();
|
||||
else
|
||||
{
|
||||
@ -112,78 +108,79 @@ public class MapLogic
|
||||
_KeyValuePairs = keyValuePairs;
|
||||
_IndicesFromNew = indicesFromNew;
|
||||
_SixCharacterNamedFaceInfo = sixCharacterNamedFaceInfo;
|
||||
_NamedDeterministicHashCodeKeyValuePairs = namedDeterministicHashCode;
|
||||
_DeterministicHashCodeRootDirectory = deterministicHashCodeRootDirectory;
|
||||
_IncorrectDeterministicHashCodeKeyValuePairs = incorrectDeterministicHashCode;
|
||||
_NamedFaceInfoDeterministicHashCodeKeyValuePairs = namedFaceInfoDeterministicHashCode;
|
||||
_DeterministicHashCodeKeyValuePairs = deterministicHashCodeKeyValuePairs;
|
||||
_IncorrectDeterministicHashCodeKeyValuePairs = incorrectDeterministicHashCodeKeyValuePairs;
|
||||
_DeterministicHashCodeUnknownFaceKeyValuePairs = deterministicHashCodeUnknownFaceKeyValuePairs;
|
||||
}
|
||||
|
||||
private static void SetKeyValuePairs(string deterministicHashCodeRootDirectory, List<(string, double)> named, List<(string, double)> incorrect, Dictionary<int, List<Shared.Models.Face>> keyValuePairs)
|
||||
public bool IsIncorrect(double deterministicHashCodeKey, string personKey) => _DeterministicHashCodeKeyValuePairs.ContainsKey(deterministicHashCodeKey) && _IncorrectDeterministicHashCodeKeyValuePairs[deterministicHashCodeKey].Contains(personKey);
|
||||
|
||||
private void SetKeyValuePairs(string deterministicHashCodeRootDirectory, List<(string, double)> named, List<(string, double)> incorrect, Dictionary<int, List<Shared.Models.Face>> keyValuePairs)
|
||||
{
|
||||
string[] files;
|
||||
string fileName;
|
||||
string personKey;
|
||||
string? checkFile;
|
||||
string[] yearDirectories;
|
||||
string ticksDirectoryName;
|
||||
string[] personKeyDirectories;
|
||||
string[] personNameDirectories;
|
||||
double? idAndNormalizedPixelPercentage;
|
||||
string[] personNameLinkDirectories;
|
||||
double? reversedDeterministicHashCodeKey;
|
||||
bool keyValuePairsAny = keyValuePairs.Any();
|
||||
string[] ticksDirectories = Directory.GetDirectories(deterministicHashCodeRootDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string ticksDirectory in ticksDirectories)
|
||||
{
|
||||
if (!ticksDirectory.EndsWith(')'))
|
||||
ticksDirectoryName = Path.GetFileName(ticksDirectory);
|
||||
if (ticksDirectoryName.Length < 3 || ticksDirectoryName[0] != '(' || ticksDirectoryName[^1] != ')')
|
||||
continue;
|
||||
personKeyDirectories = Directory.GetDirectories(ticksDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string personKeyDirectory in personKeyDirectories)
|
||||
{
|
||||
personKey = Path.GetFileName(personKeyDirectory);
|
||||
if (personKey == nameof(Shared.Models.Closest))
|
||||
throw new Exception($"Move personKey directories up one from {nameof(Shared.Models.Closest)} and delete {nameof(Shared.Models.Closest)} directory!");
|
||||
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string yearDirectory in yearDirectories)
|
||||
{
|
||||
files = Directory.GetFiles(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
personNameDirectories = Directory.GetDirectories(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string file in files)
|
||||
{
|
||||
if (file.EndsWith(".lnk"))
|
||||
continue;
|
||||
fileName = Path.GetFileName(file);
|
||||
idAndNormalizedPixelPercentage = Shared.Models.Stateless.Methods.INamed.GetReversedDeterministicHashCode(fileName);
|
||||
if (idAndNormalizedPixelPercentage is null)
|
||||
{
|
||||
(checkFile, idAndNormalizedPixelPercentage) = Shared.Models.Stateless.Methods.INamed.GetReversedDeterministicHashCode(keyValuePairs, file);
|
||||
if (idAndNormalizedPixelPercentage is null)
|
||||
break;
|
||||
if (!string.IsNullOrEmpty(checkFile))
|
||||
File.Move(file, checkFile);
|
||||
}
|
||||
incorrect.Add(new(personKey, idAndNormalizedPixelPercentage.Value));
|
||||
}
|
||||
File.Delete(file);
|
||||
foreach (string personNameDirectory in personNameDirectories)
|
||||
{
|
||||
files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
personNameLinkDirectories = Directory.GetDirectories(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string file in files)
|
||||
{
|
||||
if (file.EndsWith(".lnk"))
|
||||
if (file.EndsWith(".lnk") || file.EndsWith(".json"))
|
||||
continue;
|
||||
fileName = Path.GetFileName(file);
|
||||
idAndNormalizedPixelPercentage = Shared.Models.Stateless.Methods.INamed.GetReversedDeterministicHashCode(fileName);
|
||||
if (idAndNormalizedPixelPercentage is null)
|
||||
{
|
||||
(checkFile, idAndNormalizedPixelPercentage) = Shared.Models.Stateless.Methods.INamed.GetReversedDeterministicHashCode(keyValuePairs, file);
|
||||
if (idAndNormalizedPixelPercentage is null)
|
||||
break;
|
||||
if (!string.IsNullOrEmpty(checkFile))
|
||||
File.Move(file, checkFile);
|
||||
}
|
||||
named.Add(new(personKey, idAndNormalizedPixelPercentage.Value));
|
||||
reversedDeterministicHashCodeKey = Shared.Models.Stateless.Methods.INamed.GetReversedDeterministicHashCodeKey(keyValuePairsAny, keyValuePairs, file);
|
||||
if (reversedDeterministicHashCodeKey is null)
|
||||
continue;
|
||||
named.Add(new(personKey, reversedDeterministicHashCodeKey.Value));
|
||||
}
|
||||
foreach (string personNameLinkDirectory in personNameLinkDirectories)
|
||||
{
|
||||
files = Directory.GetFiles(personNameLinkDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string file in files)
|
||||
{
|
||||
if (!file.EndsWith(".lnk"))
|
||||
continue;
|
||||
File.Delete(file);
|
||||
}
|
||||
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(personNameLinkDirectory);
|
||||
}
|
||||
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(personNameDirectory);
|
||||
}
|
||||
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(yearDirectory);
|
||||
}
|
||||
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(personKeyDirectory);
|
||||
}
|
||||
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(ticksDirectory);
|
||||
}
|
||||
}
|
||||
|
||||
private static void SetKeyValuePairs(string deterministicHashCodeRootDirectory, Dictionary<double, string[]> namedDeterministicHashCode, Dictionary<double, string[]> incorrectDeterministicHashCode, Dictionary<int, List<Shared.Models.Face>> keyValuePairs)
|
||||
private void SetKeyValuePairs(string deterministicHashCodeRootDirectory, Dictionary<double, string[]> deterministicHashCodeKeyValuePairs, Dictionary<double, string[]> incorrectDeterministicHashCodeKeyValuePairs, Dictionary<int, List<Shared.Models.Face>> keyValuePairs)
|
||||
{
|
||||
Dictionary<double, List<string>> namedKeyValuePairs = new();
|
||||
Dictionary<double, List<string>> incorrectKeyValuePairs = new();
|
||||
@ -205,36 +202,35 @@ public class MapLogic
|
||||
incorrectKeyValuePairs[idAndNormalizedPixelPercentage].Add(personKey);
|
||||
}
|
||||
foreach (KeyValuePair<double, List<string>> keyValuePair in namedKeyValuePairs)
|
||||
namedDeterministicHashCode.Add(keyValuePair.Key, keyValuePair.Value.Distinct().ToArray());
|
||||
deterministicHashCodeKeyValuePairs.Add(keyValuePair.Key, keyValuePair.Value.Distinct().ToArray());
|
||||
foreach (KeyValuePair<double, List<string>> keyValuePair in incorrectKeyValuePairs)
|
||||
incorrectDeterministicHashCode.Add(keyValuePair.Key, keyValuePair.Value.Distinct().ToArray());
|
||||
incorrectDeterministicHashCodeKeyValuePairs.Add(keyValuePair.Key, keyValuePair.Value.Distinct().ToArray());
|
||||
}
|
||||
|
||||
public void UpdateKeyValuePairs(List<Shared.Models.Container> containers)
|
||||
public void UseKeyValuePairsSaveFaceEncoding(List<Shared.Models.Container> containers)
|
||||
{
|
||||
Dictionary<int, List<Shared.Models.Face>> keyValuePairs = new();
|
||||
Dictionary<double, string[]> namedDeterministicHashCode = new();
|
||||
Dictionary<double, string[]> incorrectDeterministicHashCode = new();
|
||||
foreach (Shared.Models.Container container in containers)
|
||||
if (!string.IsNullOrEmpty(_DeterministicHashCodeRootDirectory))
|
||||
{
|
||||
foreach (Shared.Models.Item item in container.Items)
|
||||
Dictionary<int, List<Shared.Models.Face>> keyValuePairs = new();
|
||||
List<(string PersonKey, double IdAndNormalizedPixelPercentage)> named = new();
|
||||
List<(string PersonKey, double IdAndNormalizedPixelPercentage)> incorrect = new();
|
||||
foreach (Shared.Models.Container container in containers)
|
||||
{
|
||||
if (item.ImageFileHolder is null || item.Property?.Id is null || !item.Faces.Any())
|
||||
continue;
|
||||
if (keyValuePairs.ContainsKey(item.Property.Id.Value))
|
||||
foreach (Shared.Models.Item item in container.Items)
|
||||
{
|
||||
if (keyValuePairs[item.Property.Id.Value].Count != item.Faces.Count)
|
||||
throw new Exception();
|
||||
continue;
|
||||
if (item.ImageFileHolder is null || item.Property?.Id is null || !item.Faces.Any())
|
||||
continue;
|
||||
if (keyValuePairs.ContainsKey(item.Property.Id.Value))
|
||||
{
|
||||
if (keyValuePairs[item.Property.Id.Value].Count != item.Faces.Count)
|
||||
throw new Exception();
|
||||
continue;
|
||||
}
|
||||
keyValuePairs.Add(item.Property.Id.Value, item.Faces);
|
||||
}
|
||||
keyValuePairs.Add(item.Property.Id.Value, item.Faces);
|
||||
}
|
||||
SetKeyValuePairs(_DeterministicHashCodeRootDirectory, named, incorrect, keyValuePairs);
|
||||
}
|
||||
SetKeyValuePairs(_DeterministicHashCodeRootDirectory, namedDeterministicHashCode, incorrectDeterministicHashCode, keyValuePairs);
|
||||
foreach (KeyValuePair<double, string[]> keyValuePair in namedDeterministicHashCode)
|
||||
_NamedDeterministicHashCodeKeyValuePairs.Add(keyValuePair.Key, keyValuePair.Value);
|
||||
foreach (KeyValuePair<double, string[]> keyValuePair in incorrectDeterministicHashCode)
|
||||
_IncorrectDeterministicHashCodeKeyValuePairs.Add(keyValuePair.Key, keyValuePair.Value);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
@ -305,7 +301,7 @@ public class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
public static void AddToNamed(MapLogic mapLogic, List<Shared.Models.Item> items)
|
||||
public void AddToNamed(List<Shared.Models.Item> items)
|
||||
{
|
||||
bool? isWrongYear;
|
||||
DateTime minimumDateTime;
|
||||
@ -324,10 +320,10 @@ public class MapLogic
|
||||
if (face.LocationIndex is null)
|
||||
continue;
|
||||
deterministicHashCodeKey = Shared.Models.Stateless.Methods.INamed.GetDeterministicHashCodeKey(item, face);
|
||||
if (!mapLogic.NamedDeterministicHashCodeKeyValuePairs.ContainsKey(deterministicHashCodeKey))
|
||||
if (!_DeterministicHashCodeKeyValuePairs.ContainsKey(deterministicHashCodeKey))
|
||||
continue;
|
||||
minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property);
|
||||
personKeys.AddRange(mapLogic.NamedDeterministicHashCodeKeyValuePairs[deterministicHashCodeKey]);
|
||||
personKeys.AddRange(_DeterministicHashCodeKeyValuePairs[deterministicHashCodeKey]);
|
||||
(isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime);
|
||||
for (int i = 0; i < personKeys.Count; i++)
|
||||
{
|
||||
@ -341,10 +337,10 @@ public class MapLogic
|
||||
}
|
||||
if (!personKeys.Any())
|
||||
{
|
||||
if (!mapLogic.NamedFaceInfoDeterministicHashCodeKeyValuePairs.ContainsKey(item.Property.Id.Value))
|
||||
if (!_DeterministicHashCodeUnknownFaceKeyValuePairs.ContainsKey(item.Property.Id.Value))
|
||||
continue;
|
||||
minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property);
|
||||
personKeys.AddRange(mapLogic.NamedFaceInfoDeterministicHashCodeKeyValuePairs[item.Property.Id.Value]);
|
||||
personKeys.AddRange(_DeterministicHashCodeUnknownFaceKeyValuePairs[item.Property.Id.Value]);
|
||||
(isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime);
|
||||
for (int i = 0; i < personKeys.Count; i++)
|
||||
{
|
||||
@ -357,7 +353,7 @@ public class MapLogic
|
||||
}
|
||||
}
|
||||
|
||||
public static List<(Shared.Models.Item, (string, Shared.Models.Face?, (string, string, string, string))[])> GetCollection(MapLogic mapLogic, List<Shared.Models.Item> items, string dFacesContentDirectory)
|
||||
public List<(Shared.Models.Item, (string, Shared.Models.Face?, (string, string, string, string))[])> GetCollection(List<Shared.Models.Item> items, string dFacesContentDirectory)
|
||||
{
|
||||
List<(Shared.Models.Item, (string, Shared.Models.Face?, (string, string, string, string))[])> results = new();
|
||||
string[] keys;
|
||||
@ -393,7 +389,7 @@ public class MapLogic
|
||||
if (item.Property?.Id is null || item.ResizedFileHolder is null)
|
||||
continue;
|
||||
collection = new();
|
||||
if (!mapLogic.NamedFaceInfoDeterministicHashCodeKeyValuePairs.ContainsKey(item.Property.Id.Value))
|
||||
if (!_DeterministicHashCodeUnknownFaceKeyValuePairs.ContainsKey(item.Property.Id.Value))
|
||||
{
|
||||
faceCollection = new();
|
||||
personKey = string.Empty;
|
||||
@ -402,7 +398,7 @@ public class MapLogic
|
||||
else
|
||||
{
|
||||
faceCollection = item.Faces;
|
||||
keys = mapLogic.NamedFaceInfoDeterministicHashCodeKeyValuePairs[item.Property.Id.Value];
|
||||
keys = _DeterministicHashCodeUnknownFaceKeyValuePairs[item.Property.Id.Value];
|
||||
minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property);
|
||||
if (minimumDateTime is null)
|
||||
continue;
|
||||
|
Reference in New Issue
Block a user