Drag Drop Form and Copy Not Mapped Faces

This commit is contained in:
2022-10-23 00:50:36 -07:00
parent c6757ad332
commit cfeeb0eb95
18 changed files with 175 additions and 81 deletions

View File

@ -36,8 +36,6 @@ public partial class DlibDotNet
private readonly Models.Configuration _Configuration;
private readonly bool _ArgZeroIsConfigurationRootDirectory;
private readonly Map.Models.Configuration _MapConfiguration;
private readonly List<KeyValuePair<string, string>> _FileKeyValuePairs;
private readonly Dictionary<string, List<Tuple<string, Shared.Models.Property>>> _FilePropertiesKeyValuePairs;
public DlibDotNet(
List<string> args,
@ -57,8 +55,6 @@ public partial class DlibDotNet
_Exceptions = new List<string>();
PersonContainer[] personContainers;
_Log = Serilog.Log.ForContext<DlibDotNet>();
_FileKeyValuePairs = new List<KeyValuePair<string, string>>();
_FilePropertiesKeyValuePairs = new Dictionary<string, List<Tuple<string, Shared.Models.Property>>>();
Property.Models.Configuration propertyConfiguration = Property.Models.Binder.Configuration.Get(isEnvironment, configurationRoot);
_Log.Information(propertyConfiguration.RootDirectory);
Property.Models.Configuration.Verify(propertyConfiguration, requireExist: false);
@ -504,8 +500,6 @@ public partial class DlibDotNet
string json;
string checkFile;
int sourceDirectoryLength = container.SourceDirectory.Length;
if (_ArgZeroIsConfigurationRootDirectory && outputResolution == _Configuration.OutputResolutions[0])
_FilePropertiesKeyValuePairs.Add(container.SourceDirectory, new List<Tuple<string, Shared.Models.Property>>());
JsonSerializerOptions writeIndentedJsonSerializerOptions = new() { WriteIndented = false };
if (!(from l in propertyCollection where l?.Width is null select true).Any())
{
@ -526,11 +520,6 @@ public partial class DlibDotNet
if (item.ImageFileHolder is null)
continue;
key = Shared.Models.Stateless.Methods.IPath.GetRelativePath(item.ImageFileHolder.FullName, sourceDirectoryLength);
if (_ArgZeroIsConfigurationRootDirectory && outputResolution == _Configuration.OutputResolutions[0])
{
_FileKeyValuePairs.Add(new KeyValuePair<string, string>(container.SourceDirectory, key));
_FilePropertiesKeyValuePairs[container.SourceDirectory].Add(new Tuple<string, Shared.Models.Property>(key, propertyCollection[i]));
}
propertyCollectionKeyValuePairs.Add(new KeyValuePair<string, Shared.Models.Property>(key, propertyCollection[i]));
resizeKeyValuePairsCollections.Add(new KeyValuePair<string, Dictionary<string, int[]>>(key, resizeKeyValuePairs[i]));
imageFaceCollectionsKeyValuePairs.Add(new KeyValuePair<string, List<Shared.Models.Face>?>(key, imageFaceCollections[i]));
@ -693,8 +682,6 @@ public partial class DlibDotNet
foreach (string outputResolution in _Configuration.OutputResolutions)
{
total = 0;
_FileKeyValuePairs.Clear();
_FilePropertiesKeyValuePairs.Clear();
(aResultsFullGroupDirectory, bResultsFullGroupDirectory, cResultsFullGroupDirectory, dResultsFullGroupDirectory) = GetResultsFullGroupDirectories(outputResolution);
for (int i = 0; i < containers.Length; i++)
{
@ -872,10 +859,11 @@ public partial class DlibDotNet
mapLogicSupport);
Dictionary<int, Dictionary<int, Mapping>> idToNormalizedPixelPercentageToMapping = MapLogicSupport.GetIdToNormalizedPixelPercentageToFace(mappingCollection);
mapLogic.CopyManualFiles(dFacesContentDirectory, idToNormalizedPixelPercentageToMapping);
mapLogic.CopyNotMappedFaces(_Configuration.FaceDistanceAreaPermilleTolerance, dFacesContentDirectory, idToNormalizedPixelPercentageToMapping);
(Dictionary<long, int> personKeyToCount, int totalNotMapped) = mapLogic.AddToMapping(mappingCollection);
if (_Configuration.MappingSaveMapped)
if (_Configuration.SaveMappedForOutputResolutions.Contains(outputResolution))
mapLogic.SaveMapped(dFacesContentDirectory, d2FacePartsContentDirectory, mappingCollection, idToNormalizedPixelPercentageToMapping, personKeyToCount, totalNotMapped);
if (_Configuration.MappingSaveNotMapped)
if (_Configuration.SaveNotMappedForOutputResolutions.Contains(outputResolution))
mapLogic.SaveNotMappedTicks();
if (_Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
mapLogic.SaveShortcuts(a2PeopleSingletonDirectory, personContainers, filteredItems, mappingCollection, personKeyToCount);
@ -963,6 +951,35 @@ public partial class DlibDotNet
return result;
}
private List<MappingFromItem> GetMappingFromItemCollection(Container[] containers)
{
List<MappingFromItem> results = new();
bool? isWrongYear;
Item[] filteredItems;
DateTime minimumDateTime;
MappingFromItem mappingFromItem;
foreach (Container container in containers)
{
if (!container.Items.Any())
continue;
if (_Configuration.IgnoreRelativePaths.Any(l => container.SourceDirectory.Contains(l)) && IsIgnoreRelativePath(container.SourceDirectory))
continue;
filteredItems = GetFilterItems(container);
if (!filteredItems.Any())
continue;
foreach (Item item in filteredItems)
{
if (item.Property?.Id is null || item.ImageFileHolder is null)
continue;
minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property);
(isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime);
mappingFromItem = new(item.Property.Id.Value, item.ImageFileHolder, isWrongYear, minimumDateTime, item.RelativePath, item.ImageFileHolder);
results.Add(mappingFromItem);
}
}
return results;
}
private void Search(long ticks, string argZero, string propertyRoot, PersonContainer[] personContainers)
{
int j;
@ -1024,13 +1041,13 @@ public partial class DlibDotNet
MapLogic(argZero, ticks, personContainers, containers, a2PeopleSingletonDirectory, dResultsFullGroupDirectory, d2FacePartsContentDirectory, eDistanceContentDirectory, outputResolution);
if (_IsEnvironment.Development)
continue;
if (_FileKeyValuePairs.Any())
_Random.Random(_Configuration.PropertyConfiguration, _Configuration.OutputResolutions[0], _FileKeyValuePairs);
List<MappingFromItem> mappingFromItemCollection = GetMappingFromItemCollection(containers);
_Random.Random(_Configuration.PropertyConfiguration, _Configuration.OutputResolutions[0], mappingFromItemCollection);
G2_Identify identify = new(_Configuration);
List<G2_Identify> identifiedCollection = identify.GetIdentifiedCollection(_IsEnvironment, _Configuration.PropertyConfiguration, _Faces.FileNameExtension);
identify.WriteAllText(_Configuration.PropertyConfiguration, _Configuration.OutputResolutions[0], identifiedCollection);
if (_Configuration.LoadOrCreateThenSaveIndex && _FilePropertiesKeyValuePairs.Any())
_Index.SetIndex(_Configuration.PropertyConfiguration, _Configuration.OutputResolutions[0], _FilePropertiesKeyValuePairs);
if (_Configuration.LoadOrCreateThenSaveIndex)
_Index.SetIndex(_Configuration.PropertyConfiguration, _Configuration.OutputResolutions[0]);
}
if (!_IsEnvironment.Development)
{

View File

@ -36,8 +36,6 @@ public class Configuration
[Display(Name = "Location Factor"), Required] public int? LocationFactor { get; set; }
[Display(Name = "Mapped Max Index"), Required] public int? MappedMaxIndex { get; set; }
[Display(Name = "Mapping Default Name"), Required] public string MappingDefaultName { get; set; }
[Display(Name = "Mapping Save Mapped"), Required] public bool? MappingSaveMapped { get; set; }
[Display(Name = "Mapping Save Not Mapped"), Required] public bool? MappingSaveNotMapped { get; set; }
[Display(Name = "Mapping Use Deterministic Hash Code Unknown Face Key Value Pairs for Add to Mapping"), Required] public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { get; set; }
[Display(Name = "Mapping Use Deterministic Hash Code Unknown Face Key Value Pairs for Save Mapping"), Required] public bool? MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { get; set; }
[Display(Name = "Max Items In Distance Collection"), Required] public int? MaxItemsInDistanceCollection { get; set; }
@ -67,9 +65,11 @@ public class Configuration
[Display(Name = "Reverse"), Required] public bool? Reverse { get; set; }
[Display(Name = "Save Face Landmark For Output Resolutions"), Required] public string[] SaveFaceLandmarkForOutputResolutions { get; set; }
[Display(Name = "Save Full Year Of Random Files"), Required] public bool? SaveFullYearOfRandomFiles { get; set; }
[Display(Name = "Save Mapped"), Required] public string[] SaveMappedForOutputResolutions { get; set; }
[Display(Name = "Save Not Mapped"), Required] public string[] SaveNotMappedForOutputResolutions { get; set; }
[Display(Name = "Save Resized Images by Person Key Formatted"), Required] public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; }
[Display(Name = "Save Resized Subfiles"), Required] public bool? SaveResizedSubfiles { get; set; }
[Display(Name = "Save Shortcuts"), Required] public string[] SaveShortcutsForOutputResolutions { get; set; }
[Display(Name = "Skip Search"), Required] public bool? SkipSearch { get; set; }
[Display(Name = "Sorting Days Delta Tolerance"), Required] public int? SortingDaysDeltaTolerance { get; set; }
[Display(Name = "SortingMaximumPerFaceShould be High"), Required] public int? SortingMaximumPerFaceShouldBeHigh { get; set; }
@ -137,10 +137,6 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.LocationFactor));
if (configuration.MappingDefaultName is null)
throw new NullReferenceException(nameof(configuration.MappingDefaultName));
if (configuration.MappingSaveMapped is null)
throw new NullReferenceException(nameof(configuration.MappingSaveMapped));
if (configuration.MappingSaveNotMapped is null)
throw new NullReferenceException(nameof(configuration.MappingSaveNotMapped));
if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping is null)
throw new NullReferenceException(nameof(configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping));
if (configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping is null)
@ -187,6 +183,10 @@ public class Configuration
throw new NullReferenceException(nameof(configuration.Reverse));
if (configuration.SaveFaceLandmarkForOutputResolutions is null)
configuration.SaveFaceLandmarkForOutputResolutions = Array.Empty<string>();
if (configuration.SaveMappedForOutputResolutions is null)
configuration.SaveMappedForOutputResolutions = Array.Empty<string>();
if (configuration.SaveNotMappedForOutputResolutions is null)
configuration.SaveNotMappedForOutputResolutions = Array.Empty<string>();
if (configuration.SaveFullYearOfRandomFiles is null)
throw new NullReferenceException(nameof(configuration.SaveFullYearOfRandomFiles));
if (configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions is null)
@ -239,8 +239,6 @@ public class Configuration
configuration.LocationFactor.Value,
configuration.MappedMaxIndex,
configuration.MappingDefaultName,
configuration.MappingSaveNotMapped.Value,
configuration.MappingSaveMapped.Value,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping.Value,
configuration.MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping.Value,
configuration.MaxItemsInDistanceCollection.Value,
@ -269,9 +267,11 @@ public class Configuration
configuration.Reverse.Value,
configuration.SaveFaceLandmarkForOutputResolutions,
configuration.SaveFullYearOfRandomFiles.Value,
configuration.SaveMappedForOutputResolutions,
configuration.SaveNotMappedForOutputResolutions,
configuration.SaveResizedImagesByPersonKeyFormattedForOutputResolutions,
configuration.SaveShortcutsForOutputResolutions,
configuration.SaveResizedSubfiles.Value,
configuration.SaveShortcutsForOutputResolutions,
configuration.SkipSearch.Value,
configuration.SortingDaysDeltaTolerance.Value,
configuration.SortingMaximumPerFaceShouldBeHigh.Value,

