# MediaPipe graph to extract geometry from face detection for multiple faces. # # It is required that "geometry_pipeline_metadata_detection.binarypb" is # available at # "mediapipe/modules/face_geometry/data/geometry_pipeline_metadata_detection.binarypb" # path during execution. # # EXAMPLE: # node { # calculator: "FaceGeometryFromDetection" # input_stream: "IMAGE_SIZE:image_size" # input_stream: "MULTI_FACE_DETECTION:multi_face_detection" # input_side_packet: "ENVIRONMENT:environment" # output_stream: "MULTI_FACE_GEOMETRY:multi_face_geometry" # } type: "FaceGeometryFromDetection" # The size of the input frame. The first element of the pair is the frame width; # the other one is the frame height. # # The face landmarks should have been detected on a frame with the same # ratio. If used as-is, the resulting face geometry visualization should be # happening on a frame with the same ratio as well. # # (std::pair) input_stream: "IMAGE_SIZE:image_size" # Collection of detected/predicted faces, each represented as a detection. # (std::vector) input_stream: "MULTI_FACE_DETECTION:multi_face_detection" # Environment that describes the current virtual scene. # (face_geometry::Environment) input_side_packet: "ENVIRONMENT:environment" # A list of geometry data for each detected face. # (std::vector) # # NOTE: the triangular topology of the face meshes is only useful when derived # from the 468 face landmarks, not from the 6 face detection landmarks # (keypoints). The former don't cover the entire face and this mesh is # defined here only to comply with the API. It should be considered as # a placeholder and/or for debugging purposes. # # Use the face geometry derived from the face detection landmarks # (keypoints) for the face pose transformation matrix, not the mesh. output_stream: "MULTI_FACE_GEOMETRY:multi_face_geometry" # Begin iterating over a vector of the face detections. node { calculator: "BeginLoopDetectionCalculator" input_stream: "ITERABLE:multi_face_detection" output_stream: "ITEM:face_detection" output_stream: "BATCH_END:detection_timestamp" } # Extracts face detection keypoints as a normalized landmarks. node { calculator: "DetectionToLandmarksCalculator" input_stream: "DETECTION:face_detection" output_stream: "LANDMARKS:face_landmarks" } # End iterating over a vector of the face detections and receive a vector of # face landmark lists as a result. node { calculator: "EndLoopNormalizedLandmarkListVectorCalculator" input_stream: "ITEM:face_landmarks" input_stream: "BATCH_END:detection_timestamp" output_stream: "ITERABLE:multi_face_landmarks" } # Extracts face geometry for multiple faces from a vector of face detection # landmark lists. node { calculator: "FaceGeometryPipelineCalculator" input_side_packet: "ENVIRONMENT:environment" input_stream: "IMAGE_SIZE:image_size" input_stream: "MULTI_FACE_LANDMARKS:multi_face_landmarks" output_stream: "MULTI_FACE_GEOMETRY:multi_face_geometry" options: { [mediapipe.FaceGeometryPipelineCalculatorOptions.ext] { metadata_path: "mediapipe/modules/face_geometry/data/geometry_pipeline_metadata_detection.binarypb" } } }