GetModel
This commit is contained in:
parent
92288c9381
commit
9b9573093f
@ -287,7 +287,7 @@ public partial class DlibDotNet
|
||||
|
||||
private void FullParallelForWork(
|
||||
A_Property propertyLogic,
|
||||
Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToMappedFaceFilesWithCollection,
|
||||
Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers,
|
||||
string outputResolution,
|
||||
string bResultsFullGroupDirectory,
|
||||
string cResultsFullGroupDirectory,
|
||||
@ -380,7 +380,7 @@ public partial class DlibDotNet
|
||||
if (item.Property?.Id is null)
|
||||
collection = null;
|
||||
else
|
||||
_ = idToMappedFaceFilesWithCollection.TryGetValue(item.Property.Id.Value, out collection);
|
||||
_ = idToLocationContainers.TryGetValue(item.Property.Id.Value, out collection);
|
||||
if (!fileNameToCollection.TryGetValue(mappingFromItem.RelativePath[1..], out mappingFromPhotoPrismCollection))
|
||||
mappingFromPhotoPrismCollection = null;
|
||||
faces = _Faces.GetFaces(outputResolution, dResultsFullGroupDirectory, subFileTuples, parseExceptions, property, mappingFromItem, outputResolutionToResize, collection, mappingFromPhotoPrismCollection);
|
||||
@ -415,7 +415,7 @@ public partial class DlibDotNet
|
||||
|
||||
private int FullParallelWork(int maxDegreeOfParallelism,
|
||||
A_Property propertyLogic,
|
||||
Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToMappedFaceFilesWithCollection,
|
||||
Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers,
|
||||
string outputResolution,
|
||||
string bResultsFullGroupDirectory,
|
||||
string cResultsFullGroupDirectory,
|
||||
@ -459,7 +459,7 @@ public partial class DlibDotNet
|
||||
try
|
||||
{
|
||||
FullParallelForWork(propertyLogic,
|
||||
idToMappedFaceFilesWithCollection,
|
||||
idToLocationContainers,
|
||||
outputResolution,
|
||||
bResultsFullGroupDirectory,
|
||||
cResultsFullGroupDirectory,
|
||||
@ -646,7 +646,7 @@ public partial class DlibDotNet
|
||||
_Metadata.SetAngleBracketCollection(_Configuration.PropertyConfiguration, bResultsFullGroupDirectory, container.SourceDirectory);
|
||||
}
|
||||
|
||||
private void FullDoWork(string argZero, string propertyRoot, long ticks, A_Property propertyLogic, int t, Container[] containers, string eDistanceContentDirectory, Dictionary<string, List<MappingFromPhotoPrism>> fileNameToCollection, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToMappedFaceFilesWithCollection)
|
||||
private void FullDoWork(string argZero, string propertyRoot, long ticks, A_Property propertyLogic, int t, Container[] containers, string eDistanceContentDirectory, Dictionary<string, List<MappingFromPhotoPrism>> fileNameToCollection, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers)
|
||||
{
|
||||
if (_Log is null)
|
||||
throw new NullReferenceException(nameof(_Log));
|
||||
@ -702,7 +702,7 @@ public partial class DlibDotNet
|
||||
exceptionCount = FullParallelWork(
|
||||
maxDegreeOfParallelism,
|
||||
propertyLogic,
|
||||
idToMappedFaceFilesWithCollection,
|
||||
idToLocationContainers,
|
||||
outputResolution,
|
||||
bResultsFullGroupDirectory,
|
||||
cResultsFullGroupDirectory,
|
||||
@ -1189,10 +1189,10 @@ public partial class DlibDotNet
|
||||
return results;
|
||||
}
|
||||
|
||||
private static void LookForAbandoned(Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToMappedFaceFilesWithCollection, List<int> distinctFilteredIds)
|
||||
private static void LookForAbandoned(Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers, List<int> distinctFilteredIds)
|
||||
{
|
||||
List<string> renameCollection = new();
|
||||
foreach (KeyValuePair<int, List<LocationContainer<MetadataExtractor.Directory>>> idToCollection in idToMappedFaceFilesWithCollection)
|
||||
foreach (KeyValuePair<int, List<LocationContainer<MetadataExtractor.Directory>>> idToCollection in idToLocationContainers)
|
||||
{
|
||||
if (distinctFilteredIds.Contains(idToCollection.Key))
|
||||
continue;
|
||||
@ -1279,15 +1279,15 @@ public partial class DlibDotNet
|
||||
MapLogic? mapLogic = _Configuration.DistanceMoveUnableToMatch ? null : new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, ticks, _PersonContainers, a2PeopleSingletonDirectory, eDistanceContentDirectory, mapLogicSupport);
|
||||
personKeyToIds = mapLogic is null ? new() : mapLogic.GetPersonKeyToIds();
|
||||
fileNameToCollection = !Directory.Exists(fPhotoPrismSingletonDirectory) ? fileNameToCollection = new() : F_PhotoPrism.GetFileNameToCollection(fPhotoPrismSingletonDirectory);
|
||||
Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToMappedFaceFilesWithCollection = GetDictionary(ticks, a2PeopleContentDirectory, eDistanceContentDirectory);
|
||||
FullDoWork(argZero, propertyRoot, ticks, propertyLogic, t, containers, eDistanceContentDirectory, fileNameToCollection, idToMappedFaceFilesWithCollection);
|
||||
Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers = GetDictionary(ticks, a2PeopleContentDirectory, eDistanceContentDirectory);
|
||||
FullDoWork(argZero, propertyRoot, ticks, propertyLogic, t, containers, eDistanceContentDirectory, fileNameToCollection, idToLocationContainers);
|
||||
_Distance.Clear();
|
||||
mapLogic ??= new(_AppSettings.MaxDegreeOfParallelism, _Configuration.PropertyConfiguration, _MapConfiguration, ticks, _PersonContainers, a2PeopleSingletonDirectory, eDistanceContentDirectory, mapLogicSupport);
|
||||
SetMapping(fileNameToCollection, argZero, containers);
|
||||
if (!personKeyToIds.Any())
|
||||
personKeyToIds = mapLogic.GetPersonKeyToIds();
|
||||
(List<int> distinctFilteredIds, List<Shared.Models.Face> distinctFilteredFaces) = GetFilteredDistinct(argZero, containers);
|
||||
LookForAbandoned(idToMappedFaceFilesWithCollection, distinctFilteredIds);
|
||||
LookForAbandoned(idToLocationContainers, distinctFilteredIds);
|
||||
Mapping[] mappingCollection = MapLogicSupport.GetSelectedMappingCollection(distinctFilteredFaces);
|
||||
int totalNotMapped = mapLogic.UpdateMappingFromPerson(mappingCollection);
|
||||
if (a2PeopleContentDirectory is not null && false)
|
||||
@ -1297,7 +1297,7 @@ public partial class DlibDotNet
|
||||
if (_PropertyRootExistedBefore || container is not null)
|
||||
break;
|
||||
if (!string.IsNullOrEmpty(a2PeopleContentDirectory) && _Configuration.SaveShortcutsForOutputResolutions.Contains(outputResolution))
|
||||
mapLogic.SaveShortcutsForOutputResolutions(a2PeopleContentDirectory, personKeyToIds, mappingCollection, totalNotMapped);
|
||||
mapLogic.SaveShortcutsForOutputResolutions(a2PeopleContentDirectory, personKeyToIds, idToLocationContainers, mappingCollection, totalNotMapped);
|
||||
if (!string.IsNullOrEmpty(a2PeopleContentDirectory) && _Configuration.SaveFilteredOriginalImagesFromJLinksForOutputResolutions.Contains(outputResolution))
|
||||
mapLogic.SaveFilteredOriginalImagesFromJLinks(_Configuration.JLinks, _PersonContainers, a2PeopleContentDirectory, personKeyToIds, mappingCollection, totalNotMapped);
|
||||
(aResultsFullGroupDirectory, bResultsFullGroupDirectory, cResultsFullGroupDirectory, dResultsFullGroupDirectory, d2ResultsFullGroupDirectory) = GetResultsFullGroupDirectories(outputResolution);
|
||||
|
@ -58,6 +58,8 @@ internal class F_Random
|
||||
continue;
|
||||
if (!idToPersonKeys.TryGetValue(mapping.MappingFromItem.Id, out personKeys))
|
||||
continue;
|
||||
if (Shared.Models.Stateless.Methods.IPersonBirthday.IsCounterPersonBirthday(mapping.MappingFromPerson.PersonBirthday))
|
||||
continue;
|
||||
if (!personKeys.Contains(mapping.MappingFromPerson.PersonBirthday.Value.Ticks))
|
||||
continue;
|
||||
personKey = mapping.MappingFromPerson.PersonBirthday.Value.Ticks;
|
||||
|
@ -43,5 +43,6 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Shared\View-by-Distance.Shared.csproj" />
|
||||
<ProjectReference Include="..\Metadata\Metadata.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -148,8 +148,6 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
if (personContainer.Key is null || personContainer.Birthdays is null || !personContainer.Birthdays.Any())
|
||||
continue;
|
||||
personBirthday = personContainer.Birthdays[zero];
|
||||
if (IPersonBirthday.IsCounterPersonBirthday(personBirthday))
|
||||
continue;
|
||||
personKey = personBirthday.Value.Ticks;
|
||||
if (!results.TryGetValue(personKey, out collection))
|
||||
{
|
||||
@ -1082,37 +1080,57 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
SaveContainers(totalNotMapped, null, saveContainers);
|
||||
}
|
||||
|
||||
public void SaveShortcutsForOutputResolutions(string a2PeopleContentDirectory, Dictionary<long, List<int>> personKeyToIds, Mapping[] mappingCollection, int totalNotMapped)
|
||||
public void SaveShortcutsForOutputResolutions(string a2PeopleContentDirectory, Dictionary<long, List<int>> personKeyToIds, Dictionary<int, List<LocationContainer<MetadataExtractor.Directory>>> idToLocationContainers, Mapping[] mappingCollection, int totalNotMapped)
|
||||
{
|
||||
if (_Configuration is null)
|
||||
throw new NullReferenceException(nameof(_Configuration));
|
||||
string? model;
|
||||
long personKey;
|
||||
string fileName;
|
||||
string directory;
|
||||
string hiddenFile;
|
||||
string personDirectory;
|
||||
List<long>? personKeys;
|
||||
string personKeyFormatted;
|
||||
WindowsShortcut windowsShortcut;
|
||||
IReadOnlyList<MetadataExtractor.Directory> directories;
|
||||
List<SaveShortcutsForOutputResolutions> collection = new();
|
||||
List<LocationContainer<MetadataExtractor.Directory>>? locationContainers;
|
||||
Dictionary<int, List<long>> idToPersonKeys = Stateless.Methods.IMapLogic.GetIdToPersonKeys(personKeyToIds);
|
||||
foreach (Mapping mapping in mappingCollection)
|
||||
{
|
||||
if (mapping.MappingFromItem.ImageFileHolder.DirectoryName is null || mapping.MappingFromPerson is null)
|
||||
continue;
|
||||
if (!idToLocationContainers.TryGetValue(mapping.MappingFromItem.Id, out locationContainers) || !locationContainers.Any())
|
||||
directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(mapping.MappingFromItem.ResizedFileHolder.FullName);
|
||||
else
|
||||
{
|
||||
directories = locationContainers.First().Directories;
|
||||
model = Metadata.Models.Stateless.Methods.IMetadata.GetModel(directories);
|
||||
if (model is null)
|
||||
directories = MetadataExtractor.ImageMetadataReader.ReadMetadata(mapping.MappingFromItem.ResizedFileHolder.FullName);
|
||||
}
|
||||
model = Metadata.Models.Stateless.Methods.IMetadata.GetModel(directories);
|
||||
if (!string.IsNullOrEmpty(model) && !string.IsNullOrEmpty(model.Trim()))
|
||||
{
|
||||
directory = Path.Combine(a2PeopleContentDirectory, "Model Shortcuts", model, Path.GetFileName(mapping.MappingFromItem.ImageFileHolder.DirectoryName));
|
||||
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}.lnk");
|
||||
collection.Add(new(mapping.MappingFromItem.ImageFileHolder.FullName, directory, mapping.MappingFromItem.MinimumDateTime, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey));
|
||||
}
|
||||
if (!idToPersonKeys.TryGetValue(mapping.MappingFromItem.Id, out personKeys))
|
||||
continue;
|
||||
personKey = mapping.MappingFromPerson.PersonBirthday.Value.Ticks;
|
||||
if (!personKeys.Contains(mapping.MappingFromPerson.PersonBirthday.Value.Ticks))
|
||||
continue;
|
||||
personKeyFormatted = IPersonBirthday.GetFormatted(_Configuration.PersonBirthdayFormat, mapping.MappingFromPerson.PersonBirthday);
|
||||
directory = Path.Combine(a2PeopleContentDirectory, $"{_PropertyConfiguration.ResultAllInOne}Shortcuts", personKeyFormatted);
|
||||
personDirectory = Path.Combine(directory, mapping.MappingFromPerson.DisplayDirectoryName[..1], Path.GetFileName(mapping.MappingFromItem.ImageFileHolder.DirectoryName));
|
||||
fileName = Path.Combine(personDirectory, $"{mapping.MappingFromItem.ResizedFileHolder.Name}.lnk");
|
||||
collection.Add(new(mapping.MappingFromItem.ResizedFileHolder.FullName, personDirectory, mapping.MappingFromItem.MinimumDateTime, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey));
|
||||
directory = Path.Combine(a2PeopleContentDirectory, "Person Key Shortcuts", personKeyFormatted, Path.GetFileName(mapping.MappingFromItem.ImageFileHolder.DirectoryName));
|
||||
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}.lnk");
|
||||
collection.Add(new(mapping.MappingFromItem.ImageFileHolder.FullName, directory, mapping.MappingFromItem.MinimumDateTime, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey));
|
||||
directory = Path.Combine(a2PeopleContentDirectory, "Name Shortcuts", mapping.MappingFromPerson.DisplayDirectoryName, Path.GetFileName(mapping.MappingFromItem.ImageFileHolder.DirectoryName));
|
||||
fileName = Path.Combine(directory, $"{mapping.MappingFromItem.ImageFileHolder.Name}.lnk");
|
||||
collection.Add(new(mapping.MappingFromItem.ImageFileHolder.FullName, directory, mapping.MappingFromItem.MinimumDateTime, fileName, mapping.MappingFromLocation.DeterministicHashCodeKey));
|
||||
}
|
||||
string[] directories = (from l in collection select l.Directory).Distinct().ToArray();
|
||||
foreach (string d in directories)
|
||||
string[] distinctDirectories = (from l in collection select l.Directory).Distinct().ToArray();
|
||||
foreach (string d in distinctDirectories)
|
||||
{
|
||||
if (string.IsNullOrEmpty(d))
|
||||
continue;
|
||||
@ -1122,6 +1140,8 @@ public class MapLogic : Shared.Models.Methods.IMapLogic
|
||||
foreach (SaveShortcutsForOutputResolutions s in collection)
|
||||
{
|
||||
hiddenFile = $"{s.FileName}.lvs";
|
||||
if (File.Exists(hiddenFile))
|
||||
continue;
|
||||
File.WriteAllLines(hiddenFile, new string[] { s.FullName, s.Description });
|
||||
File.SetAttributes(hiddenFile, FileAttributes.Hidden);
|
||||
File.SetLastWriteTime(hiddenFile, s.DateTime);
|
||||
|
@ -8,6 +8,11 @@ public interface IMetadata
|
||||
static DateTime GetMinimumDateTime(DateTime?[] dateTimes, int year, IReadOnlyList<MetadataExtractor.Directory> directories) =>
|
||||
Metadata.GetMinimumDateTime(dateTimes, year, directories);
|
||||
|
||||
string? TestStatic_GetModel(IReadOnlyList<MetadataExtractor.Directory> directories) =>
|
||||
GetModel(directories);
|
||||
static string? GetModel(IReadOnlyList<MetadataExtractor.Directory> directories) =>
|
||||
Metadata.GetModel(directories);
|
||||
|
||||
string? TestStatic_GetFaceEncoding(IReadOnlyList<MetadataExtractor.Directory> directories) =>
|
||||
GetFaceEncoding(directories);
|
||||
static string? GetFaceEncoding(IReadOnlyList<MetadataExtractor.Directory> directories) =>
|
||||
|
@ -58,14 +58,14 @@ internal class Metadata
|
||||
DateTime result;
|
||||
DateTime dateTime;
|
||||
List<DateTime> results = (from l in dateTimes where l is not null select l.Value).ToList();
|
||||
ExifSubIfdDirectory? exifSubIfdDirectory = directories.OfType<ExifSubIfdDirectory>().FirstOrDefault();
|
||||
if (exifSubIfdDirectory is not null)
|
||||
ExifDirectoryBase? exifDirectoryBase = directories.OfType<ExifDirectoryBase>().FirstOrDefault();
|
||||
if (exifDirectoryBase is not null)
|
||||
{
|
||||
if (exifSubIfdDirectory.TryGetDateTime(ExifDirectoryBase.TagDateTime, out dateTime))
|
||||
if (exifDirectoryBase.TryGetDateTime(ExifDirectoryBase.TagDateTime, out dateTime))
|
||||
results.Add(dateTime);
|
||||
if (exifSubIfdDirectory.TryGetDateTime(ExifDirectoryBase.TagDateTimeDigitized, out dateTime))
|
||||
if (exifDirectoryBase.TryGetDateTime(ExifDirectoryBase.TagDateTimeDigitized, out dateTime))
|
||||
results.Add(dateTime);
|
||||
if (exifSubIfdDirectory.TryGetDateTime(ExifDirectoryBase.TagDateTimeOriginal, out dateTime))
|
||||
if (exifDirectoryBase.TryGetDateTime(ExifDirectoryBase.TagDateTimeOriginal, out dateTime))
|
||||
results.Add(dateTime);
|
||||
}
|
||||
AviDirectory? aviDirectory = directories.OfType<AviDirectory>().FirstOrDefault();
|
||||
@ -94,6 +94,17 @@ internal class Metadata
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static string? GetModel(IReadOnlyList<MetadataExtractor.Directory> directories)
|
||||
{
|
||||
string? result;
|
||||
ExifDirectoryBase? exifDirectoryBase = directories.OfType<ExifDirectoryBase>().FirstOrDefault();
|
||||
if (exifDirectoryBase is null)
|
||||
result = null;
|
||||
else
|
||||
result = exifDirectoryBase.GetString(ExifDirectoryBase.TagModel);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static int GetOrientation(List<KeyValuePair<string, string>> metadataCollection)
|
||||
{
|
||||
int result;
|
||||
|
Loading…
x
Reference in New Issue
Block a user