update detection result to include optional keypoints.
PiperOrigin-RevId: 511538880
This commit is contained in:
parent
c026f935bc
commit
fbbc13d756
|
@ -55,6 +55,21 @@ Detection ConvertToDetectionResult(
|
||||||
bounding_box_proto.ymin() + bounding_box_proto.height();
|
bounding_box_proto.ymin() + bounding_box_proto.height();
|
||||||
}
|
}
|
||||||
detection.bounding_box = bounding_box;
|
detection.bounding_box = bounding_box;
|
||||||
|
if (!detection_proto.location_data().relative_keypoints().empty()) {
|
||||||
|
detection.keypoints = std::vector<NormalizedKeypoint>();
|
||||||
|
detection.keypoints->reserve(
|
||||||
|
detection_proto.location_data().relative_keypoints_size());
|
||||||
|
for (const auto& keypoint :
|
||||||
|
detection_proto.location_data().relative_keypoints()) {
|
||||||
|
detection.keypoints->push_back(
|
||||||
|
{keypoint.x(), keypoint.y(),
|
||||||
|
keypoint.has_keypoint_label()
|
||||||
|
? std::make_optional(keypoint.keypoint_label())
|
||||||
|
: std::nullopt,
|
||||||
|
keypoint.has_score() ? std::make_optional(keypoint.score())
|
||||||
|
: std::nullopt});
|
||||||
|
}
|
||||||
|
}
|
||||||
return detection;
|
return detection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,12 +26,31 @@ limitations under the License.
|
||||||
|
|
||||||
namespace mediapipe::tasks::components::containers {
|
namespace mediapipe::tasks::components::containers {
|
||||||
|
|
||||||
|
// A keypoint, defined by the coordinates (x, y), normalized
|
||||||
|
// by the image dimensions.
|
||||||
|
struct NormalizedKeypoint {
|
||||||
|
// x in normalized image coordinates.
|
||||||
|
float x;
|
||||||
|
// y in normalized image coordinates.
|
||||||
|
float y;
|
||||||
|
// optional label of the keypoint.
|
||||||
|
std::optional<std::string> label;
|
||||||
|
// optional score of the keypoint.
|
||||||
|
std::optional<float> score;
|
||||||
|
};
|
||||||
|
|
||||||
// Detection for a single bounding box.
|
// Detection for a single bounding box.
|
||||||
struct Detection {
|
struct Detection {
|
||||||
// A vector of detected categories.
|
// A vector of detected categories.
|
||||||
std::vector<Category> categories;
|
std::vector<Category> categories;
|
||||||
// The bounding box location.
|
// The bounding box location.
|
||||||
Rect bounding_box;
|
Rect bounding_box;
|
||||||
|
// Optional list of keypoints associated with the detection. Keypoints
|
||||||
|
// represent interesting points related to the detection. For example, the
|
||||||
|
// keypoints represent the eye, ear and mouth from face detection model. Or
|
||||||
|
// in the template matching detection, e.g. KNIFT, they can represent the
|
||||||
|
// feature points for template matching.
|
||||||
|
std::optional<std::vector<NormalizedKeypoint>> keypoints = std::nullopt;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Detection results of a model.
|
// Detection results of a model.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user