Annotate in model input scale for InteractiveSegmenter
PiperOrigin-RevId: 539245617
This commit is contained in:
		
							parent
							
								
									1d4a205c2e
								
							
						
					
					
						commit
						ac4f60a793
					
				| 
						 | 
					@ -52,6 +52,7 @@ cc_library(
 | 
				
			||||||
    name = "interactive_segmenter_graph",
 | 
					    name = "interactive_segmenter_graph",
 | 
				
			||||||
    srcs = ["interactive_segmenter_graph.cc"],
 | 
					    srcs = ["interactive_segmenter_graph.cc"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//mediapipe/calculators/image:image_transformation_calculator",
 | 
				
			||||||
        "//mediapipe/calculators/image:set_alpha_calculator",
 | 
					        "//mediapipe/calculators/image:set_alpha_calculator",
 | 
				
			||||||
        "//mediapipe/calculators/util:annotation_overlay_calculator",
 | 
					        "//mediapipe/calculators/util:annotation_overlay_calculator",
 | 
				
			||||||
        "//mediapipe/calculators/util:flat_color_image_calculator",
 | 
					        "//mediapipe/calculators/util:flat_color_image_calculator",
 | 
				
			||||||
| 
						 | 
					@ -60,6 +61,7 @@ cc_library(
 | 
				
			||||||
        "//mediapipe/calculators/util:to_image_calculator",
 | 
					        "//mediapipe/calculators/util:to_image_calculator",
 | 
				
			||||||
        "//mediapipe/framework:calculator_framework",
 | 
					        "//mediapipe/framework:calculator_framework",
 | 
				
			||||||
        "//mediapipe/framework/api2:builder",
 | 
					        "//mediapipe/framework/api2:builder",
 | 
				
			||||||
 | 
					        "//mediapipe/framework/api2:node",
 | 
				
			||||||
        "//mediapipe/framework/api2:port",
 | 
					        "//mediapipe/framework/api2:port",
 | 
				
			||||||
        "//mediapipe/framework/formats:image",
 | 
					        "//mediapipe/framework/formats:image",
 | 
				
			||||||
        "//mediapipe/framework/formats:rect_cc_proto",
 | 
					        "//mediapipe/framework/formats:rect_cc_proto",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,12 +13,14 @@ See the License for the specific language governing permissions and
 | 
				
			||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
==============================================================================*/
 | 
					==============================================================================*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <memory>
 | 
				
			||||||
#include <vector>
 | 
					#include <vector>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "absl/status/statusor.h"
 | 
					#include "absl/status/statusor.h"
 | 
				
			||||||
#include "absl/strings/string_view.h"
 | 
					#include "absl/strings/string_view.h"
 | 
				
			||||||
#include "mediapipe/calculators/util/flat_color_image_calculator.pb.h"
 | 
					#include "mediapipe/calculators/util/flat_color_image_calculator.pb.h"
 | 
				
			||||||
#include "mediapipe/framework/api2/builder.h"
 | 
					#include "mediapipe/framework/api2/builder.h"
 | 
				
			||||||
 | 
					#include "mediapipe/framework/api2/node.h"
 | 
				
			||||||
#include "mediapipe/framework/api2/port.h"
 | 
					#include "mediapipe/framework/api2/port.h"
 | 
				
			||||||
#include "mediapipe/framework/calculator_framework.h"
 | 
					#include "mediapipe/framework/calculator_framework.h"
 | 
				
			||||||
#include "mediapipe/framework/formats/image.h"
 | 
					#include "mediapipe/framework/formats/image.h"
 | 
				
			||||||
| 
						 | 
					@ -35,6 +37,51 @@ namespace mediapipe {
 | 
				
			||||||
namespace tasks {
 | 
					namespace tasks {
 | 
				
			||||||
namespace vision {
 | 
					namespace vision {
 | 
				
			||||||
namespace interactive_segmenter {
 | 
					namespace interactive_segmenter {
 | 
				
			||||||
 | 
					namespace internal {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// A calculator to add thickness to the render data according to the image size,
 | 
				
			||||||
 | 
					// so that the render data is scale invariant to the image size. If the render
 | 
				
			||||||
 | 
					// data already has thickness, it will be kept as is.
 | 
				
			||||||
 | 
					class AddThicknessToRenderDataCalculator : public api2::Node {
 | 
				
			||||||
 | 
					 public:
 | 
				
			||||||
 | 
					  static constexpr api2::Input<Image> kImageIn{"IMAGE"};
 | 
				
			||||||
 | 
					  static constexpr api2::Input<mediapipe::RenderData> kRenderDataIn{
 | 
				
			||||||
 | 
					      "RENDER_DATA"};
 | 
				
			||||||
 | 
					  static constexpr api2::Output<mediapipe::RenderData> kRenderDataOut{
 | 
				
			||||||
 | 
					      "RENDER_DATA"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static constexpr int kModelInputTensorWidth = 512;
 | 
				
			||||||
 | 
					  static constexpr int kModelInputTensorHeight = 512;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  MEDIAPIPE_NODE_CONTRACT(kImageIn, kRenderDataIn, kRenderDataOut);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  absl::Status Process(CalculatorContext* cc) final {
 | 
				
			||||||
 | 
					    mediapipe::RenderData render_data = kRenderDataIn(cc).Get();
 | 
				
			||||||
 | 
					    Image image = kImageIn(cc).Get();
 | 
				
			||||||
 | 
					    double thickness = std::max(
 | 
				
			||||||
 | 
					        std::max(image.width() / static_cast<double>(kModelInputTensorWidth),
 | 
				
			||||||
 | 
					                 image.height() / static_cast<double>(kModelInputTensorHeight)),
 | 
				
			||||||
 | 
					        1.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (auto& annotation : *render_data.mutable_render_annotations()) {
 | 
				
			||||||
 | 
					      if (!annotation.has_thickness()) {
 | 
				
			||||||
 | 
					        annotation.set_thickness(thickness);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    kRenderDataOut(cc).Send(render_data);
 | 
				
			||||||
 | 
					    return absl::OkStatus();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NOLINTBEGIN: Node registration doesn't work when part of calculator name is
 | 
				
			||||||
 | 
					// moved to next line.
 | 
				
			||||||
 | 
					// clang-format off
 | 
				
			||||||
 | 
					MEDIAPIPE_REGISTER_NODE(
 | 
				
			||||||
 | 
					    ::mediapipe::tasks::vision::interactive_segmenter::internal::AddThicknessToRenderDataCalculator);
 | 
				
			||||||
 | 
					// clang-format on
 | 
				
			||||||
 | 
					// NOLINTEND
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}  // namespace internal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace {
 | 
					namespace {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -59,6 +106,7 @@ constexpr absl::string_view kAlphaGpuTag{"ALPHA_GPU"};
 | 
				
			||||||
constexpr absl::string_view kNormRectTag{"NORM_RECT"};
 | 
					constexpr absl::string_view kNormRectTag{"NORM_RECT"};
 | 
				
			||||||
constexpr absl::string_view kRoiTag{"ROI"};
 | 
					constexpr absl::string_view kRoiTag{"ROI"};
 | 
				
			||||||
constexpr absl::string_view kQualityScoresTag{"QUALITY_SCORES"};
 | 
					constexpr absl::string_view kQualityScoresTag{"QUALITY_SCORES"};
 | 
				
			||||||
 | 
					constexpr absl::string_view kRenderDataTag{"RENDER_DATA"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Updates the graph to return `roi` stream which has same dimension as
 | 
					// Updates the graph to return `roi` stream which has same dimension as
 | 
				
			||||||
// `image`, and rendered with `roi`. If `use_gpu` is true, returned `Source` is
 | 
					// `image`, and rendered with `roi`. If `use_gpu` is true, returned `Source` is
 | 
				
			||||||
| 
						 | 
					@ -69,14 +117,23 @@ Source<> RoiToAlpha(Source<Image> image, Source<RenderData> roi, bool use_gpu,
 | 
				
			||||||
  const absl::string_view image_tag_with_suffix =
 | 
					  const absl::string_view image_tag_with_suffix =
 | 
				
			||||||
      use_gpu ? kImageGpuTag : kImageCpuTag;
 | 
					      use_gpu ? kImageGpuTag : kImageCpuTag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Adds thickness to the render data so that the render data is scale
 | 
				
			||||||
 | 
					  // invariant to the input image size.
 | 
				
			||||||
 | 
					  auto& add_thickness = graph.AddNode(
 | 
				
			||||||
 | 
					      "mediapipe::tasks::vision::interactive_segmenter::internal::"
 | 
				
			||||||
 | 
					      "AddThicknessToRenderDataCalculator");
 | 
				
			||||||
 | 
					  image >> add_thickness.In(kImageTag);
 | 
				
			||||||
 | 
					  roi >> add_thickness.In(kRenderDataTag);
 | 
				
			||||||
 | 
					  auto roi_with_thickness = add_thickness.Out(kRenderDataTag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Generates a blank canvas with same size as input image.
 | 
					  // Generates a blank canvas with same size as input image.
 | 
				
			||||||
  auto& flat_color = graph.AddNode("FlatColorImageCalculator");
 | 
					  auto& flat_color = graph.AddNode("FlatColorImageCalculator");
 | 
				
			||||||
  auto& flat_color_options =
 | 
					  auto& flat_color_options =
 | 
				
			||||||
      flat_color.GetOptions<FlatColorImageCalculatorOptions>();
 | 
					      flat_color.GetOptions<FlatColorImageCalculatorOptions>();
 | 
				
			||||||
  // SetAlphaCalculator only takes 1st channel.
 | 
					  // SetAlphaCalculator only takes 1st channel.
 | 
				
			||||||
  flat_color_options.mutable_color()->set_r(0);
 | 
					  flat_color_options.mutable_color()->set_r(0);
 | 
				
			||||||
  image >> flat_color.In(kImageTag)[0];
 | 
					  image >> flat_color.In(kImageTag);
 | 
				
			||||||
  auto blank_canvas = flat_color.Out(kImageTag)[0];
 | 
					  auto blank_canvas = flat_color.Out(kImageTag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  auto& from_mp_image = graph.AddNode("FromImageCalculator");
 | 
					  auto& from_mp_image = graph.AddNode("FromImageCalculator");
 | 
				
			||||||
  blank_canvas >> from_mp_image.In(kImageTag);
 | 
					  blank_canvas >> from_mp_image.In(kImageTag);
 | 
				
			||||||
| 
						 | 
					@ -85,7 +142,7 @@ Source<> RoiToAlpha(Source<Image> image, Source<RenderData> roi, bool use_gpu,
 | 
				
			||||||
  auto& roi_to_alpha = graph.AddNode("AnnotationOverlayCalculator");
 | 
					  auto& roi_to_alpha = graph.AddNode("AnnotationOverlayCalculator");
 | 
				
			||||||
  blank_canvas_in_cpu_or_gpu >>
 | 
					  blank_canvas_in_cpu_or_gpu >>
 | 
				
			||||||
      roi_to_alpha.In(use_gpu ? kImageGpuTag : kImageTag);
 | 
					      roi_to_alpha.In(use_gpu ? kImageGpuTag : kImageTag);
 | 
				
			||||||
  roi >> roi_to_alpha.In(0);
 | 
					  roi_with_thickness >> roi_to_alpha.In(0);
 | 
				
			||||||
  auto alpha = roi_to_alpha.Out(use_gpu ? kImageGpuTag : kImageTag);
 | 
					  auto alpha = roi_to_alpha.Out(use_gpu ? kImageGpuTag : kImageTag);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return alpha;
 | 
					  return alpha;
 | 
				
			||||||
| 
						 | 
					@ -163,6 +220,7 @@ class InteractiveSegmenterGraph : public core::ModelTaskGraph {
 | 
				
			||||||
    image >> from_mp_image.In(kImageTag);
 | 
					    image >> from_mp_image.In(kImageTag);
 | 
				
			||||||
    auto image_in_cpu_or_gpu = from_mp_image.Out(image_tag_with_suffix);
 | 
					    auto image_in_cpu_or_gpu = from_mp_image.Out(image_tag_with_suffix);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Creates an RGBA image with model input tensor size.
 | 
				
			||||||
    auto alpha_in_cpu_or_gpu = RoiToAlpha(image, roi, use_gpu, graph);
 | 
					    auto alpha_in_cpu_or_gpu = RoiToAlpha(image, roi, use_gpu, graph);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    auto& set_alpha = graph.AddNode("SetAlphaCalculator");
 | 
					    auto& set_alpha = graph.AddNode("SetAlphaCalculator");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,6 +34,7 @@ limitations under the License.
 | 
				
			||||||
#include "mediapipe/framework/port/opencv_core_inc.h"
 | 
					#include "mediapipe/framework/port/opencv_core_inc.h"
 | 
				
			||||||
#include "mediapipe/framework/port/opencv_imgcodecs_inc.h"
 | 
					#include "mediapipe/framework/port/opencv_imgcodecs_inc.h"
 | 
				
			||||||
#include "mediapipe/framework/port/status_matchers.h"
 | 
					#include "mediapipe/framework/port/status_matchers.h"
 | 
				
			||||||
 | 
					#include "mediapipe/framework/tool/test_util.h"
 | 
				
			||||||
#include "mediapipe/tasks/cc/components/containers/keypoint.h"
 | 
					#include "mediapipe/tasks/cc/components/containers/keypoint.h"
 | 
				
			||||||
#include "mediapipe/tasks/cc/components/containers/rect.h"
 | 
					#include "mediapipe/tasks/cc/components/containers/rect.h"
 | 
				
			||||||
#include "mediapipe/tasks/cc/core/proto/base_options.pb.h"
 | 
					#include "mediapipe/tasks/cc/core/proto/base_options.pb.h"
 | 
				
			||||||
| 
						 | 
					@ -70,6 +71,10 @@ constexpr absl::string_view kCatsAndDogsJpg{"cats_and_dogs.jpg"};
 | 
				
			||||||
// Golden mask for the dogs in cats_and_dogs.jpg.
 | 
					// Golden mask for the dogs in cats_and_dogs.jpg.
 | 
				
			||||||
constexpr absl::string_view kCatsAndDogsMaskDog1{"cats_and_dogs_mask_dog1.png"};
 | 
					constexpr absl::string_view kCatsAndDogsMaskDog1{"cats_and_dogs_mask_dog1.png"};
 | 
				
			||||||
constexpr absl::string_view kCatsAndDogsMaskDog2{"cats_and_dogs_mask_dog2.png"};
 | 
					constexpr absl::string_view kCatsAndDogsMaskDog2{"cats_and_dogs_mask_dog2.png"};
 | 
				
			||||||
 | 
					constexpr absl::string_view kPenguinsLarge{"penguins_large.jpg"};
 | 
				
			||||||
 | 
					constexpr absl::string_view kPenguinsSmall{"penguins_small.jpg"};
 | 
				
			||||||
 | 
					constexpr absl::string_view kPenguinsSmallMask{"penguins_small_mask.png"};
 | 
				
			||||||
 | 
					constexpr absl::string_view kPenguinsLargeMask{"penguins_large_mask.png"};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
constexpr float kGoldenMaskSimilarity = 0.97;
 | 
					constexpr float kGoldenMaskSimilarity = 0.97;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -183,6 +188,7 @@ struct InteractiveSegmenterTestParams {
 | 
				
			||||||
  std::string test_name;
 | 
					  std::string test_name;
 | 
				
			||||||
  RegionOfInterest::Format format;
 | 
					  RegionOfInterest::Format format;
 | 
				
			||||||
  std::variant<NormalizedKeypoint, std::vector<NormalizedKeypoint>> roi;
 | 
					  std::variant<NormalizedKeypoint, std::vector<NormalizedKeypoint>> roi;
 | 
				
			||||||
 | 
					  absl::string_view input_image_file;
 | 
				
			||||||
  absl::string_view golden_mask_file;
 | 
					  absl::string_view golden_mask_file;
 | 
				
			||||||
  float similarity_threshold;
 | 
					  float similarity_threshold;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -220,8 +226,8 @@ TEST_P(SucceedSegmentationWithRoi, SucceedsWithCategoryMask) {
 | 
				
			||||||
  const InteractiveSegmenterTestParams& params = GetParam();
 | 
					  const InteractiveSegmenterTestParams& params = GetParam();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MP_ASSERT_OK_AND_ASSIGN(
 | 
					  MP_ASSERT_OK_AND_ASSIGN(
 | 
				
			||||||
      Image image,
 | 
					      Image image, DecodeImageFromFile(JoinPath("./", kTestDataDirectory,
 | 
				
			||||||
      DecodeImageFromFile(JoinPath("./", kTestDataDirectory, kCatsAndDogsJpg)));
 | 
					                                                params.input_image_file)));
 | 
				
			||||||
  auto options = std::make_unique<InteractiveSegmenterOptions>();
 | 
					  auto options = std::make_unique<InteractiveSegmenterOptions>();
 | 
				
			||||||
  options->base_options.model_asset_path =
 | 
					  options->base_options.model_asset_path =
 | 
				
			||||||
      JoinPath("./", kTestDataDirectory, kPtmModel);
 | 
					      JoinPath("./", kTestDataDirectory, kPtmModel);
 | 
				
			||||||
| 
						 | 
					@ -244,6 +250,15 @@ TEST_P(SucceedSegmentationWithRoi, SucceedsWithCategoryMask) {
 | 
				
			||||||
  EXPECT_THAT(actual_mask,
 | 
					  EXPECT_THAT(actual_mask,
 | 
				
			||||||
              SimilarToUint8Mask(expected_mask, params.similarity_threshold,
 | 
					              SimilarToUint8Mask(expected_mask, params.similarity_threshold,
 | 
				
			||||||
                                 kGoldenMaskMagnificationFactor));
 | 
					                                 kGoldenMaskMagnificationFactor));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  cv::Mat visualized_mask;
 | 
				
			||||||
 | 
					  actual_mask.convertTo(visualized_mask, CV_8UC1, /*alpha=*/255);
 | 
				
			||||||
 | 
					  ImageFrame visualized_image(mediapipe::ImageFormat::GRAY8,
 | 
				
			||||||
 | 
					                              visualized_mask.cols, visualized_mask.rows,
 | 
				
			||||||
 | 
					                              visualized_mask.step, visualized_mask.data,
 | 
				
			||||||
 | 
					                              [visualized_mask](uint8_t[]) {});
 | 
				
			||||||
 | 
					  MP_EXPECT_OK(SavePngTestOutput(
 | 
				
			||||||
 | 
					      visualized_image, absl::StrFormat("%s_category_mask", params.test_name)));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_P(SucceedSegmentationWithRoi, SucceedsWithConfidenceMask) {
 | 
					TEST_P(SucceedSegmentationWithRoi, SucceedsWithConfidenceMask) {
 | 
				
			||||||
| 
						 | 
					@ -252,8 +267,8 @@ TEST_P(SucceedSegmentationWithRoi, SucceedsWithConfidenceMask) {
 | 
				
			||||||
  const InteractiveSegmenterTestParams& params = GetParam();
 | 
					  const InteractiveSegmenterTestParams& params = GetParam();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MP_ASSERT_OK_AND_ASSIGN(
 | 
					  MP_ASSERT_OK_AND_ASSIGN(
 | 
				
			||||||
      Image image,
 | 
					      Image image, DecodeImageFromFile(JoinPath("./", kTestDataDirectory,
 | 
				
			||||||
      DecodeImageFromFile(JoinPath("./", kTestDataDirectory, kCatsAndDogsJpg)));
 | 
					                                                params.input_image_file)));
 | 
				
			||||||
  auto options = std::make_unique<InteractiveSegmenterOptions>();
 | 
					  auto options = std::make_unique<InteractiveSegmenterOptions>();
 | 
				
			||||||
  options->base_options.model_asset_path =
 | 
					  options->base_options.model_asset_path =
 | 
				
			||||||
      JoinPath("./", kTestDataDirectory, kPtmModel);
 | 
					      JoinPath("./", kTestDataDirectory, kPtmModel);
 | 
				
			||||||
| 
						 | 
					@ -275,6 +290,15 @@ TEST_P(SucceedSegmentationWithRoi, SucceedsWithConfidenceMask) {
 | 
				
			||||||
      result.confidence_masks->at(1).GetImageFrameSharedPtr().get());
 | 
					      result.confidence_masks->at(1).GetImageFrameSharedPtr().get());
 | 
				
			||||||
  EXPECT_THAT(actual_mask, SimilarToFloatMask(expected_mask_float,
 | 
					  EXPECT_THAT(actual_mask, SimilarToFloatMask(expected_mask_float,
 | 
				
			||||||
                                              params.similarity_threshold));
 | 
					                                              params.similarity_threshold));
 | 
				
			||||||
 | 
					  cv::Mat visualized_mask;
 | 
				
			||||||
 | 
					  actual_mask.convertTo(visualized_mask, CV_8UC1, /*alpha=*/255);
 | 
				
			||||||
 | 
					  ImageFrame visualized_image(mediapipe::ImageFormat::GRAY8,
 | 
				
			||||||
 | 
					                              visualized_mask.cols, visualized_mask.rows,
 | 
				
			||||||
 | 
					                              visualized_mask.step, visualized_mask.data,
 | 
				
			||||||
 | 
					                              [visualized_mask](uint8_t[]) {});
 | 
				
			||||||
 | 
					  MP_EXPECT_OK(SavePngTestOutput(
 | 
				
			||||||
 | 
					      visualized_image,
 | 
				
			||||||
 | 
					      absl::StrFormat("%s_confidence_mask", params.test_name)));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
INSTANTIATE_TEST_SUITE_P(
 | 
					INSTANTIATE_TEST_SUITE_P(
 | 
				
			||||||
| 
						 | 
					@ -282,21 +306,28 @@ INSTANTIATE_TEST_SUITE_P(
 | 
				
			||||||
    ::testing::ValuesIn<InteractiveSegmenterTestParams>(
 | 
					    ::testing::ValuesIn<InteractiveSegmenterTestParams>(
 | 
				
			||||||
        {// Keypoint input.
 | 
					        {// Keypoint input.
 | 
				
			||||||
         {"PointToDog1", RegionOfInterest::Format::kKeyPoint,
 | 
					         {"PointToDog1", RegionOfInterest::Format::kKeyPoint,
 | 
				
			||||||
          NormalizedKeypoint{0.44, 0.70}, kCatsAndDogsMaskDog1, 0.84f},
 | 
					          NormalizedKeypoint{0.44, 0.70}, kCatsAndDogsJpg, kCatsAndDogsMaskDog1,
 | 
				
			||||||
 | 
					          0.84f},
 | 
				
			||||||
         {"PointToDog2", RegionOfInterest::Format::kKeyPoint,
 | 
					         {"PointToDog2", RegionOfInterest::Format::kKeyPoint,
 | 
				
			||||||
          NormalizedKeypoint{0.66, 0.66}, kCatsAndDogsMaskDog2,
 | 
					          NormalizedKeypoint{0.66, 0.66}, kCatsAndDogsJpg, kCatsAndDogsMaskDog2,
 | 
				
			||||||
          kGoldenMaskSimilarity},
 | 
					          kGoldenMaskSimilarity},
 | 
				
			||||||
 | 
					         {"PenguinsSmall", RegionOfInterest::Format::kKeyPoint,
 | 
				
			||||||
 | 
					          NormalizedKeypoint{0.329, 0.545}, kPenguinsSmall, kPenguinsSmallMask,
 | 
				
			||||||
 | 
					          0.9f},
 | 
				
			||||||
 | 
					         {"PenguinsLarge", RegionOfInterest::Format::kKeyPoint,
 | 
				
			||||||
 | 
					          NormalizedKeypoint{0.329, 0.545}, kPenguinsLarge, kPenguinsLargeMask,
 | 
				
			||||||
 | 
					          0.9f},
 | 
				
			||||||
         // Scribble input.
 | 
					         // Scribble input.
 | 
				
			||||||
         {"ScribbleToDog1", RegionOfInterest::Format::kScribble,
 | 
					         {"ScribbleToDog1", RegionOfInterest::Format::kScribble,
 | 
				
			||||||
          std::vector{NormalizedKeypoint{0.44, 0.70},
 | 
					          std::vector{NormalizedKeypoint{0.44, 0.70},
 | 
				
			||||||
                      NormalizedKeypoint{0.44, 0.71},
 | 
					                      NormalizedKeypoint{0.44, 0.71},
 | 
				
			||||||
                      NormalizedKeypoint{0.44, 0.72}},
 | 
					                      NormalizedKeypoint{0.44, 0.72}},
 | 
				
			||||||
          kCatsAndDogsMaskDog1, 0.84f},
 | 
					          kCatsAndDogsJpg, kCatsAndDogsMaskDog1, 0.84f},
 | 
				
			||||||
         {"ScribbleToDog2", RegionOfInterest::Format::kScribble,
 | 
					         {"ScribbleToDog2", RegionOfInterest::Format::kScribble,
 | 
				
			||||||
          std::vector{NormalizedKeypoint{0.66, 0.66},
 | 
					          std::vector{NormalizedKeypoint{0.66, 0.66},
 | 
				
			||||||
                      NormalizedKeypoint{0.66, 0.67},
 | 
					                      NormalizedKeypoint{0.66, 0.67},
 | 
				
			||||||
                      NormalizedKeypoint{0.66, 0.68}},
 | 
					                      NormalizedKeypoint{0.66, 0.68}},
 | 
				
			||||||
          kCatsAndDogsMaskDog2, kGoldenMaskSimilarity}}),
 | 
					          kCatsAndDogsJpg, kCatsAndDogsMaskDog2, kGoldenMaskSimilarity}}),
 | 
				
			||||||
    [](const ::testing::TestParamInfo<SucceedSegmentationWithRoi::ParamType>&
 | 
					    [](const ::testing::TestParamInfo<SucceedSegmentationWithRoi::ParamType>&
 | 
				
			||||||
           info) { return info.param.test_name; });
 | 
					           info) { return info.param.test_name; });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										8
									
								
								mediapipe/tasks/testdata/vision/BUILD
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								mediapipe/tasks/testdata/vision/BUILD
									
									
									
									
										vendored
									
									
								
							| 
						 | 
					@ -69,6 +69,10 @@ mediapipe_files(srcs = [
 | 
				
			||||||
    "multi_objects.jpg",
 | 
					    "multi_objects.jpg",
 | 
				
			||||||
    "multi_objects_rotated.jpg",
 | 
					    "multi_objects_rotated.jpg",
 | 
				
			||||||
    "palm_detection_full.tflite",
 | 
					    "palm_detection_full.tflite",
 | 
				
			||||||
 | 
					    "penguins_large.jpg",
 | 
				
			||||||
 | 
					    "penguins_large_mask.png",
 | 
				
			||||||
 | 
					    "penguins_small.jpg",
 | 
				
			||||||
 | 
					    "penguins_small_mask.png",
 | 
				
			||||||
    "pointing_up.jpg",
 | 
					    "pointing_up.jpg",
 | 
				
			||||||
    "pointing_up_rotated.jpg",
 | 
					    "pointing_up_rotated.jpg",
 | 
				
			||||||
    "portrait.jpg",
 | 
					    "portrait.jpg",
 | 
				
			||||||
| 
						 | 
					@ -135,6 +139,10 @@ filegroup(
 | 
				
			||||||
        "mozart_square.jpg",
 | 
					        "mozart_square.jpg",
 | 
				
			||||||
        "multi_objects.jpg",
 | 
					        "multi_objects.jpg",
 | 
				
			||||||
        "multi_objects_rotated.jpg",
 | 
					        "multi_objects_rotated.jpg",
 | 
				
			||||||
 | 
					        "penguins_large.jpg",
 | 
				
			||||||
 | 
					        "penguins_large_mask.png",
 | 
				
			||||||
 | 
					        "penguins_small.jpg",
 | 
				
			||||||
 | 
					        "penguins_small_mask.png",
 | 
				
			||||||
        "pointing_up.jpg",
 | 
					        "pointing_up.jpg",
 | 
				
			||||||
        "pointing_up_rotated.jpg",
 | 
					        "pointing_up_rotated.jpg",
 | 
				
			||||||
        "portrait.jpg",
 | 
					        "portrait.jpg",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										28
									
								
								third_party/external_files.bzl
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								third_party/external_files.bzl
									
									
									
									
										vendored
									
									
								
							| 
						 | 
					@ -66,8 +66,8 @@ def external_files():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    http_file(
 | 
					    http_file(
 | 
				
			||||||
        name = "com_google_mediapipe_BUILD",
 | 
					        name = "com_google_mediapipe_BUILD",
 | 
				
			||||||
        sha256 = "d2b2a8346202691d7f831887c84e9642e974f64ed67851d9a58cf15c94b1f6b3",
 | 
					        sha256 = "cfbc1404ba18ee9eb0f08e9ee66d5b51f3fac47f683a5fa0cc23b46f30e05a1f",
 | 
				
			||||||
        urls = ["https://storage.googleapis.com/mediapipe-assets/BUILD?generation=1661875663693976167832357639365316787374795996401679955080207504"],
 | 
					        urls = ["https://storage.googleapis.com/mediapipe-assets/BUILD?generation=1686332366306166"],
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    http_file(
 | 
					    http_file(
 | 
				
			||||||
| 
						 | 
					@ -904,6 +904,30 @@ def external_files():
 | 
				
			||||||
        urls = ["https://storage.googleapis.com/mediapipe-assets/palm_detection_lite.tflite?generation=1661875885885770"],
 | 
					        urls = ["https://storage.googleapis.com/mediapipe-assets/palm_detection_lite.tflite?generation=1661875885885770"],
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http_file(
 | 
				
			||||||
 | 
					        name = "com_google_mediapipe_penguins_large_jpg",
 | 
				
			||||||
 | 
					        sha256 = "3a7a74bf946b3e2b53a3953516a552df854b2854c91b3372d2d6343497ca2160",
 | 
				
			||||||
 | 
					        urls = ["https://storage.googleapis.com/mediapipe-assets/penguins_large.jpg?generation=1686332378707665"],
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http_file(
 | 
				
			||||||
 | 
					        name = "com_google_mediapipe_penguins_large_mask_png",
 | 
				
			||||||
 | 
					        sha256 = "8f78486266dabb1a3f28bf52750c0d005f96233fe505d5e8dcba02c6ee3a13cb",
 | 
				
			||||||
 | 
					        urls = ["https://storage.googleapis.com/mediapipe-assets/penguins_large_mask.png?generation=1686332381154669"],
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http_file(
 | 
				
			||||||
 | 
					        name = "com_google_mediapipe_penguins_small_jpg",
 | 
				
			||||||
 | 
					        sha256 = "708ca356d8be4fbf5b76d4f2fcd094e97122cc24934cfcca22ac3ab0f13c4632",
 | 
				
			||||||
 | 
					        urls = ["https://storage.googleapis.com/mediapipe-assets/penguins_small.jpg?generation=1686332383656645"],
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http_file(
 | 
				
			||||||
 | 
					        name = "com_google_mediapipe_penguins_small_mask_png",
 | 
				
			||||||
 | 
					        sha256 = "65523dd7ed468ee4be3cd0cfed5badcfa41eaa5cd06444c9ab9b71b2d5951abe",
 | 
				
			||||||
 | 
					        urls = ["https://storage.googleapis.com/mediapipe-assets/penguins_small_mask.png?generation=1686332385707707"],
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    http_file(
 | 
					    http_file(
 | 
				
			||||||
        name = "com_google_mediapipe_pointing_up_jpg",
 | 
					        name = "com_google_mediapipe_pointing_up_jpg",
 | 
				
			||||||
        sha256 = "ecf8ca2611d08fa25948a4fc10710af9120e88243a54da6356bacea17ff3e36e",
 | 
					        sha256 = "ecf8ca2611d08fa25948a4fc10710af9120e88243a54da6356bacea17ff3e36e",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user