G-API: Removing ParseSSD overload.
* Removed specialization.
* Removed united
const float confidenceThreshold = 0.5f,
const int filterLabel = -1);
-/** @overload
+/** @brief Parses output of SSD network.
+
Extracts detection information (box, confidence) from SSD output and
filters it by given confidence and by going out of bounds.
*/
GAPI_EXPORTS_W GArray<Rect> parseSSD(const GMat& in,
const GOpaque<Size>& inSz,
- const float confidenceThreshold = 0.5f,
- const bool alignmentToSquare = false,
- const bool filterOutOfBounds = false);
+ const float confidenceThreshold,
+ const bool alignmentToSquare,
+ const bool filterOutOfBounds);
/** @brief Parses output of Yolo network.
std::vector<cv::Rect>& out_boxes,
std::vector<int>& out_labels)
{
- cv::parseSSDBL(in_ssd_result, in_size, confidence_threshold, filter_label, out_boxes, out_labels);
+ cv::ParseSSD(in_ssd_result, in_size,
+ confidence_threshold,
+ filter_label,
+ false,
+ false,
+ out_boxes, out_labels);
}
};
const bool filter_out_of_bounds,
std::vector<cv::Rect>& out_boxes)
{
- cv::parseSSD(in_ssd_result, in_size, confidence_threshold, alignment_to_square, filter_out_of_bounds, out_boxes);
+ std::vector<int> unused_labels;
+ cv::ParseSSD(in_ssd_result, in_size,
+ confidence_threshold,
+ -1,
+ alignment_to_square,
+ filter_out_of_bounds,
+ out_boxes, unused_labels);
}
};
} // namespace nn
} // namespace gapi
-void parseSSDBL(const cv::Mat& in_ssd_result,
- const cv::Size& in_size,
- const float confidence_threshold,
- const int filter_label,
- std::vector<cv::Rect>& out_boxes,
- std::vector<int>& out_labels)
-{
- cv::gapi::nn::SSDParser parser(in_ssd_result.size, in_size, in_ssd_result.ptr<float>());
- out_boxes.clear();
- out_labels.clear();
- cv::Rect rc;
- float image_id, confidence;
- int label;
- const size_t range = parser.getMaxProposals();
- for (size_t i = 0; i < range; ++i)
- {
- std::tie(rc, image_id, confidence, label) = parser.extract(i);
-
- if (image_id < 0.f)
- {
- break; // marks end-of-detections
- }
-
- if (confidence < confidence_threshold ||
- (filter_label != -1 && label != filter_label))
- {
- continue; // filter out object classes if filter is specified
- } // and skip objects with low confidence
- out_boxes.emplace_back(rc & parser.getSurface());
- out_labels.emplace_back(label);
- }
-}
-
-void parseSSD(const cv::Mat& in_ssd_result,
+void ParseSSD(const cv::Mat& in_ssd_result,
const cv::Size& in_size,
const float confidence_threshold,
+ const int filter_label,
const bool alignment_to_square,
const bool filter_out_of_bounds,
- std::vector<cv::Rect>& out_boxes)
+ std::vector<cv::Rect>& out_boxes,
+ std::vector<int>& out_labels)
{
cv::gapi::nn::SSDParser parser(in_ssd_result.size, in_size, in_ssd_result.ptr<float>());
out_boxes.clear();
+ out_labels.clear();
cv::Rect rc;
float image_id, confidence;
int label;
{
continue; // skip objects with low confidence
}
-
+ if((filter_label != -1) && (label != filter_label))
+ {
+ continue; // filter out object classes if filter is specified
+ }
if (alignment_to_square)
{
parser.adjustBoundingBox(rc);
}
-
const auto clipped_rc = rc & parser.getSurface();
if (filter_out_of_bounds)
{
}
}
out_boxes.emplace_back(clipped_rc);
+ out_labels.emplace_back(label);
}
}
namespace cv
{
-void parseSSDBL(const cv::Mat& in_ssd_result,
- const cv::Size& in_size,
- const float confidence_threshold,
- const int filter_label,
- std::vector<cv::Rect>& out_boxes,
- std::vector<int>& out_labels);
-
-void parseSSD(const cv::Mat& in_ssd_result,
+void ParseSSD(const cv::Mat& in_ssd_result,
const cv::Size& in_size,
const float confidence_threshold,
+ const int filter_label,
const bool alignment_to_square,
const bool filter_out_of_bounds,
- std::vector<cv::Rect>& out_boxes);
+ std::vector<cv::Rect>& out_boxes,
+ std::vector<int>& out_labels);
void parseYolo(const cv::Mat& in_yolo_result,
const cv::Size& in_size,