CopyFacesAndSaveFaceLandmarkImage
This commit is contained in:
@ -327,7 +327,8 @@ public partial class DlibDotNet
|
||||
Item item,
|
||||
DateTime[] containerDateTimes,
|
||||
bool? isFocusRelativePath,
|
||||
bool? isIgnoreRelativePath)
|
||||
bool? isIgnoreRelativePath,
|
||||
string facePartsCollectionDirectory)
|
||||
{
|
||||
if (_Log is null)
|
||||
throw new NullReferenceException(nameof(_Log));
|
||||
@ -379,7 +380,6 @@ public partial class DlibDotNet
|
||||
item.SetResizedFileHolder(_Resize.FileNameExtension, resizedFileHolder);
|
||||
string facesDirectory = _Configuration.LoadOrCreateThenSaveImageFacesResultsForOutputResolutions.Contains(outputResolution) ? _Faces.GetFacesDirectory(dResultsFullGroupDirectory, item) : string.Empty;
|
||||
string facePartsDirectory = _Configuration.SaveFaceLandmarkForOutputResolutions.Contains(outputResolution) ? _FaceParts.GetFacePartsDirectory(_Configuration.PropertyConfiguration, dResultsFullGroupDirectory, item, includeNameWithoutExtension: true) : string.Empty;
|
||||
string facePartsCollectionDirectory = _Configuration.SaveFaceLandmarkForOutputResolutions.Contains(outputResolution) ? _FaceParts.GetFacePartsDirectory(_Configuration.PropertyConfiguration, dResultsFullGroupDirectory, item, includeNameWithoutExtension: false) : string.Empty;
|
||||
MappingFromItem mappingFromItem = Shared.Models.Stateless.Methods.IMappingFromItem.GetMappingFromItem(containerDateTimes, item, resizedFileHolder);
|
||||
(int metadataGroups, metadataCollection) = metadata.GetMetadataCollection(subFileTuples, parseExceptions, mappingFromItem);
|
||||
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
||||
@ -410,19 +410,21 @@ public partial class DlibDotNet
|
||||
faces = _Faces.GetFaces(outputResolution, dResultsFullGroupDirectory, subFileTuples, parseExceptions, property, mappingFromItem, outputResolutionToResize, collection, mappingFromPhotoPrismCollection);
|
||||
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
||||
ticks = LogDelta(ticks, nameof(D_Face.GetFaces));
|
||||
bool anyFacesSaved = _Faces.SaveFaces(dResultsFullGroupDirectory, subFileTuples, parseExceptions, mappingFromItem, facesDirectory, faces);
|
||||
List<(Shared.Models.Face, FileInfo?, string, bool Saved)> faceCollection = _Faces.SaveFaces(_FaceParts.FileNameExtension, dResultsFullGroupDirectory, subFileTuples, parseExceptions, mappingFromItem, facesDirectory, faces);
|
||||
SetMapping(idToLocationContainers, mapLogic, item, isFocusRelativePath, isIgnoreRelativePath, mappingFromItem, mappingFromPhotoPrismCollection, faces);
|
||||
if (_Configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions.Contains(outputResolution))
|
||||
_FaceParts.CopyFacesAndSaveFaceLandmarkImage(facePartsCollectionDirectory, mappingFromItem, faceCollection);
|
||||
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
||||
ticks = LogDelta(ticks, nameof(D_Face.SaveFaces));
|
||||
if ((_Configuration.DistanceMoveUnableToMatch || _Configuration.DistanceRenameToMatch)
|
||||
&& _Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution)
|
||||
&& !anyFacesSaved && collection is not null)
|
||||
&& collection is not null && faceCollection.All(l => !l.Saved))
|
||||
_Distance.LookForMatchFacesAndPossiblyRename(_Faces.FileNameExtension, eDistanceContentDirectory, mappingFromItem, faces, collection);
|
||||
SetMapping(idToLocationContainers, mapLogic, item, isFocusRelativePath, isIgnoreRelativePath, mappingFromItem, mappingFromPhotoPrismCollection, faces);
|
||||
if (_Configuration.SaveFaceLandmarkForOutputResolutions.Contains(outputResolution))
|
||||
{
|
||||
bool saveRotated = false;
|
||||
string sourceDirectorySegment = Property.Models.Stateless.IResult.GetRelativePath(_Configuration.PropertyConfiguration, container.SourceDirectory);
|
||||
_FaceParts.SaveFaceLandmarkImages(_Configuration.PropertyConfiguration, facePartsDirectory, facePartsCollectionDirectory, subFileTuples, parseExceptions, mappingFromItem, faces, saveRotated);
|
||||
_FaceParts.SaveFaceLandmarkImages(_Configuration.PropertyConfiguration, facePartsDirectory, subFileTuples, parseExceptions, mappingFromItem, faces, saveRotated);
|
||||
if (_AppSettings.MaxDegreeOfParallelism < 2)
|
||||
ticks = LogDelta(ticks, nameof(D2_FaceParts.SaveFaceLandmarkImages));
|
||||
}
|
||||
@ -443,6 +445,7 @@ public partial class DlibDotNet
|
||||
string cResultsFullGroupDirectory,
|
||||
string dResultsDateGroupDirectory,
|
||||
string dResultsFullGroupDirectory,
|
||||
string d2ResultsFullGroupDirectory,
|
||||
string eDistanceContentDirectory,
|
||||
List<Tuple<string, DateTime>> sourceDirectoryChanges,
|
||||
Dictionary<string, List<MappingFromPhotoPrism>> fileNameToCollection,
|
||||
@ -456,10 +459,11 @@ public partial class DlibDotNet
|
||||
ParallelOptions parallelOptions = new() { MaxDegreeOfParallelism = maxDegreeOfParallelism };
|
||||
DateTime[] containerDateTimes = Shared.Models.Stateless.Methods.IContainer.GetContainerDateTimes(filteredItems);
|
||||
ProgressBarOptions options = new() { ProgressCharacter = '─', ProgressBarOnBottom = true, DisableBottomPercentage = true };
|
||||
using ProgressBar progressBar = new(filteredItems.Length, message, options);
|
||||
string focusRelativePath = Path.GetFullPath(string.Concat(_Configuration.PropertyConfiguration.RootDirectory, _Configuration.FocusDirectory));
|
||||
bool? isFocusRelativePath = string.IsNullOrEmpty(_Configuration.FocusDirectory) ? null : container.SourceDirectory.StartsWith(focusRelativePath);
|
||||
bool? isIgnoreRelativePath = !_Configuration.IgnoreRelativePaths.Any() ? null : _Configuration.IgnoreRelativePaths.Any(l => container.SourceDirectory.Contains(l)) && Shared.Models.Stateless.Methods.IContainer.IsIgnoreRelativePath(_Configuration.PropertyConfiguration, _Configuration.IgnoreRelativePaths, container.SourceDirectory);
|
||||
string facePartsCollectionDirectory = _Configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions.Contains(outputResolution) || _Configuration.SaveFaceLandmarkForOutputResolutions.Contains(outputResolution) ? _FaceParts.GetFacePartsDirectory(_Configuration.PropertyConfiguration, d2ResultsFullGroupDirectory, item: filteredItems.First(), includeNameWithoutExtension: false) : string.Empty;
|
||||
using ProgressBar progressBar = new(filteredItems.Length, message, options);
|
||||
_ = Parallel.For(0, filteredItems.Length, parallelOptions, (i, state) =>
|
||||
{
|
||||
try
|
||||
@ -480,7 +484,8 @@ public partial class DlibDotNet
|
||||
filteredItems[i],
|
||||
containerDateTimes,
|
||||
isFocusRelativePath,
|
||||
isIgnoreRelativePath);
|
||||
isIgnoreRelativePath,
|
||||
facePartsCollectionDirectory);
|
||||
if (i == 0 || sourceDirectoryChanges.Any())
|
||||
progressBar.Tick();
|
||||
}
|
||||
@ -626,6 +631,7 @@ public partial class DlibDotNet
|
||||
cResultsFullGroupDirectory,
|
||||
dResultsDateGroupDirectory,
|
||||
dResultsFullGroupDirectory,
|
||||
d2ResultsFullGroupDirectory,
|
||||
eDistanceContentDirectory,
|
||||
sourceDirectoryChanges,
|
||||
fileNameToCollection,
|
||||
|
@ -12,6 +12,7 @@ public class Configuration
|
||||
|
||||
[Display(Name = "Check D Face and Up Dates"), Required] public bool? CheckDFaceAndUpWriteDates { get; set; }
|
||||
[Display(Name = "Check Json For Distance Results"), Required] public bool? CheckJsonForDistanceResults { get; set; }
|
||||
[Display(Name = "Copy Faces and Face Landmark for Output Resolutions"), Required] public string[] CopyFacesAndSaveFaceLandmarkForOutputResolutions { get; set; }
|
||||
[Display(Name = "CrossDirectory Max Items In Distance Collection"), Required] public int? CrossDirectoryMaxItemsInDistanceCollection { get; set; }
|
||||
[Display(Name = "Delete Possible Duplicates"), Required] public bool? DeletePossibleDuplicates { get; set; }
|
||||
[Display(Name = "Distance Factor"), Required] public int? DistanceFactor { get; set; }
|
||||
@ -101,6 +102,7 @@ public class Configuration
|
||||
throw new NullReferenceException(nameof(configuration.CheckDFaceAndUpWriteDates));
|
||||
if (configuration.CheckJsonForDistanceResults is null)
|
||||
throw new NullReferenceException(nameof(configuration.CheckJsonForDistanceResults));
|
||||
configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions ??= Array.Empty<string>();
|
||||
if (configuration.CrossDirectoryMaxItemsInDistanceCollection is null)
|
||||
throw new NullReferenceException(nameof(configuration.CrossDirectoryMaxItemsInDistanceCollection));
|
||||
if (configuration.DeletePossibleDuplicates is null)
|
||||
@ -225,6 +227,7 @@ public class Configuration
|
||||
result = new(configuration.PropertyConfiguration,
|
||||
configuration.CheckDFaceAndUpWriteDates.Value,
|
||||
configuration.CheckJsonForDistanceResults.Value,
|
||||
configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions,
|
||||
configuration.CrossDirectoryMaxItemsInDistanceCollection.Value,
|
||||
configuration.DeletePossibleDuplicates.Value,
|
||||
configuration.DistanceFactor.Value,
|
||||
|
@ -11,6 +11,7 @@ public class Configuration
|
||||
|
||||
public bool CheckDFaceAndUpWriteDates { init; get; }
|
||||
public bool CheckJsonForDistanceResults { init; get; }
|
||||
public string[] CopyFacesAndSaveFaceLandmarkForOutputResolutions { init; get; }
|
||||
public int CrossDirectoryMaxItemsInDistanceCollection { init; get; }
|
||||
public bool DeletePossibleDuplicates { get; internal set; }
|
||||
public int DistanceFactor { init; get; }
|
||||
@ -84,6 +85,7 @@ public class Configuration
|
||||
public Configuration(Property.Models.Configuration propertyConfiguration,
|
||||
bool checkDFaceAndUpWriteDates,
|
||||
bool checkJsonForDistanceResults,
|
||||
string[] copyFacesAndSaveFaceLandmarkForOutputResolutions,
|
||||
int crossDirectoryMaxItemsInDistanceCollection,
|
||||
bool deletePossibleDuplicates,
|
||||
int distanceFactor,
|
||||
@ -156,6 +158,7 @@ public class Configuration
|
||||
_PropertyConfiguration = propertyConfiguration;
|
||||
CheckDFaceAndUpWriteDates = checkDFaceAndUpWriteDates;
|
||||
CheckJsonForDistanceResults = checkJsonForDistanceResults;
|
||||
CopyFacesAndSaveFaceLandmarkForOutputResolutions = copyFacesAndSaveFaceLandmarkForOutputResolutions;
|
||||
CrossDirectoryMaxItemsInDistanceCollection = crossDirectoryMaxItemsInDistanceCollection;
|
||||
DeletePossibleDuplicates = deletePossibleDuplicates;
|
||||
DistanceFactor = distanceFactor;
|
||||
|
@ -28,10 +28,13 @@
|
||||
"RootDirectory": "D:/1) Images A/Images-45f4401",
|
||||
"xxxxxRootDirectory": "D:/1) Images A/Images-45f4401/Facebook/=2022.3 Facebook",
|
||||
"SaveSortingWithoutPerson": true,
|
||||
"xSkipOlderThanDays": null,
|
||||
"SkipOlderThanDays": 1800,
|
||||
"SkipOlderThanDays": null,
|
||||
"xSkipOlderThanDays": 2200,
|
||||
"CopyFacesAndSaveFaceLandmarkForOutputResolutions": [
|
||||
"Original"
|
||||
],
|
||||
"JLinks": [
|
||||
"Julie"
|
||||
"Mike Phares Jr"
|
||||
],
|
||||
"LoadOrCreateThenSaveDistanceResultsForOutputResolutions": [
|
||||
"Original"
|
||||
@ -60,8 +63,8 @@
|
||||
],
|
||||
"RangeFaceConfidence": [
|
||||
0,
|
||||
0.5,
|
||||
1.6
|
||||
0.8,
|
||||
2.4
|
||||
],
|
||||
"SaveFaceDistancesForOutputResolutions": [
|
||||
"Original"
|
||||
|
@ -116,6 +116,7 @@
|
||||
"TestDistanceResults": true,
|
||||
"UseFilterTries": 0,
|
||||
"WriteBitmapDataBytes": false,
|
||||
"CopyFacesAndSaveFaceLandmarkForOutputResolutions": [],
|
||||
"IgnoreExtensions": [
|
||||
".gif",
|
||||
".GIF",
|
||||
|
Reference in New Issue
Block a user