From a3fadc205338f96609176311e0fcac2062d4ccb2 Mon Sep 17 00:00:00 2001 From: YangJX <7196390@qq.com> Date: Tue, 27 May 2025 14:58:57 +0800 Subject: [PATCH] Add files via upload improved method for pose inter, so make a V2 node. Add new function: pose modify node, --- __init__.py | 729 +++++++++++++++++++++++++++++++++++++++++++++++- poseInterV2.jpg | Bin 0 -> 64650 bytes poseModify.jpg | Bin 0 -> 40634 bytes 3 files changed, 724 insertions(+), 5 deletions(-) create mode 100644 poseInterV2.jpg create mode 100644 poseModify.jpg diff --git a/__init__.py b/__init__.py index 23849c1..d475e51 100644 --- a/__init__.py +++ b/__init__.py @@ -6,7 +6,7 @@ import cv2 import numpy as np import folder_paths import os - +import math connect_color = [ [ 0, 0, 255], @@ -42,8 +42,489 @@ skeleton = [ [12, 13], [14, 0], [14, 16], [15, 0], [15, 17] ] +bonesPoints = [ +[1,0],# neck +[0,14 ],#right eye +[0,15 ],#left eye +[14,16 ],# right ear +[15,17 ],# left ear +[1,2 ],#right shoulder +[1,5 ],#left shoulder +[2,3 ],#right elbow +[5,6 ],#left elbow +[3,4 ],#right wrist +[6,7 ],#left wrist +[1,8 ],#right hip +[1,11 ],#left hip +[8,9 ],#right knee +[11,12 ],# left knee +[9,10 ],#right ankle +[12,13 ] # left ankle +] -def gen_skeleton(pose_keypoints_2d, canvas_width, canvas_height,landmarkType): +class HumanPart: + def __init__(self, index): + self.index = index + self.abs_x = 0.0 #绝对坐标 + self.abs_y = 0.0 # 绝对坐标 + self.length = 0.0 #长度 + self.score=1.0 #置信度 + self.abs_angle=0.0 #绝对角度 + self.ref_angle=0.0 #相对角度 + self.children = [] #子物体 + self.ref_scale=1.0 + self.abs_scale=1.0 + self.parent = None #父物体 + + def SetParent(self, parent): + self.parent = parent + parent.children.append(self) + + #根据相对角度和长度计算绝对坐标 + def Update(self): + + # 如果有父节点,则更新绝对位置和角度 + if self.parent is not None: + if self.score > 0.0: + # 更新绝对缩放 + self.abs_scale = self.parent.abs_scale * self.ref_scale + # 更新绝对角度 + self.abs_angle = self.parent.abs_angle + self.ref_angle + # 更新绝对x坐标 + self.abs_x = self.parent.abs_x + self.length * math.cos(self.abs_angle)* self.abs_scale + # 更新绝对y坐标 + self.abs_y = self.parent.abs_y + self.length * math.sin(self.abs_angle)* self.abs_scale + else: + # 如果没有父节点,则绝对角度和缩放等于参考角度和缩放 + self.abs_angle = self.ref_angle + self.abs_scale = self.ref_scale + #self.score=1.0 + # 遍历子节点,递归调用Update方法 + for child in self.children: + child.Update() + + #根据绝对位置,计算角度、相对位置和相对角度 + def CalculateRef(self): + + # 如果有父节点,则更新相对位置和角度 + if self.parent is not None: + if self.score > 0.0: + self.length = math.sqrt((self.abs_x - self.parent.abs_x)**2 + (self.abs_y - self.parent.abs_y)**2) + self.abs_angle =math.atan2(self.abs_y - self.parent.abs_y, self.abs_x - self.parent.abs_x) + self.ref_angle = self.abs_angle - self.parent.abs_angle + self.ref_scale = self.abs_scale / self.parent.abs_scale + #如果父节点score为0,而本节点score为1,那么这个节点就只有abs_x,abs_y是可靠的,其他都是不可靠的 + #除非使用IK算法,否则无法计算可靠的角度和长度。超出了这个插件编写的本意。留着以后优化吧。 + #openpose的线条,在两个端点都可靠的情况下才会绘制。因此本插件即使不计算这个骨骼,也不影响绘制。 + #本插件还有猜测不可靠节点的位置的功能,不放在这个函数里处理,是因为这个函数是递归调用的,放在这里的话,猜测的位置会不断被覆盖。 + #猜测功能用在pose interpolation里,因为设计本意里,pose interpolation的输入来自两张不同的图片,里面的可靠节点数量不一致,所以需要猜测不可靠节点的位置。 + + else: + self.length = 0.0 + self.ref_angle = 0.0 + self.abs_angle= 0.0 + + # 遍历子节点,递归调用Update方法 + for child in self.children: + child.CalculateRef() + + + +class HumanDoll: + def __init__(self, canvas_width, canvas_height): + self.canvas_width = canvas_width + self.canvas_height = canvas_height + + self.parts = [None] * (len(bonesPoints) + 1) + self.keyPoints=[] + + self.RootPart = HumanPart(1) # 根部 固定长度为0,对应keypoints[1]的位置 + self.abs_x = canvas_width / 2 + self.abs_y = canvas_height / 3 + self.RootPart.abs_x = canvas_width / 2 + self.RootPart.abs_y = canvas_height / 3 + self.RootPart.ref_angle = 0.0 + self.RootPart.score = 1.0 + self.parts[1] = self.RootPart + + for (p,c) in bonesPoints: # p为父节点,c为子节点 + child = HumanPart(c) + child.SetParent(self.parts[p]) + self.parts[c] = child + + def UpdateByKeypoints(self, keypoints): + self.keyPoints = keypoints + for i, keypoint in enumerate(keypoints): + if keypoint is not None: + self.parts[i].abs_x = keypoint[0] + self.parts[i].abs_y = keypoint[1] + self.parts[i].score = keypoint[2] + else: + self.parts[i].score = 0.0 + self.RootPart.CalculateRef() + + def UpdateByParts(self): + self.RootPart.Update() + for i in range(len(self.keyPoints)): + self.keyPoints[i] = (self.parts[i].abs_x, self.parts[i].abs_y, self.parts[i].score) + + def Draw(self, width, height,draw_all=False): + # 在这里实现绘制函数 + return keyPoints_2_image(self.keyPoints, width, height,draw_all) + + def guessMissingParts(self): + # 在这里实现猜测缺失部分的功能。用于pose interpolation + doll_T_Pose = HumanDoll(self.canvas_width,self.canvas_height) + keyPoints = gen_t_pose_keypoints(self.canvas_width,self.canvas_height) + doll_T_Pose.UpdateByKeypoints(keyPoints) + # 定义各部位缺失时的参考顺序数组 + # 格式为:(目标部位索引, [参考部位列表按优先级排序]) + reference_order = [ + (0, [2,5,8,11]), # 补充头部(部位0)时参考的顺序 + (2, [5,8,11,0]), # 补充右肩(部位2)时参考的顺序 + (5, [2,8,11,0]), # 补充左肩(部位5)时参考的顺序 + (8, [11,2,5,0]), # 补充右髋(部位8)时参考的顺序 + (11, [8,2,5,0]), # 补充左髋(部位11)时参考的顺序 + (3, [6,2,8,11,0]), # 补充右上臂(部位3)时参考的顺序 + (6, [3,2,11,8,0]), # 补充左上臂(部位6)时参考的顺序 + (4, [3,7,2,5,8,11,0]), # 补充右前臂(部位4)时参考的顺序 + (7, [4,6,5,3,2,8,11,0]), # 补充左前臂(部位7)时参考的顺序 + (9, [12,8,11,2,5,0]), # 补充右大腿(部位9)时参考的顺序 + (12, [9,11,8,5,2,0]), # 补充左大腿(部位12)时参考的顺序 + (10, [13,9,12,8,11,2,5,0]), # 补充右小腿(部位10)时参考的顺序 + (13, [10,12,9,11,8,2,5,0]), # 补充左小腿(部位13)时参考的顺序 + + #以上都是以父节点长度参考缺失节点长度,而角度则从t-pose中复制 + + #但是脸上的部位,需要另外的算法。实际运行中出现过耳朵可靠而眼睛不可靠的情况,因此需要另外的算法 + # (14, [15,0]), # 补充右眼睛(部位14)时参考的顺序 + # (15, [14,0]), # 补充左眼睛(部位15)时参考的顺序 + # (16, [17,14,15,0]), # 补充右耳朵(部位16)时参考的顺序 + # (17, [16,15,14,0]), # 补充左耳朵(部位17)时参考的顺序 + + # 其他部位的参考规则可以继续添加 + # ... + ] + + # 遍历所有定义好的参考规则 + for target_part, reference_parts in reference_order: + # 跳过1号部位(根据需求描述1号部位不会缺失) + if target_part == 1: + continue + + # 如果目标部位缺失(分数为0) + if self.parts[target_part].score == 0.0: + + # 标记为已尝试修复 + self.parts[target_part].score = 1.0 + # 复制T姿态下的参考角度 + self.parts[target_part].ref_angle = doll_T_Pose.parts[target_part].ref_angle + + # 遍历参考部位列表,按优先级尝试补充数据 + for ref_part in reference_parts: + if self.parts[ref_part].score > 0.0: + # 使用参考部位数据补充目标部位长度 + # 比例因子:目标部位在T姿态下的长度 / 参考部位在T姿态下的长度 + ratio = doll_T_Pose.parts[target_part].length / doll_T_Pose.parts[ref_part].length + #if target_part == 16 or target_part == 17: + + self.parts[target_part].length = self.parts[ref_part].length * ratio + #print(f"[{target_part}]-[{ref_part}]-ratio:{ratio}- self.parts[ref_part].length:{self.parts[ref_part].length} - result_length:{self.parts[target_part].length}") + break # 找到第一个有效参考后退出循环 + else: + # 如果所有参考部位都无效,重置分数 + self.parts[target_part].score = 0.0 + + #现在处理右眼。如果右眼缺失,则根据左耳朵和鼻子的位置计算 + if self.parts[14].score == 0.0: + self.parts[14].score=1.0 + if self.parts[16].score > 0.0 and self.parts[0].score > 0.0: + self.parts[14].abs_x = (self.parts[16].abs_x + self.parts[0].abs_x)/2 + self.parts[14].abs_y = (self.parts[16].abs_y + self.parts[0].abs_y)/2 + self.parts[14].CalculateRef() + elif self.parts[0].score > 0.0: + ratio = doll_T_Pose.parts[14].length / doll_T_Pose.parts[0].length + self.parts[14].length = self.parts[0].length * ratio + else: + self.parts[14].score = 0.0 + + #现在处理左眼。如果左眼缺失,则根据右耳朵和鼻子的位置计算 + if self.parts[15].score == 0.0: + self.parts[15].score=1.0 + if self.parts[17].score > 0.0 and self.parts[0].score > 0.0: + self.parts[15].abs_x = (self.parts[17].abs_x + self.parts[0].abs_x)/2 + self.parts[15].abs_y = (self.parts[17].abs_y + self.parts[0].abs_y)/2 + self.parts[15].CalculateRef() + elif self.parts[0].score > 0.0: + ratio = doll_T_Pose.parts[15].length / doll_T_Pose.parts[0].length + self.parts[15].length = self.parts[0].length * ratio + else: + self.parts[15].score = 0.0 + + reference_order_part2 = [ + + (16, [17,14,15,0]), # 补充右耳朵(部位16)时参考的顺序 + (17, [16,15,14,0]), # 补充左耳朵(部位17)时参考的顺序 + + ] + + for target_part, reference_parts in reference_order_part2: + # 跳过1号部位(根据需求描述1号部位不会缺失) + if target_part == 1: + continue + + # 如果目标部位缺失(分数为0) + if self.parts[target_part].score == 0.0: + + # 标记为已尝试修复 + self.parts[target_part].score = 1.0 + # 复制T姿态下的参考角度 + self.parts[target_part].ref_angle = doll_T_Pose.parts[target_part].ref_angle + + # 遍历参考部位列表,按优先级尝试补充数据 + for ref_part in reference_parts: + if self.parts[ref_part].score > 0.0: + # 使用参考部位数据补充目标部位长度 + # 比例因子:目标部位在T姿态下的长度 / 参考部位在T姿态下的长度 + ratio = doll_T_Pose.parts[target_part].length / doll_T_Pose.parts[ref_part].length + #if target_part == 16 or target_part == 17: + + self.parts[target_part].length = self.parts[ref_part].length * ratio + #print(f"[{target_part}]-[{ref_part}]-ratio:{ratio}- self.parts[ref_part].length:{self.parts[ref_part].length} - result_length:{self.parts[target_part].length}") + break # 找到第一个有效参考后退出循环 + else: + # 如果所有参考部位都无效,重置分数 + self.parts[target_part].score = 0.0 + + #现在处理右眼。如果右眼缺失,则根据左耳朵和鼻子的位置计算 + + print("修复完成") + + + + + + + + + + + +def gen_t_pose_keypoints(canvas_width, canvas_height): + # 初始化关键点数组 + keyPoints = [None] * (len(bonesPoints) + 1) + + # 定义起始点(1号关键点,颈部)的位置 + start_x = canvas_width / 2 + start_y = canvas_height / 4 + keyPoints[1] = (start_x, start_y, 1.0) + + # 定义骨骼长度 + neck_length = canvas_height / 10 + shoulder_length = canvas_width / 8 + arm_length = canvas_width / 6 + hip_width = shoulder_length + hip_height = canvas_height / 4 + leg_length = canvas_height / 5 + head_radius = canvas_height / 15 # 头部半径 + eye_distance = canvas_width / 10 # 眼睛间距 + ear_distance = canvas_width / 10 # 耳朵间距 + + # 计算0号关键点(头部中心)的位置 + head_center_x = start_x + head_center_y = start_y - neck_length + keyPoints[0] = (head_center_x, head_center_y, 1.0) + + # 计算右肩(2号关键点)的位置 + right_shoulder_x = start_x - shoulder_length + right_shoulder_y = start_y + keyPoints[2] = (right_shoulder_x, right_shoulder_y, 1.0) + + # 计算左肩(5号关键点)的位置 + left_shoulder_x = start_x + shoulder_length + left_shoulder_y = start_y + keyPoints[5] = (left_shoulder_x, left_shoulder_y, 1.0) + + # 计算右肘(3号关键点)的位置 + right_elbow_x = right_shoulder_x - arm_length + right_elbow_y = right_shoulder_y + keyPoints[3] = (right_elbow_x, right_elbow_y, 1.0) + + # 计算左肘(6号关键点)的位置 + left_elbow_x = left_shoulder_x + arm_length + left_elbow_y = left_shoulder_y + keyPoints[6] = (left_elbow_x, left_elbow_y, 1.0) + + # 计算右手腕(4号关键点)的位置 + right_wrist_x = right_elbow_x - arm_length + right_wrist_y = right_elbow_y + keyPoints[4] = (right_wrist_x, right_wrist_y, 1.0) + + # 计算左手腕(7号关键点)的位置 + left_wrist_x = left_elbow_x+ arm_length + left_wrist_y = left_elbow_y + keyPoints[7] = (left_wrist_x, left_wrist_y, 1.0) + + # 计算右髋(8号关键点)的位置 + right_hip_x = start_x - hip_width + right_hip_y = start_y + hip_height + keyPoints[8] = (right_hip_x, right_hip_y, 1.0) + + # 计算左髋(11号关键点)的位置 + left_hip_x = start_x + hip_width + left_hip_y = start_y + hip_height + keyPoints[11] = (left_hip_x, left_hip_y, 1.0) + + # 计算右膝(9号关键点)的位置 + right_knee_x = right_hip_x + right_knee_y = right_hip_y + leg_length + keyPoints[9] = (right_knee_x, right_knee_y, 1.0) + + # 计算左膝(12号关键点)的位置 + left_knee_x = left_hip_x + left_knee_y = left_hip_y + leg_length + keyPoints[12] = (left_knee_x, left_knee_y, 1.0) + + # 计算右脚踝(10号关键点)的位置 + right_ankle_x = right_knee_x + right_ankle_y = right_knee_y + leg_length + keyPoints[10] = (right_ankle_x, right_ankle_y, 1.0) + + # 计算左脚踝(13号关键点)的位置 + left_ankle_x = left_knee_x + left_ankle_y = left_knee_y + leg_length + keyPoints[13] = (left_ankle_x, left_ankle_y, 1.0) + + # 计算右眼(14号关键点)的位置 + right_eye_x = head_center_x - eye_distance / 2 + right_eye_y = head_center_y- eye_distance / 2 + keyPoints[14] = (right_eye_x, right_eye_y, 1.0) + + # 计算左眼(15号关键点)的位置 + left_eye_x = head_center_x + eye_distance / 2 + left_eye_y = head_center_y- eye_distance / 2 + keyPoints[15] = (left_eye_x, left_eye_y, 1.0) + + # 计算右耳(16号关键点)的位置 + right_ear_x = head_center_x - ear_distance + right_ear_y = head_center_y + keyPoints[16] = (right_ear_x, right_ear_y, 1.0) + + # 计算左耳(17号关键点)的位置 + left_ear_x = head_center_x + ear_distance + left_ear_y = head_center_y + keyPoints[17] = (left_ear_x, left_ear_y, 1.0) + + return keyPoints + +def poseKeypoints2D_2_keypoints(pose_keypoints_2d, canvas_width, canvas_height,landmarkType): + keyPoints = [pose_keypoints_2d[i:i + 3] for i in range(0, len(pose_keypoints_2d), 3)] + if landmarkType == "DWPose": + canvas_height=1 + canvas_width=1 + for i in range(len(keyPoints)): + x, y, z = keyPoints[i] + keyPoints[i] = (x * canvas_width, y * canvas_height, z) + return keyPoints + +def keypoints_2_bones(keyPoints): + bones=[] + for i, (a, b) in enumerate(bonesPoints): + a_x, a_y, a_z = keyPoints[a] + b_x, b_y, b_z = keyPoints[b] + # 现在 (a_x,a_y) 是骨骼起点的坐标,(b_x,b_y) 是骨骼终点的坐标 + # 然后计算骨骼的长度和角度,连同坐标一起生成一个骨骼对象,放入bones数组 + # 如果a_z=0或者b_z=0,则忽略这个骨骼,放入一个空对象 + if a_z == 0 or b_z == 0: + bone = { + 'start': (a_x, a_y), + 'end': (b_x, b_y), + 'length': -1, + 'angle': 0 + } + bones.append(bone) + continue + + # 计算骨骼的长度 + bone_length = math.sqrt((b_x - a_x) ** 2 + (b_y - a_y) ** 2) + + # 计算骨骼的角度 + bone_angle = math.atan2(b_y - a_y, b_x - a_x) + + # 生成骨骼对象 + bone = { + 'start': (a_x, a_y), + 'end': (b_x, b_y), + 'length': bone_length, + 'angle': bone_angle + } + bones.append(bone) + return bones + +def bones_2_keypoints(bones): + keyPoints = [None] * 18 + # 从1号关键点开始 + start_bone = bones[0] + start_x, start_y = start_bone['start'] + neck_length = start_bone['length'] + neck_angle = start_bone['angle'] + keyPoints[1] = (start_x ,start_y,1.0) + # 计算新的0号关键点的位置 + new_x = start_x + neck_length * math.cos(neck_angle) + new_y = start_y + neck_length * math.sin(neck_angle) + keyPoints[0] = (new_x ,new_y,1.0) + + # 依次计算后续关键点的位置 + for i, (a, b) in enumerate(bonesPoints): + if i == 0: + continue # 跳过第一个骨骼,因为它已经处理过了 + # 获取前一个关键点的位置 + prev_x,prev_y,score = keyPoints[a] + + # 获取当前骨骼的信息 + bone = bones[i] + bone_length = bone['length'] + bone_angle = bone['angle'] + if bone_length == -1: + keyPoints[b]=(0,0,0) + continue + # 计算新的关键点位置 + new_x = prev_x + bone_length * math.cos(bone_angle) + new_y = prev_y + bone_length * math.sin(bone_angle) + + # 将新的关键点位置存入数组 + keyPoints[b]=(new_x ,new_y,1.0) + return keyPoints + +def keyPoints_2_image(keyPoints, canvas_width, canvas_height ,draw_all=False): + image = np.zeros((canvas_height, canvas_width, 3), dtype=np.uint8) + # 绘制骨架 + for i, (a, b) in enumerate(skeleton): + a_x, a_y, a_z = keyPoints[a] + b_x, b_y, b_z = keyPoints[b] + if draw_all: + if a_z != 0 and b_z != 0: + cv2.line(image, (int(a_x), int(a_y)), (int(b_x), int(b_y)), connect_color[i] + [0], 4) + else: + cv2.line(image, (int(a_x), int(a_y)), (int(b_x), int(b_y)), (255,255,255), 4) + else: + # 检查是否在画面内(假设a_z和b_z为0表示不在画面内) + a_in_canvas = a_z != 0 and 0 <= a_x < canvas_width and 0 <= a_y < canvas_height + b_in_canvas = b_z != 0 and 0 <= b_x < canvas_width and 0 <= b_y < canvas_height + if a_in_canvas and b_in_canvas: + cv2.line(image, (int(a_x), int(a_y)), (int(b_x), int(b_y)), connect_color[i] + [0], 4) + # 绘制关键点 + for i, (x, y, z) in enumerate(keyPoints): + if z!=0: + try: + cv2.circle(image, (int(x), int(y)), int(canvas_width/100), connect_color[i], -1) + except: + pass + # cv2.putText(image, str(i), (int(x), int(y)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1) + return image + + +def draw_skeleton(pose_keypoints_2d, canvas_width, canvas_height,landmarkType): # 加载背景图片或创建一个空白画布 image = None #cv2.imread('background.jpg') # 使用实际的背景图片路径 if image is None: @@ -137,7 +618,7 @@ class Pose_Inter: for i, keypoints in enumerate(keypoints_array): # 显示图像 - image = gen_skeleton( + image = draw_skeleton( keypoints, openpose_dict_2["canvas_width"], openpose_dict_2["canvas_height"], @@ -150,14 +631,252 @@ class Pose_Inter: #print("shape of tensor_stacked") #print(tensor_stacked.shape) return (tensor_stacked,) + + + +class PoseModify: + def __init__(self): + pass + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "pose_keypoint": ("POSE_KEYPOINT", ), + "landmarkType": (["OpenPose","DWPose"], ), + "globalScale": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0}), + "head": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0,"step":0.1}), + "neck": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0,"step":0.1}), + "neck": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0,"step":0.1}), + "torsoWidth": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0,"step":0.1}), + "torsoHeight": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0,"step":0.1}), + "upperArmLength": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0,"step":0.1}), + "lowerArmLength": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0,"step":0.1}), + "upperLegLength": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0,"step":0.1}), + "lowerLegLength": ("FLOAT", {"default": 1.0, "min": 0.1, "max": 10.0,"step":0.1}), + + }, + } + RETURN_TYPES = ("IMAGE",) + FUNCTION = "run" + + CATEGORY = "Pose Interpolation" + + def run(self,pose_keypoint,landmarkType,globalScale,head,neck,torsoWidth,torsoHeight,upperArmLength,lowerArmLength,upperLegLength,lowerLegLength): + # if head==1.0 & neck==1.0 & torsoWidth==1.0 & torsoHeight==1.0 & upperArmLength==1.0 & lowerArmLength==1.0 & upperLegLength==1.0 & lowerLegLength==1.0: + # lengthFactors = [1.0] * 18 + # else: + lengthFactors = [neck,1.0, + torsoWidth, + upperArmLength, + lowerArmLength, + torsoWidth, + upperArmLength, + lowerArmLength, + torsoHeight, + upperLegLength, + lowerLegLength, + torsoHeight, + upperLegLength, + lowerLegLength, + head, + head, + head, + head] + + openpose_dict_2 = pose_keypoint[0] + width = openpose_dict_2["canvas_width"] + height = openpose_dict_2["canvas_height"] + output=[] + openpose_dict_2 = pose_keypoint[0] + width = openpose_dict_2["canvas_width"] + height = openpose_dict_2["canvas_height"] + keyPoints = gen_t_pose_keypoints(width,height) + doll = HumanDoll(width,height) + doll.UpdateByKeypoints(keyPoints) + + for openpose_dict_2 in pose_keypoint: + human1Keypoints = poseKeypoints2D_2_keypoints( + openpose_dict_2["people"][0]["pose_keypoints_2d"], + width, + height, + landmarkType + ) + + doll.UpdateByKeypoints(human1Keypoints) + doll.RootPart.ref_scale = globalScale + for i in range(len(doll.parts)): + if doll.parts[i].score > 0.0: + doll.parts[i].length *= lengthFactors[i] + + doll.UpdateByParts() + image=doll.Draw(width,height) + + image = torch.from_numpy(image.astype(np.float32) / 255.0)#.unsqueeze(0) + output.append(image) + + tensor_stacked = torch.stack(output) + #print("shape of tensor_stacked") + #print(tensor_stacked.shape) + return (tensor_stacked,) + +class GenTPose: + def __init__(self): + pass + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "width": ("INT", {"default": 480, "min": 2, "max": 1024, "step": 1}), + "height": ("INT", {"default": 640, "min": 2, "max": 1024, "step": 1}), + + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "run" + + CATEGORY = "Pose Interpolation" + + def run(self,width,height): + + keyPoints = gen_t_pose_keypoints(width,height) + doll = HumanDoll(width, height) + doll.UpdateByKeypoints(keyPoints) + doll.UpdateByParts() + + image=doll.Draw(width, height) + output=[] + image = torch.from_numpy(image.astype(np.float32) / 255.0)#.unsqueeze(0) + output.append(image) + + tensor_stacked = torch.stack(output) + #print("shape of tensor_stacked") + #print(tensor_stacked.shape) + return (tensor_stacked,) + +class Pose_Inter_V2: + def __init__(self): + pass + @classmethod + def INPUT_TYPES(s): + return { + "required": { + "pose_from": ("POSE_KEYPOINT", ), + "pose_to": ("POSE_KEYPOINT", ), + "interpolate_frames": ("INT", {"default": 10, "min": 2, "max": 100, "step": 1}), + "landmarkType": (["OpenPose","DWPose"], ), + "draw_all": ("BOOLEAN", {"default": False}), + + }, + } + + RETURN_TYPES = ("IMAGE",) + FUNCTION = "run" + + CATEGORY = "Pose Interpolation" + + def run(self,pose_from,pose_to,interpolate_frames,landmarkType,draw_all): + + output=[] + openpose_dict = pose_from[0] + openpose_dict_2 = pose_to[0] + + + + width = openpose_dict_2["canvas_width"] + height = openpose_dict_2["canvas_height"] + dollFrom = HumanDoll(width,height) + fromKeys = poseKeypoints2D_2_keypoints(openpose_dict["people"][0]["pose_keypoints_2d"],width,height,landmarkType) + dollFrom.UpdateByKeypoints(fromKeys) + + dollTo = HumanDoll(width,height) + toKeys = poseKeypoints2D_2_keypoints(openpose_dict_2["people"][0]["pose_keypoints_2d"],width,height,landmarkType) + dollTo.UpdateByKeypoints(toKeys) + + dollFrom.guessMissingParts() + dollTo.guessMissingParts() + + + image=dollFrom.Draw(width,height,draw_all) + image = torch.from_numpy(image.astype(np.float32) / 255.0) + output.append(image) + position_x_arr = np.full(interpolate_frames+2, -1.0, dtype=np.float32) + position_y_arr = np.full(interpolate_frames+2,-1.0, dtype=np.float32) + position_x_arr[0] = dollFrom.RootPart.abs_x + position_y_arr[0] = dollFrom.RootPart.abs_y + position_x_arr[interpolate_frames+1] = dollTo.RootPart.abs_x + position_y_arr[interpolate_frames+1] = dollTo.RootPart.abs_y + + for i in range(1, interpolate_frames+1): + position_x_arr[i] = position_x_arr[0] + (position_x_arr[interpolate_frames+1] - position_x_arr[0]) * (i - 1) / interpolate_frames + position_y_arr[i] = position_y_arr[0] + (position_y_arr[interpolate_frames+1] - position_y_arr[0]) * (i - 1) / interpolate_frames + #18个骨骼,每个骨骼2个数组,每个数组有interpolate_frames+2个元素表示骨骼每一帧的长度和角度 + curveDatas = np.full((18, 2, interpolate_frames+2), -1.0, dtype=np.float32) + + for i in range(len(dollFrom.parts)): + if dollFrom.parts[i].score > 0.0: + curveDatas[i][0][0] = dollFrom.parts[i].length + curveDatas[i][1][0] = dollFrom.parts[i].ref_angle + dollFrom.parts[i].score=1.0 + + for i in range(len(dollTo.parts)): + if dollTo.parts[i].score > 0.0: + curveDatas[i][0][interpolate_frames+1] = dollTo.parts[i].length + curveDatas[i][1][interpolate_frames+1] = dollTo.parts[i].ref_angle + dollTo.parts[i].score=1.0 + + for i in range(18): + j=0 + #骨骼长度,线性插值 + for k in range(1, interpolate_frames+1): + curveDatas[i][j][k] = curveDatas[i][j][0] + (curveDatas[i][j][interpolate_frames+1] - curveDatas[i][j][0]) * (k) / (interpolate_frames+1) + + + for i in range(18): + j=1 + a = curveDatas[i][j][0] + b = curveDatas[i][j][interpolate_frames+1] + # 将 b 调整到与 a 变化量最小的等效弧度值 + b_adjusted = b - 2 * np.pi * np.round((b - a) / (2 * np.pi)) + curveDatas[i][j][interpolate_frames+1] = b_adjusted + + for k in range(1, interpolate_frames+1): + curveDatas[i][j][k] = a + (b_adjusted - a) * (k) / (interpolate_frames+1) + curveDatas[i][j] = np.mod(curveDatas[i][j], 2 * np.pi) + + for i in range(1,interpolate_frames+1): + dollFrom.RootPart.abs_x = position_x_arr[i] + dollFrom.RootPart.abs_y = position_y_arr[i] + for k in range(18): + dollFrom.parts[k].length = curveDatas[k][0][i] + dollFrom.parts[k].ref_angle = curveDatas[k][1][i] + dollFrom.UpdateByParts() + image=dollFrom.Draw(width,height,draw_all) + image = torch.from_numpy(image.astype(np.float32) / 255.0)#.unsqueeze(0) + output.append(image) + + image=dollTo.Draw(width,height,draw_all) + image = torch.from_numpy(image.astype(np.float32) / 255.0)#.unsqueeze(0) + output.append(image) + + tensor_stacked = torch.stack(output) + + return (tensor_stacked,) + # A dictionary that contains all nodes you want to export with their names # NOTE: names should be globally unique NODE_CLASS_MAPPINGS = { - "Pose_Inter": Pose_Inter + "Pose_Inter": Pose_Inter, + "Pose_Inter_V2": Pose_Inter_V2, + "PoseModify": PoseModify, + "GenTPose":GenTPose } # A dictionary that contains the friendly/humanly readable titles for the nodes NODE_DISPLAY_NAME_MAPPINGS = { - "Pose_Inter": "Pose Interpolation" + "Pose_Inter": "Pose Interpolation", + "Pose_Inter_V2": "Pose Interpolation_V2", + "PoseModify": "Pose Modify by factor", + "GenTPose": "GenTPose" } diff --git a/poseInterV2.jpg b/poseInterV2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e3170a18816bf026ca44fa984a95cd8769058190 GIT binary patch literal 64650 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

bZ6{M9ZwiX* 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 Vf_asVTeS4f!IF*ljQr#M{{bJqL}UN} literal 0 HcmV?d00001