BioroboticsLab / bb_binary

Binary Format for the BeesBook detections
Apache License 2.0
1 stars 3 forks source link

capnp schema needs better hive coordinates support #14

Open ktugan opened 7 years ago

ktugan commented 7 years ago

Current schema does only partially support stitched data. The orientation is besides hiveX and hiveY needed.

Suggestion: Put struct Stitched into DetectionsDP and DetectionsTruth. See below for implementation.

I also suggest removing hiveX and hiveY completely.

struct Stitched{
  xpos @1 :UInt16;               # x coordinate of the grid center wrt. the comb 
  ypos @2 :UInt16;               # y coordinate of the grid center wrt. the comb
  zRotation @5 :Float32;         # rotation of the grid in z plane
  yRotation @6 :Float32;         # rotation of the grid in y plane
  xRotation @7 :Float32;         # rotation of the grid in x plane
}
struct DetectionsDP{
  idx @0 :UInt16;                # sequential index of the detection, counted from 0 for every frame
                                 # the combination (idx, Frame.id) is a global key
  xpos @1 :UInt16;               # x coordinate of the grid center wrt. the image
  ypos @2 :UInt16;               # y coordinate of the grid center wrt. the image
  zRotation @5 :Float32;         # rotation of the grid in z plane
  yRotation @6 :Float32;         # rotation of the grid in y plane
  xRotation @7 :Float32;         # rotation of the grid in x plane
  radius @8 :Float32;            # radius of the tag
  localizerSaliency @9 :Float32; # saliency of the localizer network
  decodedId @10 :List(UInt8);    # the decoded id, the bit probabilities are discretised to 0-255.
                                 # p(first bit == 1) = decodedId[0] / 255
  descriptor @11 :List(UInt8);   # visual descriptor of the detection. ordered from most
                                 # significant eight bits to least significant eight bits.
   stitched @8 :Stitched; # the stitched data, optional
}

# Corresponds to an image in the video.
struct Frame {
  id @0 :UInt64;                 # global unique id of the frame
  dataSourceIdx @1:UInt32;       # the frame is from this data source
  frameIdx @6 :UInt32;           # sequential increasing index for every data source.
  timestamp @2 :Float64;         # unix time stamp of the frame
  timedelta @3 :UInt32;          # time difference between this frame and the frame before in microseconds
  detectionsUnion : union {
    detectionsCVP   @4 :List(DetectionCVP);   # detections format of the old computer vision pipeline
    detectionsDP    @5 :List(DetectionDP);    # detections format of the new deeppipeline
    detectionsTruth @7 :List(DetectionTruth); # detections format of ground truth data
  }
}

This should be done in conjunction with #15

timlandgraf commented 7 years ago

hiveX und hiveY sollen aus der jetzigen detectionsDP raus