41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
import numpy as np
|
|
|
|
class CalcScaledPoseDiff:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"adjusted_pose": ("POSE_KEYPOINT", {}),
|
|
"scaled_pose": ("POSE_KEYPOINT", {}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("POSE_KEYPOINT",)
|
|
RETURN_NAMES = ("scaled_pose_diff",)
|
|
FUNCTION = "calc_diff"
|
|
CATEGORY = "Snap Processing"
|
|
|
|
def _extract_pose(self, data):
|
|
if isinstance(data, list):
|
|
data = data[0]
|
|
return np.array(data["people"][0]["pose_keypoints_2d"]).reshape(-1, 3)
|
|
|
|
def calc_diff(self, adjusted_pose, scaled_pose):
|
|
adj_pose = self._extract_pose(adjusted_pose)
|
|
scl_pose = self._extract_pose(scaled_pose)
|
|
if adj_pose.shape != scl_pose.shape:
|
|
raise ValueError("Pose shapes mismatch.")
|
|
diff = scl_pose - adj_pose
|
|
diff_list = diff.reshape(-1).tolist()
|
|
result = [{
|
|
"people": [{
|
|
"pose_keypoints_2d": diff_list,
|
|
"face_keypoints_2d": [],
|
|
"hand_left_keypoints_2d": [],
|
|
"hand_right_keypoints_2d": []
|
|
}],
|
|
"canvas_width": 0,
|
|
"canvas_height": 0
|
|
}]
|
|
return (result,)
|