Internal change
PiperOrigin-RevId: 523785788
This commit is contained in:
parent
9a10375de6
commit
c7aecb42ff
|
@ -28,21 +28,31 @@ cc_library(
|
||||||
"//mediapipe/calculators/core:split_proto_list_calculator",
|
"//mediapipe/calculators/core:split_proto_list_calculator",
|
||||||
"//mediapipe/calculators/core:split_vector_calculator",
|
"//mediapipe/calculators/core:split_vector_calculator",
|
||||||
"//mediapipe/calculators/core:split_vector_calculator_cc_proto",
|
"//mediapipe/calculators/core:split_vector_calculator_cc_proto",
|
||||||
|
"//mediapipe/calculators/image:warp_affine_calculator",
|
||||||
|
"//mediapipe/calculators/image:warp_affine_calculator_cc_proto",
|
||||||
|
"//mediapipe/calculators/tensor:image_to_tensor_calculator_cc_proto",
|
||||||
"//mediapipe/calculators/tensor:inference_calculator",
|
"//mediapipe/calculators/tensor:inference_calculator",
|
||||||
"//mediapipe/calculators/tensor:tensors_to_floats_calculator",
|
"//mediapipe/calculators/tensor:tensors_to_floats_calculator",
|
||||||
"//mediapipe/calculators/tensor:tensors_to_landmarks_calculator",
|
"//mediapipe/calculators/tensor:tensors_to_landmarks_calculator",
|
||||||
"//mediapipe/calculators/tensor:tensors_to_landmarks_calculator_cc_proto",
|
"//mediapipe/calculators/tensor:tensors_to_landmarks_calculator_cc_proto",
|
||||||
"//mediapipe/calculators/tensor:tensors_to_segmentation_calculator",
|
"//mediapipe/calculators/tensor:tensors_to_segmentation_calculator",
|
||||||
"//mediapipe/calculators/tensor:tensors_to_segmentation_calculator_cc_proto",
|
"//mediapipe/calculators/tensor:tensors_to_segmentation_calculator_cc_proto",
|
||||||
|
"//mediapipe/calculators/util:alignment_points_to_rects_calculator",
|
||||||
"//mediapipe/calculators/util:detections_to_rects_calculator",
|
"//mediapipe/calculators/util:detections_to_rects_calculator",
|
||||||
|
"//mediapipe/calculators/util:detections_to_rects_calculator_cc_proto",
|
||||||
|
"//mediapipe/calculators/util:inverse_matrix_calculator",
|
||||||
|
"//mediapipe/calculators/util:landmark_letterbox_removal_calculator",
|
||||||
|
"//mediapipe/calculators/util:landmark_projection_calculator",
|
||||||
"//mediapipe/calculators/util:landmarks_to_detection_calculator",
|
"//mediapipe/calculators/util:landmarks_to_detection_calculator",
|
||||||
"//mediapipe/calculators/util:rect_transformation_calculator",
|
"//mediapipe/calculators/util:rect_transformation_calculator",
|
||||||
|
"//mediapipe/calculators/util:rect_transformation_calculator_cc_proto",
|
||||||
"//mediapipe/calculators/util:refine_landmarks_from_heatmap_calculator",
|
"//mediapipe/calculators/util:refine_landmarks_from_heatmap_calculator",
|
||||||
"//mediapipe/calculators/util:refine_landmarks_from_heatmap_calculator_cc_proto",
|
"//mediapipe/calculators/util:refine_landmarks_from_heatmap_calculator_cc_proto",
|
||||||
"//mediapipe/calculators/util:thresholding_calculator",
|
"//mediapipe/calculators/util:thresholding_calculator",
|
||||||
"//mediapipe/calculators/util:thresholding_calculator_cc_proto",
|
"//mediapipe/calculators/util:thresholding_calculator_cc_proto",
|
||||||
"//mediapipe/calculators/util:visibility_copy_calculator",
|
"//mediapipe/calculators/util:visibility_copy_calculator",
|
||||||
"//mediapipe/calculators/util:visibility_copy_calculator_cc_proto",
|
"//mediapipe/calculators/util:visibility_copy_calculator_cc_proto",
|
||||||
|
"//mediapipe/calculators/util:world_landmark_projection_calculator",
|
||||||
"//mediapipe/framework:subgraph",
|
"//mediapipe/framework:subgraph",
|
||||||
"//mediapipe/framework/api2:builder",
|
"//mediapipe/framework/api2:builder",
|
||||||
"//mediapipe/framework/api2:port",
|
"//mediapipe/framework/api2:port",
|
||||||
|
|
|
@ -15,8 +15,12 @@ limitations under the License.
|
||||||
|
|
||||||
#include "absl/status/statusor.h"
|
#include "absl/status/statusor.h"
|
||||||
#include "mediapipe/calculators/core/split_vector_calculator.pb.h"
|
#include "mediapipe/calculators/core/split_vector_calculator.pb.h"
|
||||||
|
#include "mediapipe/calculators/image/warp_affine_calculator.pb.h"
|
||||||
|
#include "mediapipe/calculators/tensor/image_to_tensor_calculator.pb.h"
|
||||||
#include "mediapipe/calculators/tensor/tensors_to_landmarks_calculator.pb.h"
|
#include "mediapipe/calculators/tensor/tensors_to_landmarks_calculator.pb.h"
|
||||||
#include "mediapipe/calculators/tensor/tensors_to_segmentation_calculator.pb.h"
|
#include "mediapipe/calculators/tensor/tensors_to_segmentation_calculator.pb.h"
|
||||||
|
#include "mediapipe/calculators/util/detections_to_rects_calculator.pb.h"
|
||||||
|
#include "mediapipe/calculators/util/rect_transformation_calculator.pb.h"
|
||||||
#include "mediapipe/calculators/util/refine_landmarks_from_heatmap_calculator.pb.h"
|
#include "mediapipe/calculators/util/refine_landmarks_from_heatmap_calculator.pb.h"
|
||||||
#include "mediapipe/calculators/util/thresholding_calculator.pb.h"
|
#include "mediapipe/calculators/util/thresholding_calculator.pb.h"
|
||||||
#include "mediapipe/calculators/util/visibility_copy_calculator.pb.h"
|
#include "mediapipe/calculators/util/visibility_copy_calculator.pb.h"
|
||||||
|
@ -70,6 +74,9 @@ constexpr char kNormLandmarksFromTag[] = "NORM_LANDMARKS_FROM";
|
||||||
constexpr char kBatchEndTag[] = "BATCH_END";
|
constexpr char kBatchEndTag[] = "BATCH_END";
|
||||||
constexpr char kItemTag[] = "ITEM";
|
constexpr char kItemTag[] = "ITEM";
|
||||||
constexpr char kIterableTag[] = "ITERABLE";
|
constexpr char kIterableTag[] = "ITERABLE";
|
||||||
|
constexpr char kLetterboxPaddingTag[] = "LETTERBOX_PADDING";
|
||||||
|
constexpr char kMatrixTag[] = "MATRIX";
|
||||||
|
constexpr char kOutputSizeTag[] = "OUTPUT_SIZE";
|
||||||
|
|
||||||
constexpr int kModelOutputTensorSplitNum = 5;
|
constexpr int kModelOutputTensorSplitNum = 5;
|
||||||
constexpr int kLandmarksNum = 39;
|
constexpr int kLandmarksNum = 39;
|
||||||
|
@ -182,6 +189,28 @@ void ConfigureVisibilityCopyCalculator(
|
||||||
options->set_copy_presence(true);
|
options->set_copy_presence(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConfigureRectTransformationCalculator(
|
||||||
|
mediapipe::RectTransformationCalculatorOptions* options) {
|
||||||
|
options->set_scale_x(1.25);
|
||||||
|
options->set_scale_y(1.25);
|
||||||
|
options->set_square_long(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigureAlignmentPointsRectsCalculator(
|
||||||
|
mediapipe::DetectionsToRectsCalculatorOptions* options) {
|
||||||
|
// Derived from
|
||||||
|
// mediapipe/modules/pose_landmark/pose_landmarks_to_roi.pbtxt
|
||||||
|
options->set_rotation_vector_start_keypoint_index(0);
|
||||||
|
options->set_rotation_vector_end_keypoint_index(1);
|
||||||
|
options->set_rotation_vector_target_angle_degrees(90);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConfigureWarpAffineCalculator(
|
||||||
|
mediapipe::WarpAffineCalculatorOptions* options) {
|
||||||
|
options->set_border_mode(mediapipe::WarpAffineCalculatorOptions::BORDER_ZERO);
|
||||||
|
options->set_gpu_origin(mediapipe::GpuOrigin::TOP_LEFT);
|
||||||
|
}
|
||||||
|
|
||||||
// A "mediapipe.tasks.vision.pose_landmarker.SinglePoseLandmarksDetectorGraph"
|
// A "mediapipe.tasks.vision.pose_landmarker.SinglePoseLandmarksDetectorGraph"
|
||||||
// performs pose landmarks detection.
|
// performs pose landmarks detection.
|
||||||
// - Accepts CPU input images and outputs Landmark on CPU.
|
// - Accepts CPU input images and outputs Landmark on CPU.
|
||||||
|
@ -288,6 +317,8 @@ class SinglePoseLandmarksDetectorGraph : public core::ModelTaskGraph {
|
||||||
image_in >> preprocessing.In(kImageTag);
|
image_in >> preprocessing.In(kImageTag);
|
||||||
pose_rect >> preprocessing.In(kNormRectTag);
|
pose_rect >> preprocessing.In(kNormRectTag);
|
||||||
auto image_size = preprocessing[Output<std::pair<int, int>>(kImageSizeTag)];
|
auto image_size = preprocessing[Output<std::pair<int, int>>(kImageSizeTag)];
|
||||||
|
auto matrix = preprocessing[Output<std::vector<float>>(kMatrixTag)];
|
||||||
|
auto letterbox_padding = preprocessing.Out(kLetterboxPaddingTag);
|
||||||
|
|
||||||
ASSIGN_OR_RETURN(auto image_tensor_specs,
|
ASSIGN_OR_RETURN(auto image_tensor_specs,
|
||||||
BuildInputImageTensorSpecs(model_resources));
|
BuildInputImageTensorSpecs(model_resources));
|
||||||
|
@ -346,7 +377,7 @@ class SinglePoseLandmarksDetectorGraph : public core::ModelTaskGraph {
|
||||||
.GetOptions<mediapipe::TensorsToLandmarksCalculatorOptions>());
|
.GetOptions<mediapipe::TensorsToLandmarksCalculatorOptions>());
|
||||||
ensured_landmarks_tensors >> tensors_to_landmarks.In(kTensorsTag);
|
ensured_landmarks_tensors >> tensors_to_landmarks.In(kTensorsTag);
|
||||||
|
|
||||||
auto landmarks =
|
auto raw_landmarks =
|
||||||
tensors_to_landmarks[Output<NormalizedLandmarkList>(kNormLandmarksTag)];
|
tensors_to_landmarks[Output<NormalizedLandmarkList>(kNormLandmarksTag)];
|
||||||
|
|
||||||
// Decodes the segmentation tensor into a mask image with pixel values in
|
// Decodes the segmentation tensor into a mask image with pixel values in
|
||||||
|
@ -357,7 +388,8 @@ class SinglePoseLandmarksDetectorGraph : public core::ModelTaskGraph {
|
||||||
&tensors_to_segmentation
|
&tensors_to_segmentation
|
||||||
.GetOptions<mediapipe::TensorsToSegmentationCalculatorOptions>());
|
.GetOptions<mediapipe::TensorsToSegmentationCalculatorOptions>());
|
||||||
ensured_segmentation_tensors >> tensors_to_segmentation.In(kTensorsTag);
|
ensured_segmentation_tensors >> tensors_to_segmentation.In(kTensorsTag);
|
||||||
auto segmentation_mask = tensors_to_segmentation[Output<Image>(kMaskTag)];
|
auto raw_segmentation_mask =
|
||||||
|
tensors_to_segmentation[Output<Image>(kMaskTag)];
|
||||||
|
|
||||||
// Refines landmarks with the heatmap tensor.
|
// Refines landmarks with the heatmap tensor.
|
||||||
auto& refine_landmarks_from_heatmap =
|
auto& refine_landmarks_from_heatmap =
|
||||||
|
@ -366,7 +398,7 @@ class SinglePoseLandmarksDetectorGraph : public core::ModelTaskGraph {
|
||||||
&refine_landmarks_from_heatmap.GetOptions<
|
&refine_landmarks_from_heatmap.GetOptions<
|
||||||
mediapipe::RefineLandmarksFromHeatmapCalculatorOptions>());
|
mediapipe::RefineLandmarksFromHeatmapCalculatorOptions>());
|
||||||
ensured_heatmap_tensors >> refine_landmarks_from_heatmap.In(kTensorsTag);
|
ensured_heatmap_tensors >> refine_landmarks_from_heatmap.In(kTensorsTag);
|
||||||
landmarks >> refine_landmarks_from_heatmap.In(kNormLandmarksTag);
|
raw_landmarks >> refine_landmarks_from_heatmap.In(kNormLandmarksTag);
|
||||||
auto landmarks_from_heatmap =
|
auto landmarks_from_heatmap =
|
||||||
refine_landmarks_from_heatmap[Output<NormalizedLandmarkList>(
|
refine_landmarks_from_heatmap[Output<NormalizedLandmarkList>(
|
||||||
kNormLandmarksTag)];
|
kNormLandmarksTag)];
|
||||||
|
@ -379,11 +411,10 @@ class SinglePoseLandmarksDetectorGraph : public core::ModelTaskGraph {
|
||||||
&split_normalized_landmark_list
|
&split_normalized_landmark_list
|
||||||
.GetOptions<mediapipe::SplitVectorCalculatorOptions>());
|
.GetOptions<mediapipe::SplitVectorCalculatorOptions>());
|
||||||
landmarks_from_heatmap >> split_normalized_landmark_list.In("");
|
landmarks_from_heatmap >> split_normalized_landmark_list.In("");
|
||||||
auto normalized_landmarks = split_normalized_landmark_list.Out("")[0]
|
auto landmarks = split_normalized_landmark_list.Out("")[0]
|
||||||
.Cast<NormalizedLandmarkList>();
|
.Cast<NormalizedLandmarkList>();
|
||||||
auto normalized_auxiliary_landmarks =
|
auto auxiliary_landmarks = split_normalized_landmark_list.Out("")[1]
|
||||||
split_normalized_landmark_list.Out("")[1]
|
.Cast<NormalizedLandmarkList>();
|
||||||
.Cast<NormalizedLandmarkList>();
|
|
||||||
|
|
||||||
// Decodes the world-landmark tensors into a vector of world landmarks.
|
// Decodes the world-landmark tensors into a vector of world landmarks.
|
||||||
auto& tensors_to_world_landmarks =
|
auto& tensors_to_world_landmarks =
|
||||||
|
@ -395,7 +426,7 @@ class SinglePoseLandmarksDetectorGraph : public core::ModelTaskGraph {
|
||||||
.GetOptions<mediapipe::TensorsToLandmarksCalculatorOptions>());
|
.GetOptions<mediapipe::TensorsToLandmarksCalculatorOptions>());
|
||||||
ensured_world_landmark_tensors >>
|
ensured_world_landmark_tensors >>
|
||||||
tensors_to_world_landmarks.In(kTensorsTag);
|
tensors_to_world_landmarks.In(kTensorsTag);
|
||||||
auto world_landmarks =
|
auto raw_world_landmarks =
|
||||||
tensors_to_world_landmarks[Output<LandmarkList>(kLandmarksTag)];
|
tensors_to_world_landmarks[Output<LandmarkList>(kLandmarksTag)];
|
||||||
|
|
||||||
// Keeps only the actual world landmarks.
|
// Keeps only the actual world landmarks.
|
||||||
|
@ -403,7 +434,7 @@ class SinglePoseLandmarksDetectorGraph : public core::ModelTaskGraph {
|
||||||
ConfigureSplitLandmarkListCalculator(
|
ConfigureSplitLandmarkListCalculator(
|
||||||
&split_landmark_list
|
&split_landmark_list
|
||||||
.GetOptions<mediapipe::SplitVectorCalculatorOptions>());
|
.GetOptions<mediapipe::SplitVectorCalculatorOptions>());
|
||||||
world_landmarks >> split_landmark_list.In("");
|
raw_world_landmarks >> split_landmark_list.In("");
|
||||||
auto split_landmarks = split_landmark_list.Out(0);
|
auto split_landmarks = split_landmark_list.Out(0);
|
||||||
|
|
||||||
// Reuses the visibility and presence field in pose landmarks for the world
|
// Reuses the visibility and presence field in pose landmarks for the world
|
||||||
|
@ -413,39 +444,104 @@ class SinglePoseLandmarksDetectorGraph : public core::ModelTaskGraph {
|
||||||
&visibility_copy
|
&visibility_copy
|
||||||
.GetOptions<mediapipe::VisibilityCopyCalculatorOptions>());
|
.GetOptions<mediapipe::VisibilityCopyCalculatorOptions>());
|
||||||
split_landmarks >> visibility_copy.In(kLandmarksToTag);
|
split_landmarks >> visibility_copy.In(kLandmarksToTag);
|
||||||
normalized_landmarks >> visibility_copy.In(kNormLandmarksFromTag);
|
landmarks >> visibility_copy.In(kNormLandmarksFromTag);
|
||||||
auto world_landmarks_with_visibility =
|
auto world_landmarks =
|
||||||
visibility_copy[Output<LandmarkList>(kLandmarksToTag)];
|
visibility_copy[Output<LandmarkList>(kLandmarksToTag)];
|
||||||
|
|
||||||
// Landmarks to Detections.
|
// Each raw landmark needs to pass through LandmarkLetterboxRemoval +
|
||||||
auto& landmarks_to_detection =
|
// LandmarkProjection.
|
||||||
|
|
||||||
|
// Landmark letterbox removal for landmarks.
|
||||||
|
auto& landmark_letterbox_removal =
|
||||||
|
graph.AddNode("LandmarkLetterboxRemovalCalculator");
|
||||||
|
letterbox_padding >> landmark_letterbox_removal.In(kLetterboxPaddingTag);
|
||||||
|
landmarks >> landmark_letterbox_removal.In(kLandmarksTag);
|
||||||
|
auto adjusted_landmarks = landmark_letterbox_removal.Out(kLandmarksTag);
|
||||||
|
|
||||||
|
// Projects the landmarks.
|
||||||
|
auto& landmarks_projection = graph.AddNode("LandmarkProjectionCalculator");
|
||||||
|
adjusted_landmarks >> landmarks_projection.In(kNormLandmarksTag);
|
||||||
|
pose_rect >> landmarks_projection.In(kNormRectTag);
|
||||||
|
auto projected_landmarks = landmarks_projection.Out(kNormLandmarksTag)
|
||||||
|
.Cast<NormalizedLandmarkList>();
|
||||||
|
|
||||||
|
// Landmark letterbox removal for auxiliary landmarks.
|
||||||
|
auto& auxiliary_landmark_letterbox_removal =
|
||||||
|
graph.AddNode("LandmarkLetterboxRemovalCalculator");
|
||||||
|
letterbox_padding >>
|
||||||
|
auxiliary_landmark_letterbox_removal.In(kLetterboxPaddingTag);
|
||||||
|
auxiliary_landmarks >>
|
||||||
|
auxiliary_landmark_letterbox_removal.In(kLandmarksTag);
|
||||||
|
auto auxiliary_adjusted_landmarks =
|
||||||
|
auxiliary_landmark_letterbox_removal.Out(kLandmarksTag);
|
||||||
|
|
||||||
|
// Projects the auxiliary landmarks.
|
||||||
|
auto& auxiliary_landmarks_projection =
|
||||||
|
graph.AddNode("LandmarkProjectionCalculator");
|
||||||
|
auxiliary_adjusted_landmarks >>
|
||||||
|
auxiliary_landmarks_projection.In(kNormLandmarksTag);
|
||||||
|
pose_rect >> auxiliary_landmarks_projection.In(kNormRectTag);
|
||||||
|
auto auxiliary_projected_landmarks =
|
||||||
|
auxiliary_landmarks_projection.Out(kNormLandmarksTag)
|
||||||
|
.Cast<NormalizedLandmarkList>();
|
||||||
|
|
||||||
|
// Project world landmarks.
|
||||||
|
auto& world_landmarks_projection =
|
||||||
|
graph.AddNode("WorldLandmarkProjectionCalculator");
|
||||||
|
world_landmarks >> world_landmarks_projection.In(kLandmarksTag);
|
||||||
|
pose_rect >> world_landmarks_projection.In(kNormRectTag);
|
||||||
|
auto world_projected_landmarks =
|
||||||
|
world_landmarks_projection.Out(kLandmarksTag).Cast<LandmarkList>();
|
||||||
|
|
||||||
|
// Calculates the inverse transformation matrix.
|
||||||
|
auto& inverse_matrix = graph.AddNode("InverseMatrixCalculator");
|
||||||
|
matrix >> inverse_matrix.In(kMatrixTag);
|
||||||
|
auto inverted_matrix = inverse_matrix.Out(kMatrixTag);
|
||||||
|
|
||||||
|
// Projects the segmentation mask from the letterboxed ROI back to the full
|
||||||
|
// image.
|
||||||
|
auto& warp_affine = graph.AddNode("WarpAffineCalculator");
|
||||||
|
ConfigureWarpAffineCalculator(
|
||||||
|
&warp_affine.GetOptions<mediapipe::WarpAffineCalculatorOptions>());
|
||||||
|
image_size >> warp_affine.In(kOutputSizeTag);
|
||||||
|
inverted_matrix >> warp_affine.In(kMatrixTag);
|
||||||
|
raw_segmentation_mask >> warp_affine.In(kImageTag);
|
||||||
|
auto projected_segmentation_mask = warp_affine.Out(kImageTag).Cast<Image>();
|
||||||
|
|
||||||
|
// Calculate region of interest based on auxiliary landmarks, to be used
|
||||||
|
// in the next frame. Consists of LandmarksToDetection +
|
||||||
|
// AlignmentPointsRects + RectTransformation.
|
||||||
|
|
||||||
|
auto& auxiliary_landmarks_to_detection =
|
||||||
graph.AddNode("LandmarksToDetectionCalculator");
|
graph.AddNode("LandmarksToDetectionCalculator");
|
||||||
landmarks >> landmarks_to_detection.In(kNormLandmarksTag);
|
auxiliary_projected_landmarks >>
|
||||||
auto detection = landmarks_to_detection.Out(kDetectionTag);
|
auxiliary_landmarks_to_detection.In(kNormLandmarksTag);
|
||||||
|
auto detection = auxiliary_landmarks_to_detection.Out(kDetectionTag);
|
||||||
|
|
||||||
// Detections to Rects.
|
auto& detection_to_rect = graph.AddNode("AlignmentPointsRectsCalculator");
|
||||||
auto& detection_to_rects = graph.AddNode("DetectionsToRectsCalculator");
|
ConfigureAlignmentPointsRectsCalculator(
|
||||||
image_size >> detection_to_rects.In(kImageSizeTag);
|
&detection_to_rect
|
||||||
detection >> detection_to_rects.In(kDetectionTag);
|
.GetOptions<mediapipe::DetectionsToRectsCalculatorOptions>());
|
||||||
auto norm_rect = detection_to_rects.Out(kNormRectTag);
|
detection >> detection_to_rect.In(kDetectionTag);
|
||||||
|
image_size >> detection_to_rect.In(kImageSizeTag);
|
||||||
|
auto raw_pose_rects = detection_to_rect.Out(kNormRectTag);
|
||||||
|
|
||||||
// Expands the pose rectangle so that in the next video frame it's likely to
|
auto& rect_transformation = graph.AddNode("RectTransformationCalculator");
|
||||||
// still contain the pose even with some motion.
|
ConfigureRectTransformationCalculator(
|
||||||
auto& pose_rect_transformation =
|
&rect_transformation
|
||||||
graph.AddNode("RectTransformationCalculator");
|
.GetOptions<mediapipe::RectTransformationCalculatorOptions>());
|
||||||
image_size >> pose_rect_transformation.In(kImageSizeTag);
|
image_size >> rect_transformation.In(kImageSizeTag);
|
||||||
norm_rect >> pose_rect_transformation.In(kNormRectTag);
|
raw_pose_rects >> rect_transformation.In("NORM_RECT");
|
||||||
auto pose_rect_next_frame =
|
auto pose_rect_next_frame = rect_transformation[Output<NormalizedRect>("")];
|
||||||
pose_rect_transformation[Output<NormalizedRect>("")];
|
|
||||||
|
|
||||||
return {{
|
return {{
|
||||||
/* pose_landmarks= */ normalized_landmarks,
|
/* pose_landmarks= */ projected_landmarks,
|
||||||
/* world_pose_landmarks= */ world_landmarks_with_visibility,
|
/* world_pose_landmarks= */ world_projected_landmarks,
|
||||||
/* auxiliary_pose_landmarks= */ normalized_auxiliary_landmarks,
|
/* auxiliary_pose_landmarks= */ auxiliary_projected_landmarks,
|
||||||
/* pose_rect_next_frame= */ pose_rect_next_frame,
|
/* pose_rect_next_frame= */ pose_rect_next_frame,
|
||||||
/* pose_presence= */ pose_presence,
|
/* pose_presence= */ pose_presence,
|
||||||
/* pose_presence_score= */ pose_presence_score,
|
/* pose_presence_score= */ pose_presence_score,
|
||||||
/* segmentation_mask= */ segmentation_mask,
|
/* segmentation_mask= */ projected_segmentation_mask,
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,231 +1,231 @@
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.47503802
|
x: 0.46507242
|
||||||
y: 0.20596696
|
y: 0.41610304
|
||||||
z: -0.2717698
|
z: -0.14999297
|
||||||
visibility: 0.9999881
|
visibility: 0.99998844
|
||||||
presence: 0.999985
|
presence: 0.99998903
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.48141137
|
x: 0.47030905
|
||||||
y: 0.18920818
|
y: 0.40309227
|
||||||
z: -0.2632932
|
z: -0.14747797
|
||||||
visibility: 0.9999653
|
visibility: 0.9999664
|
||||||
presence: 0.9999397
|
presence: 0.99995553
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.48735094
|
x: 0.47342995
|
||||||
y: 0.18857746
|
y: 0.40156996
|
||||||
z: -0.26326385
|
z: -0.14745711
|
||||||
visibility: 0.9999536
|
visibility: 0.9999546
|
||||||
presence: 0.9999366
|
presence: 0.9999534
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.49283814
|
x: 0.47663194
|
||||||
y: 0.187905
|
y: 0.39997125
|
||||||
z: -0.26327085
|
z: -0.14746517
|
||||||
visibility: 0.9999398
|
visibility: 0.99994385
|
||||||
presence: 0.9999262
|
presence: 0.99994576
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.47124237
|
x: 0.46315864
|
||||||
y: 0.1904801
|
y: 0.4074311
|
||||||
z: -0.24174295
|
z: -0.12709364
|
||||||
visibility: 0.9999498
|
visibility: 0.99994826
|
||||||
presence: 0.99994826
|
presence: 0.99996126
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.46842983
|
x: 0.46167478
|
||||||
y: 0.1906853
|
y: 0.4089059
|
||||||
z: -0.24183725
|
z: -0.12713416
|
||||||
visibility: 0.9999305
|
visibility: 0.9999267
|
||||||
presence: 0.99995315
|
presence: 0.99996483
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.46623105
|
x: 0.45983645
|
||||||
y: 0.19083896
|
y: 0.41042596
|
||||||
z: -0.24178317
|
z: -0.12708154
|
||||||
visibility: 0.9999275
|
visibility: 0.9999249
|
||||||
presence: 0.99995124
|
presence: 0.9999635
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.51211923
|
x: 0.48985234
|
||||||
y: 0.19381559
|
y: 0.4053322
|
||||||
z: -0.17863783
|
z: -0.10685073
|
||||||
visibility: 0.99989283
|
visibility: 0.99990225
|
||||||
presence: 0.99994254
|
presence: 0.9999591
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.47326156
|
x: 0.46542352
|
||||||
y: 0.19597495
|
y: 0.41843837
|
||||||
z: -0.07647368
|
z: -0.011494645
|
||||||
visibility: 0.9999068
|
visibility: 0.999894
|
||||||
presence: 0.9999703
|
presence: 0.9999794
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.48888734
|
x: 0.4757115
|
||||||
y: 0.21832445
|
y: 0.42860925
|
||||||
z: -0.24005938
|
z: -0.13509856
|
||||||
visibility: 0.9999583
|
visibility: 0.9999609
|
||||||
presence: 0.99999404
|
presence: 0.9999964
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.4750799
|
x: 0.46715724
|
||||||
y: 0.21996267
|
y: 0.4335927
|
||||||
z: -0.21063438
|
z: -0.10763592
|
||||||
visibility: 0.9999558
|
visibility: 0.9999547
|
||||||
presence: 0.9999944
|
presence: 0.99999654
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.58094275
|
x: 0.5383015
|
||||||
y: 0.27069643
|
y: 0.47349828
|
||||||
z: -0.13522492
|
z: -0.09904624
|
||||||
visibility: 0.9999832
|
visibility: 0.99999046
|
||||||
presence: 0.999948
|
presence: 0.99997306
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.44552392
|
x: 0.45313644
|
||||||
y: 0.27577883
|
y: 0.48936796
|
||||||
z: 0.024918541
|
z: 0.06387678
|
||||||
visibility: 0.9999881
|
visibility: 0.9999919
|
||||||
presence: 0.9999864
|
presence: 0.99999344
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.7083446
|
x: 0.6247076
|
||||||
y: 0.2769637
|
y: 0.47583634
|
||||||
z: -0.21408014
|
z: -0.16247825
|
||||||
visibility: 0.99515605
|
visibility: 0.9971179
|
||||||
presence: 0.9995721
|
presence: 0.9997496
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.31485358
|
x: 0.36646777
|
||||||
y: 0.25585473
|
y: 0.48342204
|
||||||
z: 0.03827352
|
z: 0.08566214
|
||||||
visibility: 0.98532397
|
visibility: 0.98212147
|
||||||
presence: 0.99995303
|
presence: 0.9999796
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.83101267
|
x: 0.6950672
|
||||||
y: 0.26628205
|
y: 0.47276276
|
||||||
z: -0.3408214
|
z: -0.23432226
|
||||||
visibility: 0.98725593
|
visibility: 0.99190086
|
||||||
presence: 0.99614346
|
presence: 0.99751616
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.20504552
|
x: 0.29679844
|
||||||
y: 0.24419393
|
y: 0.46896482
|
||||||
z: -0.12712422
|
z: -0.020334292
|
||||||
visibility: 0.9823162
|
visibility: 0.9826943
|
||||||
presence: 0.9993932
|
presence: 0.99966264
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.8703914
|
x: 0.71771
|
||||||
y: 0.2622718
|
y: 0.466713
|
||||||
z: -0.36847484
|
z: -0.25376678
|
||||||
visibility: 0.9663167
|
visibility: 0.97681385
|
||||||
presence: 0.99103457
|
presence: 0.9940614
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.16960809
|
x: 0.2762509
|
||||||
y: 0.2398484
|
y: 0.46507546
|
||||||
z: -0.14768666
|
z: -0.030049918
|
||||||
visibility: 0.95874923
|
visibility: 0.9577505
|
||||||
presence: 0.99777645
|
presence: 0.9986953
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.8661166
|
x: 0.71468514
|
||||||
y: 0.2626395
|
y: 0.46545807
|
||||||
z: -0.4128364
|
z: -0.27873537
|
||||||
visibility: 0.96738607
|
visibility: 0.9773756
|
||||||
presence: 0.9918098
|
presence: 0.99447954
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.16942637
|
x: 0.27898294
|
||||||
y: 0.23765557
|
y: 0.45952708
|
||||||
z: -0.19633037
|
z: -0.061881505
|
||||||
visibility: 0.9609766
|
visibility: 0.9598176
|
||||||
presence: 0.9979639
|
presence: 0.9987778
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.851011
|
x: 0.70616376
|
||||||
y: 0.2654708
|
y: 0.47313935
|
||||||
z: -0.36451888
|
z: -0.2473996
|
||||||
visibility: 0.96485573
|
visibility: 0.97479546
|
||||||
presence: 0.9941413
|
presence: 0.9961171
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.18291923
|
x: 0.2866556
|
||||||
y: 0.24094415
|
y: 0.4661593
|
||||||
z: -0.15638204
|
z: -0.039750997
|
||||||
visibility: 0.96108276
|
visibility: 0.96074265
|
||||||
presence: 0.9986619
|
presence: 0.9992084
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.5391705
|
x: 0.5199628
|
||||||
y: 0.50526816
|
y: 0.71132404
|
||||||
z: -0.053723037
|
z: -0.05568369
|
||||||
visibility: 0.9994941
|
visibility: 0.9997075
|
||||||
presence: 0.9995571
|
presence: 0.9997811
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.4622758
|
x: 0.46290728
|
||||||
y: 0.4999145
|
y: 0.7031081
|
||||||
z: 0.053916093
|
z: 0.05579845
|
||||||
visibility: 0.9996294
|
visibility: 0.99977857
|
||||||
presence: 0.9997342
|
presence: 0.99986553
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.675301
|
x: 0.60217524
|
||||||
y: 0.62948114
|
y: 0.81984437
|
||||||
z: -0.17877069
|
z: -0.14303333
|
||||||
visibility: 0.9939932
|
visibility: 0.99511355
|
||||||
presence: 0.9988996
|
presence: 0.9993449
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.28809914
|
x: 0.36314535
|
||||||
y: 0.52877027
|
y: 0.7332305
|
||||||
z: -0.1407601
|
z: -0.063036785
|
||||||
visibility: 0.99657404
|
visibility: 0.9963553
|
||||||
presence: 0.9995253
|
presence: 0.9997341
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.82030344
|
x: 0.70064104
|
||||||
y: 0.7374987
|
y: 0.93365943
|
||||||
z: 0.007227801
|
z: -0.031219501
|
||||||
visibility: 0.98853314
|
visibility: 0.9909759
|
||||||
presence: 0.990724
|
presence: 0.9935846
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.2672157
|
x: 0.35170174
|
||||||
y: 0.7118606
|
y: 0.9031892
|
||||||
z: -0.03558438
|
z: 0.0022715325
|
||||||
visibility: 0.99250716
|
visibility: 0.9929086
|
||||||
presence: 0.9981616
|
presence: 0.99870515
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.83312243
|
x: 0.70923454
|
||||||
y: 0.7519515
|
y: 0.954628
|
||||||
z: 0.018887112
|
z: -0.024844522
|
||||||
visibility: 0.9363986
|
visibility: 0.93651295
|
||||||
presence: 0.98826605
|
presence: 0.99121124
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.28136373
|
x: 0.36733973
|
||||||
y: 0.7367118
|
y: 0.93519753
|
||||||
z: -0.032466136
|
z: 0.003870454
|
||||||
visibility: 0.96477795
|
visibility: 0.96783006
|
||||||
presence: 0.9976307
|
presence: 0.99829334
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.8624686
|
x: 0.72855467
|
||||||
y: 0.7670486
|
y: 0.96812284
|
||||||
z: -0.12530705
|
z: -0.12364431
|
||||||
visibility: 0.9578498
|
visibility: 0.9639738
|
||||||
presence: 0.9776664
|
presence: 0.98293763
|
||||||
}
|
}
|
||||||
landmark {
|
landmark {
|
||||||
x: 0.20045075
|
x: 0.30121577
|
||||||
y: 0.7439542
|
y: 0.94473803
|
||||||
z: -0.17505309
|
z: -0.08448716
|
||||||
visibility: 0.97366387
|
visibility: 0.97545445
|
||||||
presence: 0.99209917
|
presence: 0.99386966
|
||||||
}
|
}
|
||||||
|
|
BIN
mediapipe/tasks/testdata/vision/pose_landmarker.task
vendored
BIN
mediapipe/tasks/testdata/vision/pose_landmarker.task
vendored
Binary file not shown.
22
third_party/external_files.bzl
vendored
22
third_party/external_files.bzl
vendored
|
@ -306,8 +306,14 @@ def external_files():
|
||||||
|
|
||||||
http_file(
|
http_file(
|
||||||
name = "com_google_mediapipe_expected_pose_landmarks_prototxt",
|
name = "com_google_mediapipe_expected_pose_landmarks_prototxt",
|
||||||
|
sha256 = "eed8dfa169b0abee60cde01496599b0bc75d91a82594a1bdf59be2f76f45d7f5",
|
||||||
|
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_pose_landmarks.prototxt?generation=1681243892338529"],
|
||||||
|
)
|
||||||
|
|
||||||
|
http_file(
|
||||||
|
name = "com_google_mediapipe_expected_pose_landmarks_prototxt_orig",
|
||||||
sha256 = "c230e0933e6cb4af69ec21314f3f9930fe13e7bb4bf1dbdb74427e4138c24c1e",
|
sha256 = "c230e0933e6cb4af69ec21314f3f9930fe13e7bb4bf1dbdb74427e4138c24c1e",
|
||||||
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_pose_landmarks.prototxt?generation=1681240674007127"],
|
urls = ["https://storage.googleapis.com/mediapipe-assets/expected_pose_landmarks.prototxt.orig?generation=1681243894793518"],
|
||||||
)
|
)
|
||||||
|
|
||||||
http_file(
|
http_file(
|
||||||
|
@ -817,7 +823,7 @@ def external_files():
|
||||||
http_file(
|
http_file(
|
||||||
name = "com_google_mediapipe_ocr_text_jpg",
|
name = "com_google_mediapipe_ocr_text_jpg",
|
||||||
sha256 = "88052e93aa910330433741f5cef140f8f9ec463230a332aef7038b5457b06482",
|
sha256 = "88052e93aa910330433741f5cef140f8f9ec463230a332aef7038b5457b06482",
|
||||||
urls = ["https://storage.googleapis.com/mediapipe-assets/ocr_text.jpg?generation=1681240679268678"],
|
urls = ["https://storage.googleapis.com/mediapipe-assets/ocr_text.jpg?generation=1681243901191762"],
|
||||||
)
|
)
|
||||||
|
|
||||||
http_file(
|
http_file(
|
||||||
|
@ -937,13 +943,13 @@ def external_files():
|
||||||
http_file(
|
http_file(
|
||||||
name = "com_google_mediapipe_pose_expected_detection_pbtxt",
|
name = "com_google_mediapipe_pose_expected_detection_pbtxt",
|
||||||
sha256 = "16866c8dd4fbee60f6972630d73baed219b45824c055c7fbc7dc9a91c4b182cc",
|
sha256 = "16866c8dd4fbee60f6972630d73baed219b45824c055c7fbc7dc9a91c4b182cc",
|
||||||
urls = ["https://storage.googleapis.com/mediapipe-assets/pose_expected_detection.pbtxt?generation=1681240681879992"],
|
urls = ["https://storage.googleapis.com/mediapipe-assets/pose_expected_detection.pbtxt?generation=1681243904247231"],
|
||||||
)
|
)
|
||||||
|
|
||||||
http_file(
|
http_file(
|
||||||
name = "com_google_mediapipe_pose_expected_expanded_rect_pbtxt",
|
name = "com_google_mediapipe_pose_expected_expanded_rect_pbtxt",
|
||||||
sha256 = "b0a41d25ed115757606dfc034e9d320a93a52616d92d745150b6a886ddc5a88a",
|
sha256 = "b0a41d25ed115757606dfc034e9d320a93a52616d92d745150b6a886ddc5a88a",
|
||||||
urls = ["https://storage.googleapis.com/mediapipe-assets/pose_expected_expanded_rect.pbtxt?generation=1681240684183698"],
|
urls = ["https://storage.googleapis.com/mediapipe-assets/pose_expected_expanded_rect.pbtxt?generation=1681243906782078"],
|
||||||
)
|
)
|
||||||
|
|
||||||
http_file(
|
http_file(
|
||||||
|
@ -954,8 +960,8 @@ def external_files():
|
||||||
|
|
||||||
http_file(
|
http_file(
|
||||||
name = "com_google_mediapipe_pose_landmarker_task",
|
name = "com_google_mediapipe_pose_landmarker_task",
|
||||||
sha256 = "c20284c073a891774f894269a14da4cbe4a84cab034757dab587bc19c9522b7a",
|
sha256 = "fb9cc326c88fc2a4d9a6d355c28520d5deacfbaa375b56243b0141b546080596",
|
||||||
urls = ["https://storage.googleapis.com/mediapipe-assets/pose_landmarker.task?generation=1681240686676992"],
|
urls = ["https://storage.googleapis.com/mediapipe-assets/pose_landmarker.task?generation=1681243909774681"],
|
||||||
)
|
)
|
||||||
|
|
||||||
http_file(
|
http_file(
|
||||||
|
@ -972,8 +978,8 @@ def external_files():
|
||||||
|
|
||||||
http_file(
|
http_file(
|
||||||
name = "com_google_mediapipe_pose_landmark_lite_tflite",
|
name = "com_google_mediapipe_pose_landmark_lite_tflite",
|
||||||
sha256 = "13628a7d1c1a0f601ae7202c71ec8edc3ac42db9d15f116c494ff24d1afabdd7",
|
sha256 = "1150dc68a713b80660b90ef46ce4e85c1c781bb88b6e3512cc64e6a685ba5588",
|
||||||
urls = ["https://storage.googleapis.com/mediapipe-assets/pose_landmark_lite.tflite?generation=1679955090327685"],
|
urls = ["https://storage.googleapis.com/mediapipe-assets/pose_landmark_lite.tflite?generation=1681243912778143"],
|
||||||
)
|
)
|
||||||
|
|
||||||
http_file(
|
http_file(
|
||||||
|
|
Loading…
Reference in New Issue
Block a user