From f914fd35778be721c64bc1243b13ed7b963a4bde Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Sat, 31 Aug 2024 07:32:45 -0700 Subject: [PATCH] Tif support --- .gitignore | 1 + Face/Models/_D_Face.cs | 25 +++++++++++++++++++++---- Instance/.vscode/mklink.md | 5 +++++ Instance/DlibDotNet.cs | 10 ++++++---- Shared/Models/Stateless/Methods/Id.cs | 2 ++ 5 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 Instance/.vscode/mklink.md diff --git a/.gitignore b/.gitignore index fbfe420..ae27aae 100644 --- a/.gitignore +++ b/.gitignore @@ -470,3 +470,4 @@ globalStorage/ Shared/.kanbn .Immich/immich-assets.json +Instance/.vscode/.UserSecrets/* diff --git a/Face/Models/_D_Face.cs b/Face/Models/_D_Face.cs index 68189b8..c6df1bc 100644 --- a/Face/Models/_D_Face.cs +++ b/Face/Models/_D_Face.cs @@ -229,7 +229,7 @@ public class D_Face : IFaceD } } - private List GetFaces(string outputResolution, Shared.Models.Property property, MappingFromItem mappingFromItem, Dictionary outputResolutionToResize, List locations) + private List GetFaces(string outputResolution, string cResultsFullGroupDirectory, Shared.Models.Property property, MappingFromItem mappingFromItem, Dictionary outputResolutionToResize, List locations) { if (_PropertyConfiguration.NumberOfJitters is null) throw new NullReferenceException(nameof(_PropertyConfiguration.NumberOfJitters)); @@ -238,7 +238,24 @@ public class D_Face : IFaceD List results = []; FaceRecognitionDotNet.Image? unknownImage; try - { unknownImage = FaceRecognition.LoadImageFile(mappingFromItem.ResizedFileHolder.FullName); } + { + if (mappingFromItem.ResizedFileHolder.ExtensionLowered != ".tif") + unknownImage = FaceRecognition.LoadImageFile(mappingFromItem.ResizedFileHolder.FullName); + else + { + int outputQuality = 100; + string extension = ".png"; + string file = Path.Combine(cResultsFullGroupDirectory, $"{mappingFromItem.ResizedFileHolder.Name}{extension}"); + (ImageCodecInfo imageCodecInfo, EncoderParameters encoderParameters, string filenameExtension) = C_Resize.GetTuple(extension, outputQuality); +#pragma warning disable CA1416 + System.Drawing.Image image = System.Drawing.Image.FromFile(mappingFromItem.ResizedFileHolder.FullName); + image.Save(Path.Combine(cResultsFullGroupDirectory, $"{mappingFromItem.ResizedFileHolder.Name}{filenameExtension}"), imageCodecInfo, encoderParameters); + image.Dispose(); +#pragma warning restore CA1416 + unknownImage = FaceRecognition.LoadImageFile(file); + File.Delete(file); + } + } catch (Exception) { unknownImage = null; } if (unknownImage is not null) @@ -276,7 +293,7 @@ public class D_Face : IFaceD #pragma warning restore CA1416 - public List GetFaces(string outputResolution, string dResultsFullGroupDirectory, FilePath filePath, List> subFileTuples, List parseExceptions, Shared.Models.Property property, MappingFromItem mappingFromItem, Dictionary outputResolutionToResize, List? mappingFromPhotoPrismCollection) + public List GetFaces(string outputResolution, string cResultsFullGroupDirectory, string dResultsFullGroupDirectory, FilePath filePath, List> subFileTuples, List parseExceptions, Shared.Models.Property property, MappingFromItem mappingFromItem, Dictionary outputResolutionToResize, List? mappingFromPhotoPrismCollection) { List? results; if (string.IsNullOrEmpty(dResultsFullGroupDirectory)) @@ -325,7 +342,7 @@ public class D_Face : IFaceD locations = Shared.Models.Stateless.Methods.ILocation.GetLocations(results, mappingFromPhotoPrismCollection, _RectangleIntersectMinimum); if (results is null || locations.Count > 0) { - results = GetFaces(outputResolution, property, mappingFromItem, outputResolutionToResize, locations); + results = GetFaces(outputResolution, cResultsFullGroupDirectory, property, mappingFromItem, outputResolutionToResize, locations); if (results.Count == 0) File.Move(mappingFromItem.ResizedFileHolder.FullName, $"{mappingFromItem.ResizedFileHolder.FullName}.err"); else diff --git a/Instance/.vscode/mklink.md b/Instance/.vscode/mklink.md new file mode 100644 index 0000000..d227756 --- /dev/null +++ b/Instance/.vscode/mklink.md @@ -0,0 +1,5 @@ +# mklink + +```bash Sat Aug 17 2024 15:24:10 GMT-0700 (Mountain Standard Time) +mklink /J "L:\Git\View-by-Distance-MKLink-Console\Instance\.vscode\.UserSecrets" "C:\Users\mikep\AppData\Roaming\Microsoft\UserSecrets\2999dda1-5329-4d9f-9d68-cccfabe0e47f" +``` diff --git a/Instance/DlibDotNet.cs b/Instance/DlibDotNet.cs index 32b6129..09a241b 100644 --- a/Instance/DlibDotNet.cs +++ b/Instance/DlibDotNet.cs @@ -1166,10 +1166,12 @@ public partial class DlibDotNet : IDlibDotNet, IDisposable } if (resizedFileHolder.Exists && item.FilePath.HasIgnoreKeyword is not null && item.FilePath.HasIgnoreKeyword.Value != shouldIgnore.Value) { - if (item.FilePath.DirectoryName.Contains("Results") && item.FilePath.DirectoryName.Contains("Resize")) - File.Delete(resizedFileHolder.FullName); - else + if (!item.FilePath.DirectoryName.Contains("Results") || !item.FilePath.DirectoryName.Contains("Resize")) throw new NotSupportedException($"Rename File! <{item.FilePath.FileNameFirstSegment}>"); + else + { + File.Delete(resizedFileHolder.FullName); + } } } if (property is null || item.Property is null) @@ -1217,7 +1219,7 @@ public partial class DlibDotNet : IDlibDotNet, IDisposable if (!fileNameToCollection.TryGetValue(mappingFromItem.Id, out mappingFromPhotoPrismCollection)) mappingFromPhotoPrismCollection = null; bool move = _Configuration.DistanceMoveUnableToMatch || _Configuration.DistanceRenameToMatch && _Configuration.LoadOrCreateThenSaveDistanceResultsForOutputResolutions.Contains(outputResolution); - faces = _Faces.GetFaces(outputResolution, dResultsFullGroupDirectory, item.FilePath, subFileTuples, parseExceptions, property, mappingFromItem, outputResolutionToResize, mappingFromPhotoPrismCollection); + faces = _Faces.GetFaces(outputResolution, cResultsFullGroupDirectory, dResultsFullGroupDirectory, item.FilePath, subFileTuples, parseExceptions, property, mappingFromItem, outputResolutionToResize, mappingFromPhotoPrismCollection); result = GetNotMappedCountAndUpdateMappingFromPersonThenSetMapping(mapLogic, item, isFocusRelativePath, mappingFromItem, mappingFromPhotoPrismCollection, faces); List<(Shared.Models.Face, FileHolder?, string, bool Saved)> faceCollection = _Faces.SaveFaces(_FaceParts.FileNameExtension, dResultsFullGroupDirectory, item.FilePath, subFileTuples, parseExceptions, mappingFromItem, exifDirectory, faces); if (_Configuration.CopyFacesAndSaveFaceLandmarkForOutputResolutions.Contains(outputResolution)) diff --git a/Shared/Models/Stateless/Methods/Id.cs b/Shared/Models/Stateless/Methods/Id.cs index a0edf5b..be19d22 100644 --- a/Shared/Models/Stateless/Methods/Id.cs +++ b/Shared/Models/Stateless/Methods/Id.cs @@ -41,6 +41,8 @@ internal abstract class Id StringBuilder stringBuilder = new(); if (propertyConfiguration.IntMinValueLength < (propertyConfiguration.ResultAllInOneSubdirectoryLength + 2)) throw new NotSupportedException(); + if (hasDateTimeOriginal is null) + { } int key; string value; List resultAllInOneSubdirectoryChars = [];