// Copyright 2019 The MediaPipe Authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// A protocol buffer encoding one or several detections in an image. A detection
// is defined by label and corresponding score, representing the classifier
// confidence for the label, and location, representing the spatial extent of
// the detection. All detections encoded by the protocol buffer relate to the
// same image location.

syntax = "proto2";

package mediapipe;

import "mediapipe/framework/formats/location_data.proto";

option java_package = "com.google.mediapipe.formats.proto";
option java_outer_classname = "DetectionProto";

message Detection {
  // i-th label or label_id has a score encoded by the i-th element in score.
  repeated string label = 1;
  repeated int32 label_id = 2 [packed = true];
  repeated float score = 3 [packed = true];

  // Location data corresponding to all detected labels above.
  optional LocationData location_data = 4;
  // Optional string to indicate the feature generation method. Useful in
  // associating a name to the pipeline used to generate this detection.
  optional string feature_tag = 5;
  // Optional string to specify track_id if detection is part of a track.
  optional string track_id = 6;

  // Optional unique id to help associate different Detections to each other.
  optional int64 detection_id = 7;
  // Useful for associating a detection with other detections based on the
  // detection_id. For example, this could be used to associate a face detection
  // with a body detection when they belong to the same person.
  message AssociatedDetection {
    optional int32 id = 1;
    optional float confidence = 2;
  }
  repeated AssociatedDetection associated_detections = 8;

  // Human-readable string for display, intended for debugging purposes. The
  // display name corresponds to the label (or label_id). This is optional.
  repeated string display_name = 9;

  // The timestamp (in microseconds) *at which* this detection was
  // created/detected.
  optional int64 timestamp_usec = 10;
}

// Group of Detection protos.
message DetectionList {
  repeated Detection detection = 1;
}
