# Decides what ROI to use for hand landmark prediction: either previous frame
# landmarks ROI or current frame re-crop ROI.

type: "HandTracking"

# Hand landmarks from the current frame. They will be memorized for tracking on
# the next frame. (NormalizedLandmarkList)
input_stream: "LANDMARKS:hand_landmarks"
# Hand re-crop ROI from the current frame. (NormalizedRect)
input_stream: "HAND_ROI_FROM_RECROP:hand_roi_from_recrop"
# Image size (width & height). (std::pair<int, int>)
input_stream: "IMAGE_SIZE:image_size"

# Hand tracking ROI. Which is either hand landmarks ROI from the previous frame
# if hand is still tracked, or hand re-crop ROI from the current frame
# othervise. (NormalizedRect)
output_stream: "HAND_TRACKING_ROI:hand_tracking_roi"

# Keeps track of hand landmarks from the previous frame.
node {
  calculator: "PreviousLoopbackCalculator"
  # TODO: check that loop works with image size instead of video.
  input_stream: "MAIN:image_size"
  input_stream: "LOOP:hand_landmarks"
  input_stream_info: {
    tag_index: "LOOP"
    back_edge: true
  }
  output_stream: "PREV_LOOP:prev_hand_landmarks"
}

# Gets hand landarmsk rect.
node {
  calculator: "HandLandmarksToRoi"
  input_stream: "LANDMARKS:prev_hand_landmarks"
  input_stream: "IMAGE_SIZE:image_size"
  output_stream: "ROI:prev_hand_landmarks_roi"
}

# Checks that all requirements for tracking are satisfied and use hand rectangle
# from the previous frame in that case. Otherwise - use hand re-crop rectangle
# from the current frame.
node {
  calculator: "RoiTrackingCalculator"
  input_stream: "PREV_LANDMARKS:prev_hand_landmarks"
  input_stream: "PREV_LANDMARKS_RECT:prev_hand_landmarks_roi"
  input_stream: "RECROP_RECT:hand_roi_from_recrop"
  input_stream: "IMAGE_SIZE:image_size"
  output_stream: "TRACKING_RECT:hand_tracking_roi"
  options: {
    [mediapipe.RoiTrackingCalculatorOptions.ext] {
      rect_requirements: {
        rotation_degrees: 40.0
        translation: 0.2
        # TODO: adjust scale for hand tracking.
        scale: 0.4
      }
      landmarks_requirements: {
        recrop_rect_margin: -0.1
      }
    }
  }
}
