From 0981367e842c8dfd0ba1b7e6c646a4bd78fa1213 Mon Sep 17 00:00:00 2001 From: MediaPipe Team Date: Thu, 23 Feb 2023 14:09:26 -0800 Subject: [PATCH] DetectionTransformationCalculator handles empty input. PiperOrigin-RevId: 511881969 --- .../detection_transformation_calculator.cc | 3 ++ ...etection_transformation_calculator_test.cc | 36 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/mediapipe/calculators/util/detection_transformation_calculator.cc b/mediapipe/calculators/util/detection_transformation_calculator.cc index 43030dbe..3eac315f 100644 --- a/mediapipe/calculators/util/detection_transformation_calculator.cc +++ b/mediapipe/calculators/util/detection_transformation_calculator.cc @@ -227,6 +227,9 @@ class DetectionTransformationCalculator : public Node { std::pair image_size = kInImageSize(cc).Get(); std::vector transformed_detections; LocationData::Format input_location_data_format; + if (kInDetections(cc).IsEmpty() && kInDetection(cc).IsEmpty()) { + return absl::OkStatus(); + } if (kInDetections(cc).IsConnected()) { transformed_detections = kInDetections(cc).Visit( [&](const DetectionList& detection_list) { diff --git a/mediapipe/calculators/util/detection_transformation_calculator_test.cc b/mediapipe/calculators/util/detection_transformation_calculator_test.cc index 48291b2d..e280b515 100644 --- a/mediapipe/calculators/util/detection_transformation_calculator_test.cc +++ b/mediapipe/calculators/util/detection_transformation_calculator_test.cc @@ -161,6 +161,42 @@ TEST(DetectionsTransformationCalculatorTest, WrongLocationDataFormat) { "RELATIVE_BOUNDING_BOX or BOUNDING_BOX")); } +TEST(DetectionsTransformationCalculatorTest, EmptyDetection) { + CalculatorRunner runner(ParseTextProtoOrDie(R"pb( + calculator: "DetectionTransformationCalculator" + input_stream: "DETECTION:input_detection" + input_stream: "IMAGE_SIZE:image_size" + output_stream: "PIXEL_DETECTION:output_detection" + )pb")); + + std::pair image_size({2000, 1000}); + runner.MutableInputs() + ->Tag(kImageSizeTag) + .packets.push_back( + MakePacket>(image_size).At(Timestamp(0))); + + auto status = runner.Run(); + ASSERT_TRUE(status.ok()); +} + +TEST(DetectionsTransformationCalculatorTest, EmptyDetections) { + CalculatorRunner runner(ParseTextProtoOrDie(R"pb( + calculator: "DetectionTransformationCalculator" + input_stream: "DETECTIONS:input_detection" + input_stream: "IMAGE_SIZE:image_size" + output_stream: "PIXEL_DETECTIONS:output_detection" + )pb")); + + std::pair image_size({2000, 1000}); + runner.MutableInputs() + ->Tag(kImageSizeTag) + .packets.push_back( + MakePacket>(image_size).At(Timestamp(0))); + + auto status = runner.Run(); + ASSERT_TRUE(status.ok()); +} + TEST(DetectionsTransformationCalculatorTest, ConvertBoundingBoxToRelativeBoundingBox) { CalculatorRunner runner(ParseTextProtoOrDie(R"pb(