View File

@ -35,8 +35,6 @@ public class Configuration
public int LocationFactor { init; get; }
public int? MappedMaxIndex { init; get; }
public string MappingDefaultName { init; get; }
public bool MappingSaveNotMapped { init; get; }
public bool MappingSaveMapped { init; get; }
public bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping { init; get; }
public bool MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping { init; get; }
public int MaxItemsInDistanceCollection { init; get; }
@ -65,9 +63,11 @@ public class Configuration
public bool Reverse { init; get; }
public string[] SaveFaceLandmarkForOutputResolutions { init; get; }
public bool SaveFullYearOfRandomFiles { init; get; }
public string[] SaveMappedForOutputResolutions { init; get; }
public string[] SaveNotMappedForOutputResolutions { init; get; }
public string[] SaveResizedImagesByPersonKeyFormattedForOutputResolutions { init; get; }
public string[] SaveShortcutsForOutputResolutions { init; get; }
public bool SaveResizedSubfiles { init; get; }
public string[] SaveShortcutsForOutputResolutions { init; get; }
public bool SkipSearch { init; get; }
public int SortingDaysDeltaTolerance { init; get; }
public int SortingMaximumPerFaceShouldBeHigh { init; get; }
@ -104,8 +104,6 @@ public class Configuration
int locationFactor,
int? mappedMaxIndex,
string mappingDefaultName,
bool mappingSaveNotMapped,
bool mappingSaveMapped,
bool mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping,
bool mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping,
int maxItemsInDistanceCollection,
@ -134,9 +132,11 @@ public class Configuration
bool reverse,
string[] saveFaceLandmarkForOutputResolutions,
bool saveFullYearOfRandomFiles,
string[] saveMappedForOutputResolutions,
string[] saveNotMappedForOutputResolutions,
string[] saveResizedImagesByPersonKeyFormattedForOutputResolutions,
string[] saveShortcutsForOutputResolutions,
bool saveResizedSubfiles,
string[] saveShortcutsForOutputResolutions,
bool skipSearch,
int sortingDaysDeltaTolerance,
int sortingMaximumPerFaceShouldBeHigh,
@ -172,8 +172,6 @@ public class Configuration
LocationFactor = locationFactor;
MappedMaxIndex = mappedMaxIndex;
MappingDefaultName = mappingDefaultName;
MappingSaveNotMapped = mappingSaveNotMapped;
MappingSaveMapped = mappingSaveMapped;
MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping = mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping;
MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping = mappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping;
MaxItemsInDistanceCollection = maxItemsInDistanceCollection;
@ -202,9 +200,11 @@ public class Configuration
Reverse = reverse;
SaveFaceLandmarkForOutputResolutions = saveFaceLandmarkForOutputResolutions;
SaveFullYearOfRandomFiles = saveFullYearOfRandomFiles;
SaveMappedForOutputResolutions = saveMappedForOutputResolutions;
SaveNotMappedForOutputResolutions = saveNotMappedForOutputResolutions;
SaveResizedImagesByPersonKeyFormattedForOutputResolutions = saveResizedImagesByPersonKeyFormattedForOutputResolutions;
SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions;
SaveResizedSubfiles = saveResizedSubfiles;
SaveShortcutsForOutputResolutions = saveShortcutsForOutputResolutions;
SkipSearch = skipSearch;
SortingDaysDeltaTolerance = sortingDaysDeltaTolerance;
SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh;

