69 lines
2.2 KiB
Plaintext
69 lines
2.2 KiB
Plaintext
# MediaPipe graph that performs hands tracking on desktop with TensorFlow Lite
|
|
# on CPU.
|
|
# Used in the example in
|
|
# mediapipe/examples/desktop/hand_tracking:hand_tracking_tflite.
|
|
|
|
# max_queue_size limits the number of packets enqueued on any input stream
|
|
# by throttling inputs to the graph. This makes the graph only process one
|
|
# frame per time.
|
|
max_queue_size: 1
|
|
|
|
# Decodes an input video file into images and a video header.
|
|
node {
|
|
calculator: "OpenCvVideoDecoderCalculator"
|
|
input_side_packet: "INPUT_FILE_PATH:input_video_path"
|
|
output_stream: "VIDEO:input_video"
|
|
output_stream: "VIDEO_PRESTREAM:input_video_header"
|
|
}
|
|
|
|
# Generates side packet cotaining max number of hands to detect/track.
|
|
node {
|
|
calculator: "ConstantSidePacketCalculator"
|
|
output_side_packet: "PACKET:num_hands"
|
|
node_options: {
|
|
[type.googleapis.com/mediapipe.ConstantSidePacketCalculatorOptions]: {
|
|
packet { int_value: 2 }
|
|
}
|
|
}
|
|
}
|
|
|
|
# Detects/tracks hand landmarks.
|
|
node {
|
|
calculator: "HandLandmarkTrackingCpu"
|
|
input_stream: "IMAGE:input_video"
|
|
input_side_packet: "NUM_HANDS:num_hands"
|
|
output_stream: "LANDMARKS:landmarks"
|
|
output_stream: "HANDEDNESS:handedness"
|
|
output_stream: "PALM_DETECTIONS:multi_palm_detections"
|
|
output_stream: "HAND_ROIS_FROM_LANDMARKS:multi_hand_rects"
|
|
output_stream: "HAND_ROIS_FROM_PALM_DETECTIONS:multi_palm_rects"
|
|
}
|
|
|
|
# Subgraph that renders annotations and overlays them on top of the input
|
|
# images (see hand_renderer_cpu.pbtxt).
|
|
node {
|
|
calculator: "HandRendererSubgraph"
|
|
input_stream: "IMAGE:input_video"
|
|
input_stream: "DETECTIONS:multi_palm_detections"
|
|
input_stream: "LANDMARKS:landmarks"
|
|
input_stream: "HANDEDNESS:handedness"
|
|
input_stream: "NORM_RECTS:0:multi_palm_rects"
|
|
input_stream: "NORM_RECTS:1:multi_hand_rects"
|
|
output_stream: "IMAGE:output_video"
|
|
}
|
|
|
|
# Encodes the annotated images into a video file, adopting properties specified
|
|
# in the input video header, e.g., video framerate.
|
|
node {
|
|
calculator: "OpenCvVideoEncoderCalculator"
|
|
input_stream: "VIDEO:output_video"
|
|
input_stream: "VIDEO_PRESTREAM:input_video_header"
|
|
input_side_packet: "OUTPUT_FILE_PATH:output_video_path"
|
|
node_options: {
|
|
[type.googleapis.com/mediapipe.OpenCvVideoEncoderCalculatorOptions]: {
|
|
codec: "avc1"
|
|
video_format: "mp4"
|
|
}
|
|
}
|
|
}
|