syntax = "proto3"; package innovatrics.embedded.frame_data; import "google/protobuf/timestamp.proto"; message FrameData { // timestamp of the frame the message was generated for google.protobuf.Timestamp timestamp = 1; // incremental frame number uint64 frame_number = 2; // full frame image Image frame_image = 3; // vector of detected faces repeated FaceData face_data = 4; // vector of lost objects repeated LostObjectData lost_object_data = 5; // client_id (same as MQTT client ID) of the source camera/device which produced the message string client_id = 6; } message FaceData { // face detection data FaceDetectionData face_detection_data = 1; // face tracking data TrackingData face_tracking_data = 2; // face landmarks data repeated FaceLandmarkData landmarks_data = 3; // face mask status data optional FaceMaskData face_mask_data = 4; // cropping data optional CroppingData cropping_data = 5; // liveness detection data repeated LivenessData liveness_data = 6; // face template extraction optional TemplateData template_data = 7; // face identification repeated IdentificationData identification_data = 8; } message FaceDetectionData { // bounding box of detected face BoundingBox bounding_box = 1; // normalized value detection confidence of detected face - range <0,1> float detection_confidence = 2; // raw value of detection confidence of detected face - range <0,1> float raw_detection_confidence = 3; } message TrackingData { // tracking ID (ByteTrack) assigned to detected object uint32 tracking_id = 1; // tracking UUID assigned to detected object string tracking_uuid = 2; // tracking state (ByteTrack) of detected object TrackingState tracking_state = 3; } message FaceLandmarkData { // type of the keypoint detected in the face FaceKeypointType keypoint_type = 1; // confidence of the keypoint detected in the face - range <0,1> float confidence = 2; // X coordinate of the keypoint relative to full frame - range <0,1> float x = 3; // Y coordinate of the keypoint relative to full frame - range <0,1> float y = 4; } message FaceMaskData { // face mask detection confidence - range <0,1> float confidence = 1; } message CroppingData { // extension of the crop image specified in settings uint32 crop_extension = 1; // bounding box of the crop optional BoundingBox crop_box = 2; // crop image of detected object optional Image crop_image = 3; } message LivenessData { // type of liveness detection algorithm LivenessType liveness_type = 1; // liveness detection score float score = 2; } message TemplateData { bytes template = 1; } message IdentificationData { // user id uint32 id = 1; // user name string name = 2; // match score float score = 3; } message Image { // width of the image - absolute value uint32 width = 1; // height of the image - absolute value uint32 height = 2; // image data in specified format optional bytes data = 3; // format of the image data specified in settings ImageFormat image_format = 4; } // image format enumeration enum ImageFormat { // default RawBgr = 0; // Jpeg Jpeg = 1; // Png Png = 2; } message BoundingBox { // X coordinate of left upper corner of bounding box relative to full frame - range <0,1> float x = 1; // Y coordinate of left upper corner of bounding box relative to full frame - range <0,1> float y = 2; // width of bounding box relative to width of full frame - range <0,1> float width = 3; // height of bounding box relative to height of full frame - range <0,1> float height = 4; } // tracking state enumeration (defined by ByteTrack) enum TrackingState { New = 0; Tracked = 1; Lost = 2; Removed = 3; } // face keypoint type enumeration enum FaceKeypointType { RightEyeOuterCorner = 0; RightEyeCentre = 1; RightEyeInnerCorner = 2; LeftEyeInnerCorner = 3; LeftEyeCentre = 4; LeftEyeOuterCorner = 5; NoseRoot = 6; NoseRightBottom = 7; NoseTip = 8; NoseLeftBottom = 9; NoseBottom = 10; MouthRightCorner = 11; MouthCenter = 12; MouthLeftCorner = 13; MouthUpperEdge = 14; MouthLowerEdge = 15; RightEyebrowOuterEnd = 16; RightEyebrowInnerEnd = 17; LeftEyebrowInnerEnd = 18; LeftEyebrowOuterEnd = 19; RightEdge = 20; ChinTip = 21; LeftEdge = 22; } // liveness detection algorithm enumeration enum LivenessType { // default Distant = 0; } message LostObjectData { // tracking UUID of the lost object string tracking_uuid = 1; // timestamp of the frame where the object appeared first time (New in ByteTrack) google.protobuf.Timestamp first_time_appeared = 2; // timestamp of the frame where ByteTrack change the tracking status of the object to Removed google.protobuf.Timestamp last_time_appeared = 3; // crop of best appearance of the object in tracklet - NOT SUPPORTED YET optional Image best_crop_image = 4; }