// Copyright (c) 2024 BioID GmbH // // Implementation of the JSON data transfer objects as defined with the BWS 3 // protobuf messages and used by the RESTful JSON API. // For a description of the elements please refer to the BWS 3 API reference // at https://developer.bioid.com/BWS/NewBws using System.Text.Json.Serialization; namespace BioID.BWS.Json { /// /// The LivenessDetection request object. See also /// /// RESTful JSON API LivenessDetection /// public class LivenessDetectionRequest { /// /// A list of one or two live images. If a second image is provided, the /// tags of these images can optionally be used for challenge-response. /// public List LiveImages { get; set; } = []; } /// /// The VideoLivenessDetection request object. See also /// /// RESTful JSON API VideoLivenessDetection /// public class VideoLivenessDetectionRequest { /// /// The binary input video data, base64 encoded. /// public string Video { get; set; } = string.Empty; } /// /// The LivenessDetection response object. See also /// /// RESTful JSON API LivenessDetection or /// /// RESTful JSON API VideoLivenessDetection. /// public class LivenessDetectionResponse { /// /// The status of the BWS job that processed the request. /// public JobStatus Status { get; set; } /// /// A list of errors that might have occurred while the request has been processed. /// public List Errors { get; set; } = []; /// /// The calculated image properties for each of the processed images. /// public List ImageProperties { get; set; } = []; /// /// The liveness decision made by BWS. /// public bool Live { get; set; } /// /// An informative liveness score (a value between 0.0 and 1.0) that /// reflects the confidence level of the live decision. /// The higher the score, the more likely the person is a live person. /// public double LivenessScore { get; set; } } /// /// The PhotoVerify request object. See also /// /// RESTful JSON API PhotoVerify /// public class PhotoVerifyRequest { /// /// A list of one or two live images. If two images are provided and /// liveness detection is not disabled, the tags of the second image /// can optionally be used for challenge-response. /// public List LiveImages { get; set; } = []; /// /// The ID-photo image. /// public required string Photo { get; set; } /// /// By default this API automatically calls into the LivenessDetection /// API with the provided. If you do not want to /// perform a liveness detection at all, simply set this flag to true. /// public bool DisableLivenessDetection { get; set; } } // see https://developer.bioid.com/bws/grpc/photoverify /// /// The PhotoVerify response object. See also /// /// RESTful JSON API PhotoVerify. /// public class PhotoVerifyResponse { /// /// The status of the BWS job that processed the request. /// public JobStatus Status { get; set; } /// /// A list of errors that might have occurred while the request has been processed. /// public List Errors { get; set; } = []; /// /// The calculated image properties for each of the provided live images /// in the given order. /// public List ImageProperties { get; set; } = []; /// /// The calculated image properties of the provided ID photo. /// public ImageProperties PhotoProperties { get; set; } = new(); /// /// The actual level of accuracy the specified photo complies with. /// We recommend not to accept verified persons with low verification levels. /// public AccuracyLevel VerificationLevel { get; set; } /// /// An informative verification score (a value between 0.0 and 1.0) that /// reflects the verification level. The higher the score, the more /// likely the live images and ID photo belong to the same person. /// If this score is exactly 0.0, it has not been calculated. /// public double VerificationScore { get; set; } /// /// The liveness decision mabe by BWS in case liveness detection is not disabled. /// public bool Live { get; set; } /// /// An informative liveness score (a value between 0.0 and 1.0) that /// reflects the confidence level of the live decision. /// The higher the score, the more likely the person is a live person. /// public double LivenessScore { get; set; } /// /// Verification accuracy levels. /// [JsonConverter(typeof(JsonStringEnumConverter))] public enum AccuracyLevel { NOT_RECOGNIZED = 0, LEVEL_1, LEVEL_2, LEVEL_3, LEVEL_4, LEVEL_5 } } /// /// Each API call returns a JobStatus /// to indicate, whether the job completed execution successfully or aborted due to any reason. /// [JsonConverter(typeof(JsonStringEnumConverter))] public enum JobStatus { SUCCEEDED = 0, FAULTED = 1, CANCELLED = 2 } /// /// An error /// reported by an API call during job processing. /// public class JobError { /// /// The error-code identifying the reported error message. /// The code is intended to uniquely identify this error. /// public string ErrorCode { get; set; } = string.Empty; /// /// The error message describing the error. /// This is a plain text message. It is in english by default. /// public string Message { get; set; } = string.Empty; } /// /// The ImageData /// object is used to send captured live images or loaded photo images to /// the BioID Web Service. /// Optionally some tags can be associated with each uploaded image. /// public class ImageData { /// /// The binary image data, base64 encoded. /// public required string Image { get; set; } /// /// Depending on the API, an image can be tagged to allow different usage scenarios. /// public List Tags { get; set; } = []; } /// /// The ImageProperties /// object contains the properties of an image as calculated by the /// BioID Web Service for a single input image of video frame. /// public class ImageProperties { /// /// Rotation of the input image. /// public int Rotated { get; set; } /// /// List of faces found in the image. /// public List Faces { get; set; } = []; /// /// An optionally calculated quality assessment score. /// public double QualityScore { get; set; } /// /// List of quality checks and other checks performed. /// public List QualityAssessments { get; set; } = []; /// /// Optional frame number. /// public int FrameNumber { get; set; } } /// /// Description of a /// face image quality check that has been performed. /// public class QualityAssessment { /// /// The quality check performed. /// public string Check { get; set; } = string.Empty; /// /// The outcome of the quality check. This is a score int the range between /// 0.0 and 1.0. The higher the value, the better the check was passed. /// public double Score { get; set; } /// /// A text with additional info about this quality assessment. /// public string Message { get; set; } = string.Empty; } /// /// The Face /// object describes some landmarks of a found face within an image together /// with some optional scores generated by additional DCNNs. /// /// /// Note that the face image is typically mirrored, i.e. the right eye is /// on the left side of the image and vice versa! /// public class Face { /// /// Position of the center of the left eye. /// public required PointD LeftEye { get; set; } /// /// Position of the center of the right eye. /// public required PointD RightEye { get; set; } /// /// A score in the range ]0.0, 1.0] for the probability that the /// detected face is from a live person. The higher the score, the more /// likely the person is a live person. A value of 0.0 indicates, that /// a liveness detection was not performed on this face yet (or failed). /// public double TextureLivenessScore { get; set; } /// /// A score in the range ]0.0, 1.0] for the probability that the face /// motion (calculated with the help of previous images) is a natural /// 3D motion. The higher the score, the more likely the motion is in 3D. /// A value of 0.0 indicates that this score has not been calculated. /// public double MotionLivenessScore { get; set; } /// /// Calculated movement direction of this face relative to the position /// of this face in a previous image in the range ]0, 360] degrees. /// A value of 0.0 indicates that no movement direction has been calculated. /// public double MovementDirection { get; set; } } /// /// Represents an ordered pair of double precision floating point x- and /// y-coordinates that defines a point in a two-dimensional plane. /// public class PointD { /// /// The x-coordinate of the point. /// public double X { get; set; } /// /// The y-coordinate of the point. /// public double Y { get; set; } } }