Finished Testing Infineon Pictures

This commit is contained in:
Mike Phares 2022-08-30 20:13:05 -07:00
parent 8bf672e840
commit d4c950e8e3
5 changed files with 74 additions and 42 deletions

View File

@ -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);

View File

@ -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;
} }

View File

@ -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,19 +930,25 @@ 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;
for (int i = 0; i < int.MaxValue; i++)
{
count = 0;
randomSelection = random.Next(0, totalNotMapped);
foreach (Container container in containers) foreach (Container container in containers)
{ {
if (!_NotMappedTicks.Any()) if (!_NotMappedTicks.Any())
@ -956,6 +967,11 @@ public class MapLogic
{ {
if (face.FaceEncoding is null || face.Location?.NormalizedPixelPercentage is null) if (face.FaceEncoding is null || face.Location?.NormalizedPixelPercentage is null)
continue; continue;
if (face.Location.Confidence < ILocation.MinimumConfidence)
continue;
count += 1;
if (count < randomSelection)
continue;
ticks = _NotMappedTicks[zero]; ticks = _NotMappedTicks[zero];
minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property); minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property);
(isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime); (isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime);
@ -973,6 +989,11 @@ public class MapLogic
if (ticks is not null) if (ticks is not null)
break; break;
} }
if (ticks is not null || count == 0)
break;
}
if (ticks is null && count != 0)
throw new Exception();
} }
public void SavePropertyHolders(string argZero, Container[] containers) public void SavePropertyHolders(string argZero, Container[] containers)

View File

@ -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;
else
{
personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKey); personBirthday = Shared.Models.Stateless.Methods.IPersonBirthday.GetPersonBirthday(personKey);
if (personBirthday is null) if (personBirthday is null)
continue; 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);
} }
} }

View File

@ -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;
} }