ObjectDetection<T>::getOutputNames(names);
- for (auto &name : names)
- LOGD("output tensor name : %s", name.c_str());
-
vector<float> output_tensor;
// output layer name is yolov10s/yolov8_nms_postprocess
auto scoreMetaInfo = _config->getOutputMetaMap().at(names[0]);
auto decodingScore = static_pointer_cast<DecodingScore>(scoreMetaInfo->decodingTypeMap[DecodingType::SCORE]);
- LOGD("threshold = %f", decodingScore->threshold);
-
auto ori_src_width = static_cast<float>(_preprocess.getImageWidth()[0]);
auto ori_src_height = static_cast<float>(_preprocess.getImageHeight()[0]);
- auto input_tensor_width = static_cast<float>(_inference->getInputWidth());
- auto input_tensor_height = static_cast<float>(_inference->getInputHeight());
-
- // Calculates the width and height ratios between the original source dimensions and the input tensor dimensions.
- auto width_ratio = ori_src_width / input_tensor_width;
- auto height_ratio = ori_src_height / input_tensor_height;
-
unsigned int class_id = 0;
size_t tensor_idx = 0;
// Calculates the coordinates of a bounding box from the output tensor values.
// - It computes the top, left, bottom, and right coordinates of a bounding box
// based on the given output tensor values and scaling factors for height and width.
- top = height_ratio * input_tensor_height * output_tensor[tensor_idx++];
- left = width_ratio * input_tensor_width * output_tensor[tensor_idx++];
- bottom = height_ratio * input_tensor_height * output_tensor[tensor_idx++];
- right = width_ratio * input_tensor_width * output_tensor[tensor_idx++];
+ top = ori_src_height * output_tensor[tensor_idx++];
+ left = ori_src_width * output_tensor[tensor_idx++];
+ bottom = ori_src_height * output_tensor[tensor_idx++];
+ right = ori_src_width * output_tensor[tensor_idx++];
confidence = output_tensor[tensor_idx++];
if (confidence < decodingScore->threshold)
continue;