Closest is usable with
NamedDeterministicHashCodeIdAndFaceLocationIndex
This commit is contained in:
@ -5,6 +5,10 @@ namespace View_by_Distance.Property.Models;
|
||||
|
||||
public class Closest
|
||||
{
|
||||
public const int MaximumPer = 50;
|
||||
public const float MaximumMinimum = 0.50f;
|
||||
public const bool SkipIsWrongYear = true;
|
||||
public const float MinimumMinimum = 0.05f;
|
||||
|
||||
protected readonly double? _Average;
|
||||
protected readonly int? _FaceLocationIndex;
|
||||
@ -40,6 +44,6 @@ public class Closest
|
||||
{
|
||||
}
|
||||
|
||||
public static Closest Get(List<Closest> collection) => (from l in collection orderby l.Minimum < 0.05, l.Average select l).First();
|
||||
public static Closest[] Get(List<Closest> collection) => (from l in collection orderby l.Minimum < MinimumMinimum, l.Average select l).ToArray();
|
||||
|
||||
}
|
@ -106,10 +106,10 @@ public class Item
|
||||
continue;
|
||||
if (item.Property?.Id is null || item.ResizedFileHolder is null)
|
||||
continue;
|
||||
if (!propertyLogic.NamedFaceInfoDeterministicHashCodeIndices.ContainsKey(item.Property.Id.Value))
|
||||
if (!propertyLogic.NamedFaceInfoDeterministicHashCodeIds.ContainsKey(item.Property.Id.Value))
|
||||
continue;
|
||||
minimumDateTime = Stateless.A_Property.GetMinimumDateTime(item.Property);
|
||||
personKeys = propertyLogic.NamedFaceInfoDeterministicHashCodeIndices[item.Property.Id.Value];
|
||||
personKeys = propertyLogic.NamedFaceInfoDeterministicHashCodeIds[item.Property.Id.Value];
|
||||
(isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime);
|
||||
for (int j = 0; j < personKeys.Length; j++)
|
||||
{
|
||||
@ -163,7 +163,7 @@ public class Item
|
||||
if (item.Property?.Id is null || item.ResizedFileHolder is null)
|
||||
continue;
|
||||
collection = new();
|
||||
if (!propertyLogic.NamedFaceInfoDeterministicHashCodeIndices.ContainsKey(item.Property.Id.Value))
|
||||
if (!propertyLogic.NamedFaceInfoDeterministicHashCodeIds.ContainsKey(item.Property.Id.Value))
|
||||
{
|
||||
faceCollection = new();
|
||||
directory = Path.Combine(dFacesContentDirectory, $"Unnamed{relativePath[2..]}");
|
||||
@ -171,7 +171,7 @@ public class Item
|
||||
else
|
||||
{
|
||||
faceCollection = item.Faces;
|
||||
keys = propertyLogic.NamedFaceInfoDeterministicHashCodeIndices[item.Property.Id.Value];
|
||||
keys = propertyLogic.NamedFaceInfoDeterministicHashCodeIds[item.Property.Id.Value];
|
||||
minimumDateTime = Stateless.A_Property.GetMinimumDateTime(item.Property);
|
||||
if (minimumDateTime is null)
|
||||
continue;
|
||||
|
@ -19,14 +19,16 @@ public class PropertyLogic
|
||||
protected readonly Dictionary<int, int[]> _KeyValuePairs;
|
||||
protected readonly Dictionary<int, int[]> _IndicesFromNew;
|
||||
protected readonly Dictionary<int, string[]> _SixCharacterNamedFaceInfo;
|
||||
protected readonly Dictionary<int, string[]> _NamedFaceInfoDeterministicHashCodeIndices;
|
||||
protected readonly List<string> _NamedDeterministicHashCodeIdAndFaceLocationIndex;
|
||||
protected readonly Dictionary<int, string[]> _NamedFaceInfoDeterministicHashCodeIds;
|
||||
|
||||
public bool Reverse { get; }
|
||||
public List<string> AngleBracketCollection { get; }
|
||||
public Dictionary<int, int[]> KeyValuePairs => _KeyValuePairs;
|
||||
public Dictionary<int, int[]> IndicesFromNew => _IndicesFromNew;
|
||||
public List<string> ExceptionsDirectories => _ExceptionsDirectories;
|
||||
public Dictionary<int, string[]> NamedFaceInfoDeterministicHashCodeIndices => _NamedFaceInfoDeterministicHashCodeIndices;
|
||||
public Dictionary<int, string[]> NamedFaceInfoDeterministicHashCodeIds => _NamedFaceInfoDeterministicHashCodeIds;
|
||||
public List<string> NamedDeterministicHashCodeIdAndFaceLocationIndex => _NamedDeterministicHashCodeIdAndFaceLocationIndex;
|
||||
|
||||
private readonly Model? _Model;
|
||||
private readonly Serilog.ILogger? _Log;
|
||||
@ -57,6 +59,7 @@ public class PropertyLogic
|
||||
string json;
|
||||
string[] files;
|
||||
string fullPath;
|
||||
List<string> namedDeterministicHashCodeIdAndFaceLocationIndex = new();
|
||||
Dictionary<int, int[]>? keyValuePairs;
|
||||
List<KeyValuePair<int, int[]>>? collection;
|
||||
Dictionary<int, int[]> indicesFromNew = new();
|
||||
@ -75,7 +78,20 @@ public class PropertyLogic
|
||||
throw new NullReferenceException(nameof(namedFaceInfoDeterministicHashCodeIndices));
|
||||
}
|
||||
if (namedFaceInfoDeterministicHashCodeIndices.Any())
|
||||
{
|
||||
sixCharacterNamedFaceInfo = new();
|
||||
string[] directories = Directory.GetDirectories(rootDirectoryParent, "*DeterministicHashCode*", SearchOption.TopDirectoryOnly);
|
||||
if (directories.Any())
|
||||
{
|
||||
Dictionary<int, string[]> ticksKeyValuePairs = GetKeyValuePairs(namedDeterministicHashCodeIdAndFaceLocationIndex, directories[0]);
|
||||
foreach (KeyValuePair<int, string[]> keyValuePair in ticksKeyValuePairs)
|
||||
{
|
||||
if (namedFaceInfoDeterministicHashCodeIndices.ContainsKey(keyValuePair.Key))
|
||||
continue;
|
||||
namedFaceInfoDeterministicHashCodeIndices.Add(keyValuePair.Key, keyValuePair.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
files = Directory.GetFiles(rootDirectoryParent, "*SixCharacter*.json", SearchOption.TopDirectoryOnly);
|
||||
@ -117,10 +133,63 @@ public class PropertyLogic
|
||||
indicesFromNew.Add(keyValuePair.Key, keyValuePair.Value);
|
||||
}
|
||||
}
|
||||
_NamedDeterministicHashCodeIdAndFaceLocationIndex = namedDeterministicHashCodeIdAndFaceLocationIndex;
|
||||
_KeyValuePairs = keyValuePairs;
|
||||
_IndicesFromNew = indicesFromNew;
|
||||
_SixCharacterNamedFaceInfo = sixCharacterNamedFaceInfo;
|
||||
_NamedFaceInfoDeterministicHashCodeIndices = namedFaceInfoDeterministicHashCodeIndices;
|
||||
_NamedFaceInfoDeterministicHashCodeIds = namedFaceInfoDeterministicHashCodeIndices;
|
||||
}
|
||||
|
||||
private static Dictionary<int, string[]> GetKeyValuePairs(List<string> namedDeterministicHashCodeIdAndFaceLocationIndex, string rootDirectory)
|
||||
{
|
||||
Dictionary<int, string[]> results = new();
|
||||
string id;
|
||||
string[] files;
|
||||
string personKey;
|
||||
string[] segments;
|
||||
string faceLocationIndex;
|
||||
string[] yearDirectories;
|
||||
string[] personKeyDirectories;
|
||||
string[] personNameDirectories;
|
||||
string fileNameWithoutExtension;
|
||||
string[] ticksDirectories = Directory.GetDirectories(rootDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string ticksDirectory in ticksDirectories)
|
||||
{
|
||||
if (!ticksDirectory.EndsWith(')'))
|
||||
continue;
|
||||
personKeyDirectories = Directory.GetDirectories(ticksDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string personKeyDirectory in personKeyDirectories)
|
||||
{
|
||||
personKey = Path.GetFileName(personKeyDirectory);
|
||||
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string yearDirectory in yearDirectories)
|
||||
{
|
||||
personNameDirectories = Directory.GetDirectories(yearDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string personNameDirectory in personNameDirectories)
|
||||
{
|
||||
files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||
foreach (string file in files)
|
||||
{
|
||||
if (file.EndsWith(".lnk"))
|
||||
continue;
|
||||
fileNameWithoutExtension = Path.GetFileNameWithoutExtension(file);
|
||||
segments = fileNameWithoutExtension.Split(' ');
|
||||
if (segments.Length < 2)
|
||||
continue;
|
||||
id = segments[2];
|
||||
faceLocationIndex = segments[0];
|
||||
if (!int.TryParse(id, out int idValue))
|
||||
continue;
|
||||
namedDeterministicHashCodeIdAndFaceLocationIndex.Add(fileNameWithoutExtension);
|
||||
if (results.ContainsKey(idValue))
|
||||
continue;
|
||||
results.Add(idValue, new string[] { personKey });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
@ -640,7 +709,7 @@ public class PropertyLogic
|
||||
List<Tuple<string, DateTime>> filteredSourceDirectoryFileTuples = new();
|
||||
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = _MaxDegreeOfParallelism };
|
||||
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
|
||||
string message = $"{container.R + 1:000}.{container.G} / {containersCount:000}) {filteredItems.Length:000} file(s) - {totalSeconds} total second(s) - {container.SourceDirectory}";
|
||||
string message = $"{container.R:000}.{container.G} / {containersCount:000}) {filteredItems.Length:000} file(s) - {totalSeconds} total second(s) - {container.SourceDirectory}";
|
||||
using ProgressBar progressBar = new(filteredItems.Length, message, options);
|
||||
_ = Parallel.For(0, filteredItems.Length, parallelOptions, i =>
|
||||
{
|
||||
|
@ -5,25 +5,37 @@ namespace View_by_Distance.Property.Models.Stateless;
|
||||
public interface IResult
|
||||
{
|
||||
|
||||
public const string Content = "()";
|
||||
public const string Singleton = "{}";
|
||||
public const string Collection = "[]";
|
||||
public const string AllInOne = "_ _ _";
|
||||
|
||||
string TestStatic_GetRelativePath(Models.Configuration configuration, string path);
|
||||
static string GetRelativePath(Models.Configuration configuration, string path) => Result.GetRelativePath(configuration, path);
|
||||
static string GetRelativePath(Models.Configuration configuration, string path)
|
||||
=> Result.GetRelativePath(configuration, path);
|
||||
|
||||
string TestStatic_GetResultsGroupDirectory(Models.Configuration configuration, string description);
|
||||
static string GetResultsGroupDirectory(Models.Configuration configuration, string description) => Result.GetResultsGroupDirectory(configuration, description);
|
||||
static string GetResultsGroupDirectory(Models.Configuration configuration, string description)
|
||||
=> Result.GetResultsGroupDirectory(configuration, description);
|
||||
|
||||
string TestStatic_GetResultsDateGroupDirectory(Models.Configuration configuration, string description);
|
||||
static string GetResultsDateGroupDirectory(Models.Configuration configuration, string description) => Result.GetResultsDateGroupDirectory(configuration, description);
|
||||
static string GetResultsDateGroupDirectory(Models.Configuration configuration, string description)
|
||||
=> Result.GetResultsDateGroupDirectory(configuration, description);
|
||||
|
||||
string TestStatic_GetResultsDateGroupDirectory(Models.Configuration configuration, string description, string jsonGroup);
|
||||
static string GetResultsDateGroupDirectory(Models.Configuration configuration, string description, string jsonGroup) => Result.GetResultsDateGroupDirectory(configuration, description, jsonGroup);
|
||||
static string GetResultsDateGroupDirectory(Models.Configuration configuration, string description, string jsonGroup)
|
||||
=> Result.GetResultsDateGroupDirectory(configuration, description, jsonGroup);
|
||||
|
||||
List<string> TestStatic_GetDirectoryInfoCollection(Models.Configuration configuration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription);
|
||||
static List<string> GetDirectoryInfoCollection(Models.Configuration configuration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription) => Result.GetDirectoryInfoCollection(configuration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription);
|
||||
static List<string> GetDirectoryInfoCollection(Models.Configuration configuration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted)
|
||||
=> Result.GetDirectoryInfoCollection(configuration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted);
|
||||
|
||||
string TestStatic_GetResultsFullGroupDirectory(Models.Configuration configuration, Model? model, PredictorModel? predictorModel, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel);
|
||||
static string GetResultsFullGroupDirectory(Models.Configuration configuration, Model? model, PredictorModel? predictorModel, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) => Result.GetResultsFullGroupDirectory(configuration, model, predictorModel, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel);
|
||||
static string GetResultsFullGroupDirectory(Models.Configuration configuration, Model? model, PredictorModel? predictorModel, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel)
|
||||
=> Result.GetResultsFullGroupDirectory(configuration, model, predictorModel, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel);
|
||||
|
||||
List<string> TestStatic_GetDirectoryInfoCollection(Models.Configuration configuration, Model? model, PredictorModel? predictorModel, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription);
|
||||
static List<string> GetDirectoryInfoCollection(Models.Configuration configuration, Model? model, PredictorModel? predictorModel, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) => Result.GetDirectoryInfoCollection(configuration, model, predictorModel, sourceDirectory, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel, contentDescription, singletonDescription, collectionDescription);
|
||||
static List<string> GetDirectoryInfoCollection(Models.Configuration configuration, Model? model, PredictorModel? predictorModel, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription)
|
||||
=> Result.GetDirectoryInfoCollection(configuration, model, predictorModel, sourceDirectory, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel, contentDescription, singletonDescription, collectionDescription);
|
||||
|
||||
}
|
@ -64,20 +64,18 @@ internal class Result
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static List<string> GetDirectoryInfoCollection(Models.Configuration configuration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription)
|
||||
internal static List<string> GetDirectoryInfoCollection(Models.Configuration configuration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted)
|
||||
{
|
||||
List<string> results = new();
|
||||
string result = string.Empty;
|
||||
string checkDirectory;
|
||||
const string allInOne = "_ _ _";
|
||||
string sourceDirectorySegment = GetRelativePath(configuration, sourceDirectory);
|
||||
string result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment);
|
||||
if (!string.IsNullOrEmpty(contentDescription))
|
||||
{
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, "()", allInOne);
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, IResult.Content, IResult.AllInOne);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment);
|
||||
string contentDirectory = new(result.Replace("<>", "()"));
|
||||
string contentDirectory = new(result.Replace("<>", IResult.Content));
|
||||
if (!Directory.Exists(contentDirectory))
|
||||
_ = Directory.CreateDirectory(contentDirectory);
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("() - ", contentDescription));
|
||||
@ -86,76 +84,44 @@ internal class Result
|
||||
}
|
||||
if (!string.IsNullOrEmpty(singletonDescription))
|
||||
{
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, "{}", allInOne);
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, IResult.Singleton, IResult.AllInOne);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment);
|
||||
string singletonDirectory = new(result.Replace("<>", "{}"));
|
||||
if (!Directory.Exists(singletonDirectory))
|
||||
_ = Directory.CreateDirectory(singletonDirectory);
|
||||
if (!converted)
|
||||
{
|
||||
string singletonDirectory = new(result.Replace("<>", IResult.Singleton));
|
||||
if (!Directory.Exists(singletonDirectory))
|
||||
_ = Directory.CreateDirectory(singletonDirectory);
|
||||
}
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("{} - ", singletonDescription));
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(collectionDescription))
|
||||
{
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, "[]", allInOne);
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, IResult.Collection, IResult.AllInOne);
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment);
|
||||
string collectionDirectory = new(result.Replace("<>", "[]"));
|
||||
if (!Directory.Exists(collectionDirectory))
|
||||
_ = Directory.CreateDirectory(collectionDirectory);
|
||||
if (!converted)
|
||||
{
|
||||
string collectionDirectory = new(result.Replace("<>", IResult.Collection));
|
||||
if (!Directory.Exists(collectionDirectory))
|
||||
_ = Directory.CreateDirectory(collectionDirectory);
|
||||
}
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("[] - ", collectionDescription));
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
if (string.IsNullOrEmpty(result))
|
||||
throw new Exception();
|
||||
results.Add(result);
|
||||
return results;
|
||||
}
|
||||
|
||||
internal static List<string> GetDirectoryInfoCollection(Models.Configuration configuration, Model? model, PredictorModel? predictorModel, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription)
|
||||
{
|
||||
List<string> results = new();
|
||||
string result = string.Empty;
|
||||
string checkDirectory;
|
||||
string sourceDirectorySegment = GetRelativePath(configuration, sourceDirectory);
|
||||
List<string> results;
|
||||
bool converted = false;
|
||||
string dateGroupDirectory = GetResultsFullGroupDirectory(configuration, model, predictorModel, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel);
|
||||
if (!string.IsNullOrEmpty(contentDescription))
|
||||
{
|
||||
result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment);
|
||||
System.IO.DirectoryInfo contentDirectoryInfo = new(result.Replace("<>", "()"));
|
||||
if (!contentDirectoryInfo.Exists)
|
||||
contentDirectoryInfo.Create();
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("() - ", contentDescription));
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(singletonDescription))
|
||||
{
|
||||
result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment);
|
||||
System.IO.DirectoryInfo singletonDirectoryInfo = new(result.Replace("<>", "{}"));
|
||||
if (!singletonDirectoryInfo.Exists)
|
||||
singletonDirectoryInfo.Create();
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("{} - ", singletonDescription));
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(collectionDescription))
|
||||
{
|
||||
result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment);
|
||||
System.IO.DirectoryInfo collectionDirectoryInfo = new(result.Replace("<>", "[]"));
|
||||
if (!collectionDirectoryInfo.Exists)
|
||||
collectionDirectoryInfo.Create();
|
||||
checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("[] - ", collectionDescription));
|
||||
if (!Directory.Exists(checkDirectory))
|
||||
_ = Directory.CreateDirectory(checkDirectory);
|
||||
}
|
||||
if (string.IsNullOrEmpty(result))
|
||||
throw new Exception();
|
||||
results.Add(result);
|
||||
results = GetDirectoryInfoCollection(configuration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted);
|
||||
return results;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user