FaceFile for D2
This commit is contained in:
parent
7b00fcaae8
commit
924bd14c31
10
.vscode/tasks.json
vendored
10
.vscode/tasks.json
vendored
@ -13,6 +13,16 @@
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "Format-Whitespaces",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"format",
|
||||
"whitespace"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
},
|
||||
{
|
||||
"label": "User Secrets Set",
|
||||
"command": "dotnet",
|
||||
|
11
Shared/Models/FaceEncoding.cs
Normal file
11
Shared/Models/FaceEncoding.cs
Normal file
@ -0,0 +1,11 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record FaceEncoding(double[] RawEncoding, int Size);
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = false)]
|
||||
[JsonSerializable(typeof(FaceEncoding))]
|
||||
public partial class FaceEncodingGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
33
Shared/Models/FaceFile.cs
Normal file
33
Shared/Models/FaceFile.cs
Normal file
@ -0,0 +1,33 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record FaceFile(int? AreaPermyriad,
|
||||
int? ConfidencePercent,
|
||||
string? DMS,
|
||||
DateTime DateTime,
|
||||
FaceEncoding? FaceEncoding,
|
||||
Dictionary<Stateless.FacePart, FacePoint[]>? FaceParts,
|
||||
Location? Location,
|
||||
string? Maker,
|
||||
MappingFromPerson? MappingFromPerson,
|
||||
string? Model,
|
||||
OutputResolution? OutputResolution);
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = false)]
|
||||
[JsonSerializable(typeof(FaceFile))]
|
||||
public partial class FaceFileGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = false, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
||||
[JsonSerializable(typeof(FaceFile[]))]
|
||||
public partial class FaceFileCollectionGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)]
|
||||
[JsonSerializable(typeof(FaceFile[]))]
|
||||
public partial class FaceFileCollectionWriteIndentedGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
39
Shared/Models/FacePoint.cs
Normal file
39
Shared/Models/FacePoint.cs
Normal file
@ -0,0 +1,39 @@
|
||||
using System.Drawing;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
[method: JsonConstructor]
|
||||
public class FacePoint(int index, int x, int y) : Properties.IFacePoint
|
||||
{
|
||||
public int Index { get; } = index;
|
||||
public int X { get; } = x;
|
||||
public int Y { get; } = y;
|
||||
|
||||
private readonly Point _Point = new(x, y);
|
||||
|
||||
public override bool Equals(object? obj) => obj is FacePoint point && Equals(point);
|
||||
|
||||
#pragma warning disable IDE0070
|
||||
public override int GetHashCode()
|
||||
#pragma warning restore IDE0070
|
||||
{
|
||||
int hashCode = 1861411795;
|
||||
hashCode = (hashCode * -1521134295) + _Point.GetHashCode();
|
||||
hashCode = (hashCode * -1521134295) + Index.GetHashCode();
|
||||
return hashCode;
|
||||
}
|
||||
|
||||
public bool Equals(FacePoint? facePoint)
|
||||
{
|
||||
return facePoint is not null
|
||||
&& X == facePoint.X
|
||||
&& Y == facePoint.Y
|
||||
&& Index == facePoint.Index;
|
||||
}
|
||||
|
||||
public static bool operator ==(FacePoint point1, FacePoint point2) => point1.Equals(point2);
|
||||
|
||||
public static bool operator !=(FacePoint point1, FacePoint point2) => !(point1 == point2);
|
||||
|
||||
}
|
42
Shared/Models/Location.cs
Normal file
42
Shared/Models/Location.cs
Normal file
@ -0,0 +1,42 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
[method: JsonConstructor]
|
||||
public class Location(int bottom, double confidence, int left, int right, int top) : Properties.ILocation, IEquatable<Location>
|
||||
{
|
||||
|
||||
public int Bottom { init; get; } = bottom;
|
||||
public double Confidence { init; get; } = confidence;
|
||||
public int Left { init; get; } = left;
|
||||
public int Right { init; get; } = right;
|
||||
public int Top { init; get; } = top;
|
||||
|
||||
public override bool Equals(object? obj) => Equals(obj as Location);
|
||||
|
||||
#pragma warning disable IDE0070
|
||||
public override int GetHashCode()
|
||||
#pragma warning restore IDE0070
|
||||
{
|
||||
int hashCode = -773114317;
|
||||
hashCode = (hashCode * -1521134295) + Bottom.GetHashCode();
|
||||
hashCode = (hashCode * -1521134295) + Left.GetHashCode();
|
||||
hashCode = (hashCode * -1521134295) + Right.GetHashCode();
|
||||
hashCode = (hashCode * -1521134295) + Top.GetHashCode();
|
||||
return hashCode;
|
||||
}
|
||||
|
||||
public bool Equals(Location? location)
|
||||
{
|
||||
return location is not null
|
||||
&& Bottom == location.Bottom
|
||||
&& Left == location.Left
|
||||
&& Right == location.Right
|
||||
&& Top == location.Top;
|
||||
}
|
||||
|
||||
public static bool operator ==(Location location1, Location location2) => EqualityComparer<Location>.Default.Equals(location1, location2);
|
||||
|
||||
public static bool operator !=(Location location1, Location location2) => !(location1 == location2);
|
||||
|
||||
}
|
24
Shared/Models/MappingFromPerson.cs
Normal file
24
Shared/Models/MappingFromPerson.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record MappingFromPerson(int? ApproximateYears,
|
||||
string DisplayDirectoryName,
|
||||
long PersonKey,
|
||||
string SegmentB)
|
||||
{
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
string result = JsonSerializer.Serialize(this, MappingFromPersonGenerationContext.Default.MappingFromPerson);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(MappingFromPerson))]
|
||||
public partial class MappingFromPersonGenerationContext : JsonSerializerContext
|
||||
{
|
||||
}
|
5
Shared/Models/OutputResolution.cs
Normal file
5
Shared/Models/OutputResolution.cs
Normal file
@ -0,0 +1,5 @@
|
||||
namespace View_by_Distance.Shared.Models;
|
||||
|
||||
public record OutputResolution(int Height,
|
||||
int Orientation,
|
||||
int Width);
|
10
Shared/Models/Properties/IFacePoint.cs
Normal file
10
Shared/Models/Properties/IFacePoint.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace View_by_Distance.Shared.Models.Properties;
|
||||
|
||||
public interface IFacePoint
|
||||
{
|
||||
|
||||
public int Index { get; }
|
||||
public int X { get; }
|
||||
public int Y { get; }
|
||||
|
||||
}
|
12
Shared/Models/Properties/ILocation.cs
Normal file
12
Shared/Models/Properties/ILocation.cs
Normal file
@ -0,0 +1,12 @@
|
||||
namespace View_by_Distance.Shared.Models.Properties;
|
||||
|
||||
public interface ILocation
|
||||
{
|
||||
|
||||
public int Bottom { init; get; }
|
||||
public double Confidence { init; get; }
|
||||
public int Left { init; get; }
|
||||
public int Right { init; get; }
|
||||
public int Top { init; get; }
|
||||
|
||||
}
|
54
Shared/Models/Stateless/FacePart.cs
Normal file
54
Shared/Models/Stateless/FacePart.cs
Normal file
@ -0,0 +1,54 @@
|
||||
namespace View_by_Distance.Shared.Models.Stateless;
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the part of face.
|
||||
/// </summary>
|
||||
public enum FacePart
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the chin.
|
||||
/// </summary>
|
||||
Chin = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the left eyebrow.
|
||||
/// </summary>
|
||||
LeftEyebrow = 17,
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the right eyebrow.
|
||||
/// </summary>
|
||||
RightEyebrow = 22,
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the nose bridge.
|
||||
/// </summary>
|
||||
NoseBridge = 27,
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the nose tip.
|
||||
/// </summary>
|
||||
NoseTip = 31,
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the left eye.
|
||||
/// </summary>
|
||||
LeftEye = 36,
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the right eye.
|
||||
/// </summary>
|
||||
RightEye = 42,
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the top lip.
|
||||
/// </summary>
|
||||
TopLip = 48,
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the bottom lip.
|
||||
/// </summary>
|
||||
BottomLip = 55
|
||||
|
||||
}
|
@ -13,6 +13,11 @@ public interface IDate
|
||||
static (int Season, string seasonName) GetSeason(int dayOfYear) =>
|
||||
XDate.GetSeason(dayOfYear);
|
||||
|
||||
(int Season, string seasonName) TestStatic_GetSeasonAB(int dayOfYear) =>
|
||||
GetSeasonAB(dayOfYear);
|
||||
static (int Season, string seasonName) GetSeasonAB(int dayOfYear) =>
|
||||
XDate.GetSeasonAB(dayOfYear);
|
||||
|
||||
DateTime? TestStatic_GetDateTimeOriginal(ExifDirectory exifDirectory) =>
|
||||
GetDateTimeOriginal(exifDirectory);
|
||||
static DateTime? GetDateTimeOriginal(ExifDirectory exifDirectory) =>
|
||||
|
@ -19,6 +19,22 @@ internal abstract class XDate
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static (int Season, string seasonName) GetSeasonAB(int dayOfYear)
|
||||
{
|
||||
(int Season, string seasonName) result = dayOfYear switch
|
||||
{
|
||||
< 78 => new(0, "WinterA"),
|
||||
< 124 => new(1, "SpringA"),
|
||||
< 171 => new(1, "SpringB"),
|
||||
< 217 => new(2, "SummerA"),
|
||||
< 264 => new(2, "SummerB"),
|
||||
< 309 => new(3, "FallA"),
|
||||
< 354 => new(3, "FallB"),
|
||||
_ => new(4, "WinterB")
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static (bool?, string[]) IsWrongYear(string[] segments, string year)
|
||||
{
|
||||
bool? result;
|
||||
|
Loading…
x
Reference in New Issue
Block a user