|
from typing import List |
|
|
|
from inference.core.entities.responses.inference import Keypoint |
|
from inference.core.exceptions import ModelArtefactError |
|
|
|
|
|
def superset_keypoints_count(keypoints_metadata={}) -> int: |
|
"""Returns the number of keypoints in the superset.""" |
|
max_keypoints = 0 |
|
for keypoints in keypoints_metadata.values(): |
|
if len(keypoints) > max_keypoints: |
|
max_keypoints = len(keypoints) |
|
return max_keypoints |
|
|
|
|
|
def model_keypoints_to_response( |
|
keypoints_metadata: dict, |
|
keypoints: List[float], |
|
predicted_object_class_id: int, |
|
keypoint_confidence_threshold: float, |
|
) -> List[Keypoint]: |
|
if keypoints_metadata is None: |
|
raise ModelArtefactError("Keypoints metadata not available.") |
|
keypoint_id2name = keypoints_metadata[predicted_object_class_id] |
|
results = [] |
|
for keypoint_id in range(len(keypoints) // 3): |
|
if keypoint_id >= len(keypoint_id2name): |
|
|
|
break |
|
confidence = keypoints[3 * keypoint_id + 2] |
|
if confidence < keypoint_confidence_threshold: |
|
continue |
|
keypoint = Keypoint( |
|
x=keypoints[3 * keypoint_id], |
|
y=keypoints[3 * keypoint_id + 1], |
|
confidence=confidence, |
|
class_id=keypoint_id, |
|
class_name=keypoint_id2name[keypoint_id], |
|
) |
|
results.append(keypoint) |
|
return results |
|
|