// 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.

syntax = "proto2";

package mediapipe;

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

// A landmark that can have 1 to 3 dimensions. Use x for 1D points, (x, y) for
// 2D points and (x, y, z) for 3D points. For more dimensions, consider using
// matrix_data.proto.
message Landmark {
  optional float x = 1;
  optional float y = 2;
  optional float z = 3;

  // Landmark visibility. Should stay unset if not supported.
  // Float score of whether landmark is visible or occluded by other objects.
  // Landmark considered as invisible also if it is not present on the screen
  // (out of scene bounds). Depending on the model, visibility value is either a
  // sigmoid or an argument of sigmoid.
  optional float visibility = 4;

  // Landmark presence. Should stay unset if not supported.
  // Float score of whether landmark is present on the scene (located within
  // scene bounds). Depending on the model, presence value is either a result of
  // sigmoid or an argument of sigmoid function to get landmark presence
  // probability.
  optional float presence = 5;
}

// Group of Landmark protos.
message LandmarkList {
  repeated Landmark landmark = 1;
}

// Group of LandmarkList protos.
message LandmarkListCollection {
  repeated LandmarkList landmark_list = 1;
}

// A normalized version of above Landmark proto. All coordinates should be
// within [0, 1].
message NormalizedLandmark {
  optional float x = 1;
  optional float y = 2;
  optional float z = 3;
  optional float visibility = 4;
  optional float presence = 5;
}

// Group of NormalizedLandmark protos.
message NormalizedLandmarkList {
  repeated NormalizedLandmark landmark = 1;
}

// Group of NormalizedLandmarkList protos.
message NormalizedLandmarkListCollection {
  repeated NormalizedLandmarkList landmark_list = 1;
}
