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(