LookForMatchFacesAndPossiblyRename for A2 People
This commit is contained in:
@ -38,11 +38,11 @@ public partial class E_Distance
|
||||
_DistanceMoveUnableToMatch = distanceMoveUnableToMatch;
|
||||
}
|
||||
|
||||
private void MoveUnableToMatch(string eDistanceContentDirectory, string mappedFaceFile, string mappedFaceFileName)
|
||||
private void MoveUnableToMatch(string eDistanceContentDirectory, string file, string fileName)
|
||||
{
|
||||
bool check;
|
||||
string? directoryName = Path.GetDirectoryName(mappedFaceFile);
|
||||
if (mappedFaceFileName is null || directoryName is null)
|
||||
string? directoryName = Path.GetDirectoryName(file);
|
||||
if (fileName is null || directoryName is null)
|
||||
check = false;
|
||||
else
|
||||
{
|
||||
@ -66,7 +66,7 @@ public partial class E_Distance
|
||||
if (string.IsNullOrEmpty(checkDirectoryName) || !directoryNames.Any() || !long.TryParse(directoryNames[^1][1..^1], out long directoryTicks))
|
||||
{
|
||||
check = false;
|
||||
File.Delete(mappedFaceFile);
|
||||
File.Delete(file);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -75,13 +75,13 @@ public partial class E_Distance
|
||||
checkDirectoryName = Path.Combine(checkDirectoryName, directoryNames[i]);
|
||||
if (!Directory.Exists(checkDirectoryName))
|
||||
_ = Directory.CreateDirectory(checkDirectoryName);
|
||||
File.Move(mappedFaceFile, Path.Combine(checkDirectoryName, mappedFaceFileName));
|
||||
File.Move(file, Path.Combine(checkDirectoryName, fileName));
|
||||
check = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (check)
|
||||
_Moved.Add(mappedFaceFile);
|
||||
_Moved.Add(file);
|
||||
}
|
||||
|
||||
private FaceDistanceContainer[] GetFaceDistanceContainers(MappingFromItem mappingFromItem, List<Face> filteredFaces)
|
||||
@ -189,7 +189,7 @@ public partial class E_Distance
|
||||
return results;
|
||||
}
|
||||
|
||||
private static FileInfo? CheckFileThenGetFileInfo(string facesFileNameExtension, MappingFromItem mappingFromItem, string mappedFaceFile, List<(Face, double?)> checkFaces)
|
||||
private static FileInfo? CheckFileThenGetFileInfo(string facesFileNameExtension, MappingFromItem mappingFromItem, string file, List<(Face, double?)> checkFaces)
|
||||
{
|
||||
FileInfo? result = null;
|
||||
string checkFile;
|
||||
@ -201,27 +201,27 @@ public partial class E_Distance
|
||||
break;
|
||||
if (face.FaceEncoding is null || face.Location is null || face.OutputResolution is null)
|
||||
throw new NotSupportedException();
|
||||
mappedFaceDirectory = Path.GetDirectoryName(mappedFaceFile);
|
||||
mappedFaceDirectory = Path.GetDirectoryName(file);
|
||||
if (mappedFaceDirectory is null)
|
||||
throw new NotSupportedException();
|
||||
deterministicHashCodeKey = Shared.Models.Stateless.Methods.IMapping.GetDeterministicHashCodeKey(mappingFromItem.Id, face.Location, Shared.Models.Stateless.ILocation.Digits, face.OutputResolution);
|
||||
checkFile = Path.Combine(mappedFaceDirectory, $"{deterministicHashCodeKey}{mappingFromItem.ImageFileHolder.ExtensionLowered}{facesFileNameExtension}");
|
||||
if (checkFile == mappedFaceFile)
|
||||
if (checkFile == file)
|
||||
continue;
|
||||
result = new FileInfo(checkFile);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private void AppendMatchingDuplicates(string mappedFaceFile, string[] matches)
|
||||
private void AppendMatchingDuplicates(string file, string[] matches)
|
||||
{
|
||||
string checkFile;
|
||||
FileInfo fileInfo = new(mappedFaceFile);
|
||||
FileInfo fileInfo = new(file);
|
||||
List<(long Length, string FullName)> collection = new();
|
||||
if (fileInfo.Exists)
|
||||
collection.Add(new(fileInfo.Length, fileInfo.FullName));
|
||||
lock (_DuplicateMappedFaceFiles)
|
||||
_DuplicateMappedFaceFiles.Add(mappedFaceFile);
|
||||
_DuplicateMappedFaceFiles.Add(file);
|
||||
foreach (string match in matches)
|
||||
{
|
||||
fileInfo = new(match);
|
||||
@ -269,34 +269,38 @@ public partial class E_Distance
|
||||
return results;
|
||||
}
|
||||
|
||||
public void LookForMatchFacesAndPossiblyRename(string facesFileNameExtension, string eDistanceContentDirectory, MappingFromItem mappingFromItem, List<Face> faces, List<(string MappedFaceFile, int NormalizedRectangle, IReadOnlyList<MetadataExtractor.Directory>? Directories)> collection)
|
||||
public void LookForMatchFacesAndPossiblyRename(string facesFileNameExtension, string eDistanceContentDirectory, MappingFromItem mappingFromItem, List<Face> faces, List<(bool c, string File, int NormalizedRectangle, IReadOnlyList<MetadataExtractor.Directory>? Directories)> collection)
|
||||
{
|
||||
string? json;
|
||||
string fileName;
|
||||
string[] matches;
|
||||
FileInfo? fileInfo;
|
||||
string mappedFaceFileName;
|
||||
List<(Face, double?)> checkFaces = new();
|
||||
Shared.Models.FaceEncoding? modelsFaceEncoding;
|
||||
Face[] filteredFaces = (from l in faces where l.FaceEncoding is not null && l.Location is not null && l.OutputResolution is not null select l).ToArray();
|
||||
if (filteredFaces.Length != faces.Count)
|
||||
checkFaces.Clear();
|
||||
foreach ((string mappedFaceFile, int normalizedRectangle, IReadOnlyList<MetadataExtractor.Directory>? directories) in collection)
|
||||
foreach ((bool fromDistanceContent, string file, int normalizedRectangle, IReadOnlyList<MetadataExtractor.Directory>? directories) in collection)
|
||||
{
|
||||
if (!filteredFaces.Any())
|
||||
break;
|
||||
if (_Renamed.Contains(mappedFaceFile))
|
||||
if (_Renamed.Contains(file))
|
||||
continue;
|
||||
mappedFaceFileName = Path.GetFileName(mappedFaceFile);
|
||||
if (_DuplicateMappedFaceFiles.Contains(mappedFaceFileName))
|
||||
fileName = Path.GetFileName(file);
|
||||
if (fromDistanceContent && _DuplicateMappedFaceFiles.Contains(fileName))
|
||||
continue;
|
||||
checkFaces.Clear();
|
||||
if (directories is null)
|
||||
throw new NullReferenceException(nameof(directories));
|
||||
{
|
||||
if (fromDistanceContent)
|
||||
throw new NullReferenceException(nameof(directories));
|
||||
continue;
|
||||
}
|
||||
json = Metadata.Models.Stateless.IMetadata.GetFaceEncoding(directories);
|
||||
if (json is null)
|
||||
{
|
||||
if (_DistanceMoveUnableToMatch)
|
||||
MoveUnableToMatch(eDistanceContentDirectory, mappedFaceFile, mappedFaceFileName);
|
||||
MoveUnableToMatch(eDistanceContentDirectory, file, fileName);
|
||||
continue;
|
||||
}
|
||||
checkFaces.AddRange(GetMatchingFacesByFaceEncoding(filteredFaces, json));
|
||||
@ -313,38 +317,41 @@ public partial class E_Distance
|
||||
if (!checkFaces.Any())
|
||||
{
|
||||
if (_DistanceMoveUnableToMatch)
|
||||
MoveUnableToMatch(eDistanceContentDirectory, mappedFaceFile, mappedFaceFileName);
|
||||
MoveUnableToMatch(eDistanceContentDirectory, file, fileName);
|
||||
continue;
|
||||
}
|
||||
if (checkFaces.Count != 1)
|
||||
{
|
||||
if (_DistanceMoveUnableToMatch)
|
||||
MoveUnableToMatch(eDistanceContentDirectory, mappedFaceFile, mappedFaceFileName);
|
||||
MoveUnableToMatch(eDistanceContentDirectory, file, fileName);
|
||||
continue;
|
||||
}
|
||||
fileInfo = CheckFileThenGetFileInfo(facesFileNameExtension, mappingFromItem, mappedFaceFile, checkFaces);
|
||||
fileInfo = CheckFileThenGetFileInfo(facesFileNameExtension, mappingFromItem, file, checkFaces);
|
||||
if (fileInfo is not null)
|
||||
{
|
||||
if (_DistanceRenameToMatch && fileInfo is not null)
|
||||
{
|
||||
if (fileInfo.Exists)
|
||||
File.Delete(fileInfo.FullName);
|
||||
File.Move(mappedFaceFile, fileInfo.FullName);
|
||||
_Renamed.Add(mappedFaceFile);
|
||||
File.Delete(file);
|
||||
else
|
||||
File.Move(file, fileInfo.FullName);
|
||||
_Renamed.Add(file);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (_AllMappedFaceFileNames.Contains(mappedFaceFileName))
|
||||
if (_AllMappedFaceFileNames.Contains(fileName))
|
||||
{
|
||||
lock (_AllMappedFaceFiles)
|
||||
matches = (from l in _AllMappedFaceFiles where l != mappedFaceFile && Path.GetFileName(l) == mappedFaceFileName select l).ToArray();
|
||||
if (matches.Any())
|
||||
AppendMatchingDuplicates(mappedFaceFile, matches);
|
||||
matches = (from l in _AllMappedFaceFiles where l != file && Path.GetFileName(l) == fileName select l).ToArray();
|
||||
if (fromDistanceContent && matches.Any())
|
||||
AppendMatchingDuplicates(file, matches);
|
||||
}
|
||||
if (!fromDistanceContent)
|
||||
continue;
|
||||
lock (_AllMappedFaceFiles)
|
||||
_AllMappedFaceFiles.Add(mappedFaceFile);
|
||||
_AllMappedFaceFiles.Add(file);
|
||||
lock (_AllMappedFaceFileNames)
|
||||
_AllMappedFaceFileNames.Add(mappedFaceFileName);
|
||||
_AllMappedFaceFileNames.Add(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user