Finished Testing Infineon Pictures
This commit is contained in:
parent
8bf672e840
commit
d4c950e8e3
@ -679,10 +679,11 @@ public class DlibDotNet
|
|||||||
|
|
||||||
private void MapLogic(string argZero, Container[] containers, long ticks, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, MapLogic mapLogic, string outputResolution)
|
private void MapLogic(string argZero, Container[] containers, long ticks, string dResultsFullGroupDirectory, string d2ResultsFullGroupDirectory, MapLogic mapLogic, string outputResolution)
|
||||||
{
|
{
|
||||||
|
int totalNotMapped = 0;
|
||||||
mapLogic.UseKeyValuePairsSaveFaceEncoding(containers);
|
mapLogic.UseKeyValuePairsSaveFaceEncoding(containers);
|
||||||
foreach (Container container in containers)
|
foreach (Container container in containers)
|
||||||
{
|
{
|
||||||
mapLogic.AddToMapping(container.Items);
|
totalNotMapped += mapLogic.AddToMapping(container.Items);
|
||||||
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
|
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
|
||||||
mapLogic.SaveShortcuts(_Configuration.JuliePhares, container.Items);
|
mapLogic.SaveShortcuts(_Configuration.JuliePhares, container.Items);
|
||||||
}
|
}
|
||||||
@ -693,7 +694,7 @@ public class DlibDotNet
|
|||||||
dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, "()");
|
dFacesContentDirectory = Path.Combine(dResultsFullGroupDirectory, "()");
|
||||||
mapLogic.SaveNotMappedTicks();
|
mapLogic.SaveNotMappedTicks();
|
||||||
_ = LogDeltaInMinutes(ticks, nameof(mapLogic.SaveNotMappedTicks));
|
_ = LogDeltaInMinutes(ticks, nameof(mapLogic.SaveNotMappedTicks));
|
||||||
Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> keyValuePairs = _Distance.ParallelWork(_AppSettings.MaxDegreeOfParallelism, _Configuration.IgnoreRelativePaths, argZero, ticks, mapLogic, containers);
|
Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> keyValuePairs = _Distance.ParallelWork(_AppSettings.MaxDegreeOfParallelism, _Configuration.IgnoreRelativePaths, argZero, ticks, mapLogic, containers, totalNotMapped);
|
||||||
_ = LogDeltaInSeconds(ticks, nameof(E_Distance.ParallelWork));
|
_ = LogDeltaInSeconds(ticks, nameof(E_Distance.ParallelWork));
|
||||||
Dictionary<int, List<MappingContainer>> strippedKeyValuePairs = Strip(keyValuePairs);
|
Dictionary<int, List<MappingContainer>> strippedKeyValuePairs = Strip(keyValuePairs);
|
||||||
List<(string, int, Mapping, DateTime, bool?, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>)> collection = Convert(keyValuePairs);
|
List<(string, int, Mapping, DateTime, bool?, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>)> collection = Convert(keyValuePairs);
|
||||||
|
@ -621,14 +621,13 @@ internal class E_Distance
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> GetThreeSigmaFaceEncodings(int maxDegreeOfParallelism, long ticks, Dictionary<string, List<MappingContainer>> keyValuePairs)
|
private Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> GetThreeSigmaFaceEncodings(int maxDegreeOfParallelism, long ticks, Random random, Dictionary<string, List<MappingContainer>> keyValuePairs)
|
||||||
{
|
{
|
||||||
if (_Log is null)
|
if (_Log is null)
|
||||||
throw new NullReferenceException(nameof(_Log));
|
throw new NullReferenceException(nameof(_Log));
|
||||||
Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> results = new();
|
Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> results = new();
|
||||||
int totalSeconds;
|
int totalSeconds;
|
||||||
int selectedIndex;
|
int selectedIndex;
|
||||||
Random random = new();
|
|
||||||
List<double> faceDistances;
|
List<double> faceDistances;
|
||||||
MappingContainer mappingContainer;
|
MappingContainer mappingContainer;
|
||||||
int keyValuePairsCount = keyValuePairs.Count;
|
int keyValuePairsCount = keyValuePairs.Count;
|
||||||
@ -662,12 +661,13 @@ internal class E_Distance
|
|||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> ParallelWork(int maxDegreeOfParallelism, string[] ignoreRelativePaths, string argZero, long ticks, Map.Models.MapLogic mapLogic, Container[] containers)
|
internal Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> ParallelWork(int maxDegreeOfParallelism, string[] ignoreRelativePaths, string argZero, long ticks, Map.Models.MapLogic mapLogic, Container[] containers, int totalNotMapped)
|
||||||
{
|
{
|
||||||
Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> results;
|
Dictionary<string, List<(FaceRecognitionDotNet.FaceEncoding, MappingContainer)>> results;
|
||||||
mapLogic.ForceSingleImage(ignoreRelativePaths, argZero, containers);
|
Random random = new((int)ticks);
|
||||||
|
mapLogic.ForceSingleImage(ignoreRelativePaths, argZero, containers, totalNotMapped, random);
|
||||||
Dictionary<string, List<MappingContainer>> keyValuePairs = Map.Models.Stateless.IMapLogic.GetKeyValuePairs(ignoreRelativePaths, argZero, containers);
|
Dictionary<string, List<MappingContainer>> keyValuePairs = Map.Models.Stateless.IMapLogic.GetKeyValuePairs(ignoreRelativePaths, argZero, containers);
|
||||||
results = GetThreeSigmaFaceEncodings(maxDegreeOfParallelism, ticks, keyValuePairs);
|
results = GetThreeSigmaFaceEncodings(maxDegreeOfParallelism, ticks, random, keyValuePairs);
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,8 +319,9 @@ public class MapLogic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddToMapping(List<Item> items)
|
public int AddToMapping(List<Item> items)
|
||||||
{
|
{
|
||||||
|
int result = 0;
|
||||||
long ticks;
|
long ticks;
|
||||||
Mapping mapping;
|
Mapping mapping;
|
||||||
bool forced = false;
|
bool forced = false;
|
||||||
@ -343,7 +344,10 @@ public class MapLogic
|
|||||||
continue;
|
continue;
|
||||||
deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(item, face);
|
deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(item, face);
|
||||||
if (!_DeterministicHashCodeKeyValuePairs.ContainsKey(deterministicHashCodeKey))
|
if (!_DeterministicHashCodeKeyValuePairs.ContainsKey(deterministicHashCodeKey))
|
||||||
|
{
|
||||||
|
result += 1;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
personBirthdays.AddRange(_DeterministicHashCodeKeyValuePairs[deterministicHashCodeKey]);
|
personBirthdays.AddRange(_DeterministicHashCodeKeyValuePairs[deterministicHashCodeKey]);
|
||||||
for (int i = 0; i < personBirthdays.Count; i++)
|
for (int i = 0; i < personBirthdays.Count; i++)
|
||||||
{
|
{
|
||||||
@ -377,6 +381,7 @@ public class MapLogic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveContainers(List<SaveContainer> saveContainers)
|
private void SaveContainers(List<SaveContainer> saveContainers)
|
||||||
@ -677,10 +682,10 @@ public class MapLogic
|
|||||||
key = string.Concat(personKey, dateKey);
|
key = string.Concat(personKey, dateKey);
|
||||||
if (match.Filtered is null)
|
if (match.Filtered is null)
|
||||||
directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, $"{facePopulatedKey}Null", personKey, dateKey);
|
directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, $"{facePopulatedKey}Null", personKey, dateKey);
|
||||||
else if (!match.Filtered.Value)
|
else if (match.Filtered.Value)
|
||||||
directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, $"{facePopulatedKey}Okay", personKey, dateKey);
|
|
||||||
else
|
|
||||||
directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, $"{facePopulatedKey}OutOfControl", personKey, dateKey);
|
directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, $"{facePopulatedKey}OutOfControl", personKey, dateKey);
|
||||||
|
else
|
||||||
|
continue;
|
||||||
personDirectory = Path.Combine(directory, match.DisplayDirectoryName[..1], "lnk");
|
personDirectory = Path.Combine(directory, match.DisplayDirectoryName[..1], "lnk");
|
||||||
saveContainer = new(personDirectory);
|
saveContainer = new(personDirectory);
|
||||||
results.Add(saveContainer);
|
results.Add(saveContainer);
|
||||||
@ -744,9 +749,9 @@ public class MapLogic
|
|||||||
if (match.Filtered is null)
|
if (match.Filtered is null)
|
||||||
directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, $"{facePopulatedKey}WithButNull", personKey, dateKey);
|
directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, $"{facePopulatedKey}WithButNull", personKey, dateKey);
|
||||||
else if (!match.Filtered.Value)
|
else if (!match.Filtered.Value)
|
||||||
directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, $"{facePopulatedKey}WithAndOkay", personKey, dateKey);
|
|
||||||
else
|
|
||||||
directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, $"{facePopulatedKey}WithButOutOfControl", personKey, dateKey);
|
directory = Path.Combine(_ZPropertyHolderContentTicksDirectory, $"{facePopulatedKey}WithButOutOfControl", personKey, dateKey);
|
||||||
|
else
|
||||||
|
continue;
|
||||||
personDirectory = Path.Combine(directory, match.DisplayDirectoryName[..1], "lnk");
|
personDirectory = Path.Combine(directory, match.DisplayDirectoryName[..1], "lnk");
|
||||||
saveContainer = new(personDirectory);
|
saveContainer = new(personDirectory);
|
||||||
results.Add(saveContainer);
|
results.Add(saveContainer);
|
||||||
@ -755,7 +760,7 @@ public class MapLogic
|
|||||||
deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(item, face);
|
deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(item, face);
|
||||||
checkFile = Path.Combine(directory, $"{deterministicHashCodeKey}{item.ImageFileHolder.ExtensionLowered}");
|
checkFile = Path.Combine(directory, $"{deterministicHashCodeKey}{item.ImageFileHolder.ExtensionLowered}");
|
||||||
faceFileHolder = new(Path.Combine(facesDirectory, $"{deterministicHashCodeKey}{item.ImageFileHolder.ExtensionLowered}{_FacesFilenameExtension}"));
|
faceFileHolder = new(Path.Combine(facesDirectory, $"{deterministicHashCodeKey}{item.ImageFileHolder.ExtensionLowered}{_FacesFilenameExtension}"));
|
||||||
facePartsFileHolder = new(Path.Combine(facesDirectory, $"{deterministicHashCodeKey}{item.ImageFileHolder.ExtensionLowered}{_FacesHiddenFilenameExtension}"));
|
hiddenFaceFileHolder = new(Path.Combine(facesDirectory, $"{deterministicHashCodeKey}{item.ImageFileHolder.ExtensionLowered}{_FacesHiddenFilenameExtension}"));
|
||||||
facePartsFileHolder = new(Path.Combine(facePartsDirectory, $"{deterministicHashCodeKey}{item.ImageFileHolder.ExtensionLowered}{_FacePartsFilenameExtension}"));
|
facePartsFileHolder = new(Path.Combine(facePartsDirectory, $"{deterministicHashCodeKey}{item.ImageFileHolder.ExtensionLowered}{_FacePartsFilenameExtension}"));
|
||||||
if (string.IsNullOrEmpty(personDirectory))
|
if (string.IsNullOrEmpty(personDirectory))
|
||||||
shortcutFile = string.Empty;
|
shortcutFile = string.Empty;
|
||||||
@ -925,54 +930,70 @@ public class MapLogic
|
|||||||
SaveContainers(saveContainers);
|
SaveContainers(saveContainers);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ForceSingleImage(string[] ignoreRelativePaths, string argZero, Container[] containers)
|
public void ForceSingleImage(string[] ignoreRelativePaths, string argZero, Container[] containers, int totalNotMapped, Random random)
|
||||||
{
|
{
|
||||||
|
int count = 0;
|
||||||
Closest closest;
|
Closest closest;
|
||||||
Mapping mapping;
|
Mapping mapping;
|
||||||
bool? isWrongYear;
|
bool? isWrongYear;
|
||||||
long? ticks = null;
|
long? ticks = null;
|
||||||
const int zero = 0;
|
const int zero = 0;
|
||||||
bool forced = true;
|
bool forced = true;
|
||||||
|
int randomSelection;
|
||||||
DateTime minimumDateTime;
|
DateTime minimumDateTime;
|
||||||
bool aboveTolerance = false;
|
bool aboveTolerance = false;
|
||||||
int? approximateYears = null;
|
int? approximateYears = null;
|
||||||
PersonBirthday personBirthday;
|
PersonBirthday personBirthday;
|
||||||
const string displayDirectoryName = Property.Models.Stateless.IResult.AllInOne;
|
const string displayDirectoryName = Property.Models.Stateless.IResult.AllInOne;
|
||||||
foreach (Container container in containers)
|
for (int i = 0; i < int.MaxValue; i++)
|
||||||
{
|
{
|
||||||
if (!_NotMappedTicks.Any())
|
count = 0;
|
||||||
break;
|
randomSelection = random.Next(0, totalNotMapped);
|
||||||
if (!container.Items.Any())
|
foreach (Container container in containers)
|
||||||
continue;
|
|
||||||
if (!container.SourceDirectory.StartsWith(argZero))
|
|
||||||
continue;
|
|
||||||
if (ignoreRelativePaths.Contains(Path.GetFileName(container.SourceDirectory)))
|
|
||||||
continue;
|
|
||||||
foreach (Item item in container.Items)
|
|
||||||
{
|
{
|
||||||
if (item.ImageFileHolder is null || item.Property?.Id is null || item.Mapping.Any())
|
if (!_NotMappedTicks.Any())
|
||||||
|
break;
|
||||||
|
if (!container.Items.Any())
|
||||||
continue;
|
continue;
|
||||||
foreach (Face face in item.Faces)
|
if (!container.SourceDirectory.StartsWith(argZero))
|
||||||
|
continue;
|
||||||
|
if (ignoreRelativePaths.Contains(Path.GetFileName(container.SourceDirectory)))
|
||||||
|
continue;
|
||||||
|
foreach (Item item in container.Items)
|
||||||
{
|
{
|
||||||
if (face.FaceEncoding is null || face.Location?.NormalizedPixelPercentage is null)
|
if (item.ImageFileHolder is null || item.Property?.Id is null || item.Mapping.Any())
|
||||||
continue;
|
continue;
|
||||||
ticks = _NotMappedTicks[zero];
|
foreach (Face face in item.Faces)
|
||||||
minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property);
|
{
|
||||||
(isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime);
|
if (face.FaceEncoding is null || face.Location?.NormalizedPixelPercentage is null)
|
||||||
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(ticks.Value);
|
continue;
|
||||||
mapping = new(approximateYears, displayDirectoryName, forced, face.Location.NormalizedPixelPercentage, personBirthday);
|
if (face.Location.Confidence < ILocation.MinimumConfidence)
|
||||||
closest = new(aboveTolerance, zero, face.Location.NormalizedPixelPercentage.Value, isWrongYear, mapping, zero, minimumDateTime, null);
|
continue;
|
||||||
item.Closest.Add(closest);
|
count += 1;
|
||||||
item.Mapping.Add(mapping);
|
if (count < randomSelection)
|
||||||
|
continue;
|
||||||
|
ticks = _NotMappedTicks[zero];
|
||||||
|
minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property);
|
||||||
|
(isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime);
|
||||||
|
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(ticks.Value);
|
||||||
|
mapping = new(approximateYears, displayDirectoryName, forced, face.Location.NormalizedPixelPercentage, personBirthday);
|
||||||
|
closest = new(aboveTolerance, zero, face.Location.NormalizedPixelPercentage.Value, isWrongYear, mapping, zero, minimumDateTime, null);
|
||||||
|
item.Closest.Add(closest);
|
||||||
|
item.Mapping.Add(mapping);
|
||||||
|
if (ticks is not null)
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (ticks is not null)
|
if (ticks is not null)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (ticks is not null)
|
if (ticks is not null)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (ticks is not null)
|
if (ticks is not null || count == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (ticks is null && count != 0)
|
||||||
|
throw new Exception();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SavePropertyHolders(string argZero, Container[] containers)
|
public void SavePropertyHolders(string argZero, Container[] containers)
|
||||||
|
@ -148,11 +148,14 @@ public class ByDeterministicHashCode
|
|||||||
foreach (string personKeyDirectory in personKeyDirectories)
|
foreach (string personKeyDirectory in personKeyDirectories)
|
||||||
{
|
{
|
||||||
personKey = Path.GetFileName(personKeyDirectory);
|
personKey = Path.GetFileName(personKeyDirectory);
|
||||||
if (personKey == nameof(Closest))
|
if (personKey.Length != Shared.Models.Stateless.IPersonBirthday.Format.Length)
|
||||||
throw new Exception($"Move personKey directories up one from {nameof(Closest)} and delete {nameof(Closest)} directory!");
|
personBirthday = null;
|
||||||
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKey);
|
else
|
||||||
if (personBirthday is null)
|
{
|
||||||
continue;
|
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKey);
|
||||||
|
if (personBirthday is null)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
yearDirectories = Directory.GetDirectories(personKeyDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
foreach (string yearDirectory in yearDirectories)
|
foreach (string yearDirectory in yearDirectories)
|
||||||
{
|
{
|
||||||
@ -167,6 +170,10 @@ public class ByDeterministicHashCode
|
|||||||
continue;
|
continue;
|
||||||
personFirstInitialDirectory = Path.Combine(yearDirectory, personFirstInitial);
|
personFirstInitialDirectory = Path.Combine(yearDirectory, personFirstInitial);
|
||||||
files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
|
files = Directory.GetFiles(personNameDirectory, "*", SearchOption.TopDirectoryOnly);
|
||||||
|
if (personKey == nameof(Closest) && files.Any())
|
||||||
|
throw new Exception($"Move personKey directories up one from {nameof(Closest)} and delete {nameof(Closest)} directory!");
|
||||||
|
if (personBirthday is null)
|
||||||
|
continue;
|
||||||
foreach (string file in files)
|
foreach (string file in files)
|
||||||
{
|
{
|
||||||
if (file.EndsWith(".lnk") || file.EndsWith(".json"))
|
if (file.EndsWith(".lnk") || file.EndsWith(".json"))
|
||||||
@ -198,6 +205,7 @@ public class ByDeterministicHashCode
|
|||||||
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(personKeyDirectory);
|
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(personKeyDirectory);
|
||||||
}
|
}
|
||||||
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(ticksDirectory);
|
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(ticksDirectory);
|
||||||
|
_ = Shared.Models.Stateless.Methods.IPath.DeleteEmptyDirectories(ticksDirectory);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
public interface ILocation
|
public interface ILocation
|
||||||
{
|
{
|
||||||
|
|
||||||
|
const double MinimumConfidence = 0.8d;
|
||||||
const int Digits = 6;
|
const int Digits = 6;
|
||||||
|
const double Tolerance = 0.6d;
|
||||||
const int Factor = 1000000;
|
const int Factor = 1000000;
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user