View File

@ -43,7 +43,7 @@ internal class F_Random
return result;
}
internal void Random(Property.Models.Configuration configuration, string outputResolution, List<KeyValuePair<string, string>> fileKeyValuePairs)
internal void Random(Property.Models.Configuration configuration, string outputResolution, List<Shared.Models.MappingFromItem> mappingFromItemCollection)
{
string json;
string jsonFile;
@ -55,12 +55,14 @@ internal class F_Random
string[] files = Directory.GetFiles(fRandomCollectionDirectory, "*", SearchOption.TopDirectoryOnly);
foreach (string file in files)
File.Delete(file);
foreach (KeyValuePair<string, string> keyValuePair in fileKeyValuePairs)
foreach (Shared.Models.MappingFromItem mappingFromItem in mappingFromItemCollection)
{
if (!_Configuration.IgnoreRelativePaths.Any(l => keyValuePair.Key.Contains(l)) || !IsIgnoreRelativePath(keyValuePair.Key))
relativePaths.Add(keyValuePair.Value);
if (mappingFromItem.ImageFileHolder.DirectoryName is null)
continue;
if (!_Configuration.IgnoreRelativePaths.Any(l => mappingFromItem.ImageFileHolder.DirectoryName.Contains(l)) || !IsIgnoreRelativePath(mappingFromItem.ImageFileHolder.DirectoryName))
relativePaths.Add(mappingFromItem.RelativePath);
else
ignoreRelativePaths.Add(keyValuePair.Value);
ignoreRelativePaths.Add(mappingFromItem.RelativePath);
}
if (relativePaths.Any())
{

View File

@ -140,8 +140,9 @@ public class G_Index : Shared.Models.Properties.IIndex, IIndex
}
}
internal void SetIndex(Property.Models.Configuration configuration, string outputResolution, Dictionary<string, List<Tuple<string, Shared.Models.Property>>> filePropertiesKeyValuePairs)
internal void SetIndex(Property.Models.Configuration configuration, string outputResolution)
{
Dictionary<string, List<Tuple<string, Shared.Models.Property>>> filePropertiesKeyValuePairs = new();
FileInfo fileInfo;
G_Index indexInfo;
string parentCheck;

View File

@ -75,8 +75,6 @@
"MappedMaxIndex": 1034720,
"MappingDefaultName": "John Doe~25",
"MappingSaveFaceEncoding": false,
"MappingSaveMapped": false,
"MappingSaveNotMapped": false,
"MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping": false,
"MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping": false,
"MaxImagesInDirectoryForTopLevelFirstPass": 10,
@ -146,8 +144,12 @@
"176 x 176",
"256 x 256"
],
"SaveMappedForOutputResolutions": [],
"SaveNotMappedForOutputResolutions": [],
"SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [],
"SaveShortcutsForOutputResolutions": [],
"SaveShortcutsForOutputResolutions": [
"7680 x 4320"
],
"ValidImageFormatExtensions": [
".bmp",
".BMP",

View File

@ -75,8 +75,6 @@
"MappedMaxIndex": 1034720,
"MappingDefaultName": "John Doe~25",
"MappingSaveFaceEncoding": false,
"MappingSaveMapped": false,
"MappingSaveNotMapped": false,
"MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping": false,
"MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping": false,
"MaxImagesInDirectoryForTopLevelFirstPass": 10,
@ -136,6 +134,8 @@
"176 x 176",
"256 x 256"
],
"SaveMappedForOutputResolutions": [],
"SaveNotMappedForOutputResolutions": [],
"SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [
"1920 x 1080"
],

View File

@ -75,8 +75,6 @@
"MappedMaxIndex": 1034720,
"MappingDefaultName": "John Doe~25",
"MappingSaveFaceEncoding": false,
"MappingSaveMapped": false,
"MappingSaveNotMapped": false,
"MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForAddToMapping": false,
"MappingUseDeterministicHashCodeUnknownFaceKeyValuePairsForSaveMapping": false,
"MaxImagesInDirectoryForTopLevelFirstPass": 10,
@ -145,6 +143,8 @@
"176 x 176",
"256 x 256"
],
"SaveMappedForOutputResolutions": [],
"SaveNotMappedForOutputResolutions": [],
"SaveResizedImagesByPersonKeyFormattedForOutputResolutions": [
"1920 x 1080"
],