# 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" } } }