After
(637967784888423594)-2,042.zip (637969699845057599)-548.zip
This commit is contained in:
11
Shared/Models/Stateless/IClosest.cs
Normal file
11
Shared/Models/Stateless/IClosest.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace View_by_Distance.Shared.Models.Stateless;
|
||||
|
||||
public interface IClosest
|
||||
{
|
||||
|
||||
const int MaximumPer = 50;
|
||||
const float MaximumMinimum = 0.50f;
|
||||
const bool SkipIsWrongYear = true;
|
||||
const float MinimumMinimum = 0.05f;
|
||||
|
||||
}
|
9
Shared/Models/Stateless/ILocation.cs
Normal file
9
Shared/Models/Stateless/ILocation.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace View_by_Distance.Shared.Models.Stateless;
|
||||
|
||||
public interface ILocation
|
||||
{
|
||||
|
||||
const int Decimals = 6;
|
||||
const int Factor = 1000000;
|
||||
|
||||
}
|
7
Shared/Models/Stateless/IPerson.cs
Normal file
7
Shared/Models/Stateless/IPerson.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace View_by_Distance.Shared.Models.Stateless;
|
||||
|
||||
public interface IPerson
|
||||
{
|
||||
const string KeyFormat = "yyyy-MM-dd_HH";
|
||||
|
||||
}
|
@ -3,6 +3,6 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
internal abstract class Closest
|
||||
{
|
||||
|
||||
internal static Models.Closest[] Get(List<Models.Closest> collection) => (from l in collection orderby l.Minimum < IClosest.MinimumMinimum, l.Average select l).ToArray();
|
||||
internal static Models.Closest[] Get(List<Models.Closest> collection) => (from l in collection orderby l.Minimum < Stateless.IClosest.MinimumMinimum, l.Average select l).ToArray();
|
||||
|
||||
}
|
@ -3,11 +3,6 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
public interface IClosest
|
||||
{ // ...
|
||||
|
||||
const int MaximumPer = 50;
|
||||
const float MaximumMinimum = 0.50f;
|
||||
const bool SkipIsWrongYear = true;
|
||||
const float MinimumMinimum = 0.05f;
|
||||
|
||||
Models.Closest[] TestStatic_Get(List<Models.Closest> collection);
|
||||
|
||||
static Models.Closest[] Get(List<Models.Closest> collection) => Closest.Get(collection);
|
||||
|
@ -3,9 +3,9 @@ namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
public interface INamed
|
||||
{ // ...
|
||||
|
||||
double? TestStatic_GetReversedDeterministicHashCode(string fileName);
|
||||
static double? GetReversedDeterministicHashCode(string fileName) =>
|
||||
Named.GetReversedDeterministicHashCode(fileName);
|
||||
double? TestStatic_GetReversedDeterministicHashCodeKey(string file);
|
||||
static double? GetReversedDeterministicHashCodeKey(bool keyValuePairsAny, Dictionary<int, List<Models.Face>> keyValuePairs, string file) =>
|
||||
Named.GetReversedDeterministicHashCodeKey(keyValuePairsAny, keyValuePairs, file);
|
||||
|
||||
double TestStatic_GetDeterministicHashCodeKey(Models.Item item, Models.Face face);
|
||||
static double GetDeterministicHashCodeKey(Models.Item item, Models.Face face) =>
|
||||
@ -15,8 +15,4 @@ public interface INamed
|
||||
static double GetDeterministicHashCodeKey(Models.Item item, Models.Closest closest) =>
|
||||
Named.GetDeterministicHashCodeKey(item, closest);
|
||||
|
||||
(string?, double?) TestStatic_GetReversedDeterministicHashCode(Dictionary<int, List<Models.Face>> keyValuePairs, string file);
|
||||
static (string?, double?) GetReversedDeterministicHashCode(Dictionary<int, List<Models.Face>> keyValuePairs, string file) =>
|
||||
Named.GetReversedDeterministicHashCode(keyValuePairs, file);
|
||||
|
||||
}
|
@ -1,17 +1,19 @@
|
||||
using System.Text.Json;
|
||||
|
||||
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
||||
|
||||
internal abstract class Named
|
||||
{
|
||||
|
||||
private static double GetDeterministicHashCodeFileName(int id, int normalizedPixelPercentage)
|
||||
=> double.Parse($"{id}.{normalizedPixelPercentage}");
|
||||
private static double GetDeterministicHashCodeKey(int id, int normalizedPixelPercentage)
|
||||
=> Math.Round(double.Parse($"{id}.{normalizedPixelPercentage}"), Stateless.ILocation.Decimals);
|
||||
|
||||
internal static double GetDeterministicHashCodeKey(Models.Item item, Models.Closest closest)
|
||||
{
|
||||
double result;
|
||||
if (item.Property?.Id is null || item.ImageFileHolder is null || closest.NormalizedPixelPercentage is null)
|
||||
throw new NullReferenceException();
|
||||
result = GetDeterministicHashCodeFileName(item.Property.Id.Value, closest.NormalizedPixelPercentage.Value);
|
||||
result = GetDeterministicHashCodeKey(item.Property.Id.Value, closest.NormalizedPixelPercentage.Value);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -20,127 +22,70 @@ internal abstract class Named
|
||||
double result;
|
||||
if (item.Property?.Id is null || item.ImageFileHolder is null || face.Location?.NormalizedPixelPercentage is null)
|
||||
throw new NullReferenceException();
|
||||
result = GetDeterministicHashCodeFileName(item.Property.Id.Value, face.Location.NormalizedPixelPercentage.Value);
|
||||
result = GetDeterministicHashCodeKey(item.Property.Id.Value, face.Location.NormalizedPixelPercentage.Value);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static double? GetReversedDeterministicHashCodeB(string fileName)
|
||||
private static void UseKeyValuePairsSaveFaceEncoding(Dictionary<int, List<Models.Face>> keyValuePairs, string file, int id, int normalizedPixelPercentageValue, double deterministicHashCodeKey, string extensionLowered)
|
||||
{
|
||||
string json;
|
||||
string checkFile;
|
||||
string? directoryName;
|
||||
List<Models.Face> collection = new();
|
||||
List<Models.Face> faces = keyValuePairs[id];
|
||||
foreach (Models.Face face in faces)
|
||||
{
|
||||
if (face.FaceEncoding is null || face.Location?.NormalizedPixelPercentage is null)
|
||||
continue;
|
||||
if (normalizedPixelPercentageValue != face.Location.NormalizedPixelPercentage.Value && deterministicHashCodeKey != GetDeterministicHashCodeKey(id, face.Location.NormalizedPixelPercentage.Value))
|
||||
continue;
|
||||
collection.Add(face);
|
||||
}
|
||||
if (collection.Count != 1)
|
||||
throw new Exception();
|
||||
foreach (Models.Face face in collection)
|
||||
{
|
||||
directoryName = Path.GetDirectoryName(file);
|
||||
if (string.IsNullOrEmpty(directoryName))
|
||||
continue;
|
||||
checkFile = Path.Combine(directoryName, $"{deterministicHashCodeKey}{extensionLowered}.json");
|
||||
if (File.Exists(checkFile))
|
||||
continue;
|
||||
json = JsonSerializer.Serialize(face.FaceEncoding);
|
||||
_ = IPath.WriteAllText(checkFile, json, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null);
|
||||
}
|
||||
}
|
||||
|
||||
private static double? GetReversedDeterministicHashCodeFromSegments(bool keyValuePairsAny, Dictionary<int, List<Models.Face>> keyValuePairs, string file, string[] segments)
|
||||
{
|
||||
double? result;
|
||||
string[] segments = fileName.Split('.');
|
||||
if (segments.Length < 2)
|
||||
if (segments.Length != 3)
|
||||
throw new Exception();
|
||||
string id = segments[0];
|
||||
string normalizedPixelPercentage = segments[1];
|
||||
if (!double.TryParse(string.Concat(id, '.', normalizedPixelPercentage), out double resultValue))
|
||||
if (!int.TryParse(id, out int idValue) || !int.TryParse(normalizedPixelPercentage, out int normalizedPixelPercentageValue))
|
||||
result = null;
|
||||
else
|
||||
result = resultValue;
|
||||
{
|
||||
result = GetDeterministicHashCodeKey(idValue, normalizedPixelPercentageValue);
|
||||
if (keyValuePairsAny && keyValuePairs.ContainsKey(idValue))
|
||||
UseKeyValuePairsSaveFaceEncoding(keyValuePairs, file, idValue, normalizedPixelPercentageValue, result.Value, $".{segments[2]}");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static double? GetReversedDeterministicHashCode(string fileName)
|
||||
internal static double? GetReversedDeterministicHashCodeKey(bool keyValuePairsAny, Dictionary<int, List<Models.Face>> keyValuePairs, string file)
|
||||
{
|
||||
double? result;
|
||||
string fileName = Path.GetFileName(file);
|
||||
if (fileName.Length < 2 || fileName[1..].Contains('-'))
|
||||
result = null;
|
||||
else
|
||||
result = GetReversedDeterministicHashCodeB(fileName);
|
||||
{
|
||||
string[] segments = fileName.Split('.');
|
||||
result = GetReversedDeterministicHashCodeFromSegments(keyValuePairsAny, keyValuePairs, file, segments);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static (string? check, int? normalizedPixelPercentage) GetReversedDeterministicHashCodeFromFace(string file, int idValue, int locationIndexValue, List<Models.Face> faces)
|
||||
{
|
||||
string? check;
|
||||
int? normalizedPixelPercentage;
|
||||
Models.Face face = faces[locationIndexValue];
|
||||
if (face.Location?.NormalizedPixelPercentage is null)
|
||||
{
|
||||
check = null;
|
||||
normalizedPixelPercentage = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
string extensionLowered = Path.GetExtension(file).ToLower();
|
||||
normalizedPixelPercentage = face.Location.NormalizedPixelPercentage.Value;
|
||||
double deterministicHashCodeKey = GetDeterministicHashCodeFileName(idValue, normalizedPixelPercentage.Value);
|
||||
check = Path.Combine(string.Concat(Path.GetDirectoryName(file)), $"{deterministicHashCodeKey}{extensionLowered}");
|
||||
}
|
||||
return (check, normalizedPixelPercentage);
|
||||
}
|
||||
|
||||
private static (string? check, int? normalizedPixelPercentage) GetReversedDeterministicHashCodeAfterParse(Dictionary<int, List<Models.Face>> keyValuePairs, string file, int idValue, int locationIndexValue)
|
||||
{
|
||||
string? check;
|
||||
int? normalizedPixelPercentage;
|
||||
List<Models.Face> faces = keyValuePairs[idValue];
|
||||
if (faces.Count > locationIndexValue)
|
||||
(check, normalizedPixelPercentage) = GetReversedDeterministicHashCodeFromFace(file, idValue, locationIndexValue, faces);
|
||||
else
|
||||
{
|
||||
check = null;
|
||||
normalizedPixelPercentage = null;
|
||||
}
|
||||
return (check, normalizedPixelPercentage);
|
||||
}
|
||||
|
||||
private static (string? check, string id, int? normalizedPixelPercentage) GetReversedDeterministicHashCodeFromCollection(Dictionary<int, List<Models.Face>> keyValuePairs, string file, string fileName)
|
||||
{
|
||||
string id;
|
||||
string? check;
|
||||
int? normalizedPixelPercentage;
|
||||
string[] segments = fileName.Split(' ');
|
||||
if (segments.Length < 3)
|
||||
throw new Exception();
|
||||
id = segments[2].Split('.')[0];
|
||||
string locationIdex = segments[0];
|
||||
if (int.TryParse(id, out int idValue) && int.TryParse(locationIdex, out int locationIndexValue) && keyValuePairs.ContainsKey(idValue))
|
||||
(check, normalizedPixelPercentage) = GetReversedDeterministicHashCodeAfterParse(keyValuePairs, file, idValue, locationIndexValue);
|
||||
else
|
||||
{
|
||||
check = null;
|
||||
id = string.Empty;
|
||||
normalizedPixelPercentage = null;
|
||||
}
|
||||
if (normalizedPixelPercentage is null)
|
||||
id = string.Empty;
|
||||
return new(check, id, normalizedPixelPercentage);
|
||||
}
|
||||
|
||||
private static (string?, double?) GetReversedDeterministicHashCode(Dictionary<int, List<Models.Face>> keyValuePairs, string file, string fileName)
|
||||
{
|
||||
double? result;
|
||||
string? check;
|
||||
string id;
|
||||
int? normalizedPixelPercentage;
|
||||
if (keyValuePairs.Any())
|
||||
(check, id, normalizedPixelPercentage) = GetReversedDeterministicHashCodeFromCollection(keyValuePairs, file, fileName);
|
||||
else
|
||||
{
|
||||
check = null;
|
||||
id = string.Empty;
|
||||
normalizedPixelPercentage = null;
|
||||
}
|
||||
if (normalizedPixelPercentage is null || !double.TryParse(string.Concat(id, '.', normalizedPixelPercentage.Value), out double resultValue))
|
||||
result = null;
|
||||
else
|
||||
result = resultValue;
|
||||
return new(check, result);
|
||||
}
|
||||
|
||||
internal static (string?, double?) GetReversedDeterministicHashCode(Dictionary<int, List<Models.Face>> keyValuePairs, string file)
|
||||
{
|
||||
double? result;
|
||||
string? check;
|
||||
string fileName = Path.GetFileName(file);
|
||||
if (fileName.Contains('-'))
|
||||
(check, result) = GetReversedDeterministicHashCode(keyValuePairs, file, fileName);
|
||||
else
|
||||
{
|
||||
check = null;
|
||||
result = null;
|
||||
}
|
||||
return new(check, result);
|
||||
}
|
||||
|
||||
}
|
@ -65,7 +65,6 @@ internal abstract class Person
|
||||
Dictionary<DateTime, string[]> results = new();
|
||||
string[] segments;
|
||||
DateTime personKey;
|
||||
const string KeyFormat = "yyyy-MM-dd_HH";
|
||||
DateTime incrementDate = new(1500, 1, 1);
|
||||
string[] lines = File.ReadAllLines(knownPeopleFile);
|
||||
_ = incrementDate.AddDays(lines.Length);
|
||||
@ -77,8 +76,8 @@ internal abstract class Person
|
||||
segments = line.Replace(" //", "\t//").Split('\t');
|
||||
if (segments.Length < 1)
|
||||
continue;
|
||||
SetSegments(ref segments, KeyFormat, ref incrementDate);
|
||||
personKey = DateTime.ParseExact(segments[0], KeyFormat, cultureInfo);
|
||||
SetSegments(ref segments, Stateless.IPerson.KeyFormat, ref incrementDate);
|
||||
personKey = DateTime.ParseExact(segments[0], Stateless.IPerson.KeyFormat, cultureInfo);
|
||||
if (results.ContainsKey(personKey))
|
||||
continue;
|
||||
results.Add(personKey, segments);
|
||||
@ -88,7 +87,7 @@ internal abstract class Person
|
||||
for (int i = 1; i < (1000 - countBefore); i++)
|
||||
{
|
||||
personKey = minimumDateTime.AddDays(i * -1);
|
||||
results.Add(personKey, new string[] { personKey.ToString(KeyFormat) });
|
||||
results.Add(personKey, new string[] { personKey.ToString(Stateless.IPerson.KeyFormat) });
|
||||
}
|
||||
return results.OrderBy(l => l.Key).ToDictionary(l => l.Key, l => l.Value);
|
||||
}
|
||||
|
Reference in New Issue
Block a user