diff --git a/mediapipe/calculators/util/non_max_suppression_calculator.cc b/mediapipe/calculators/util/non_max_suppression_calculator.cc index 1ea1b3d6b..5721deba5 100644 --- a/mediapipe/calculators/util/non_max_suppression_calculator.cc +++ b/mediapipe/calculators/util/non_max_suppression_calculator.cc @@ -199,6 +199,9 @@ class NonMaxSuppressionCalculator : public CalculatorBase { if (options_.return_empty_detections()) { cc->Outputs().Index(0).Add(new Detections(), cc->InputTimestamp()); } + if (options_.error_on_empty_detections()) { + return ::mediapipe::InternalError("NonMaxSuppression received empty detections, but detections are required for this pipeline."); + } return ::mediapipe::OkStatus(); } diff --git a/mediapipe/calculators/util/non_max_suppression_calculator.proto b/mediapipe/calculators/util/non_max_suppression_calculator.proto index 5fa960497..f241f125c 100644 --- a/mediapipe/calculators/util/non_max_suppression_calculator.proto +++ b/mediapipe/calculators/util/non_max_suppression_calculator.proto @@ -58,6 +58,9 @@ message NonMaxSuppressionCalculatorOptions { // Whether to put empty detection vector in output stream. optional bool return_empty_detections = 5; + // Whether to throw an error on an empty input detection vector + optional bool error_on_empty_detections = 8; + // Algorithms that can be used to apply non-maximum suppression. enum NmsAlgorithm { DEFAULT = 0; diff --git a/mediapipe/modules/face_detection/face_detection_front_cpu.pbtxt b/mediapipe/modules/face_detection/face_detection_front_cpu.pbtxt index fda86fc50..8644af112 100644 --- a/mediapipe/modules/face_detection/face_detection_front_cpu.pbtxt +++ b/mediapipe/modules/face_detection/face_detection_front_cpu.pbtxt @@ -128,6 +128,7 @@ node { min_suppression_threshold: 0.3 overlap_type: INTERSECTION_OVER_UNION algorithm: WEIGHTED + error_on_empty_detections: true } } }