Spaces:
Runtime error
Runtime error
| import os | |
| import numpy as np | |
| import torch | |
| from .wholebody import Wholebody | |
| os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE" | |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| class DWposeDetector: | |
| """ | |
| A pose detect method for image-like data. | |
| Parameters: | |
| model_det: (str) serialized ONNX format model path, | |
| such as https://huggingface.co/yzd-v/DWPose/blob/main/yolox_l.onnx | |
| model_pose: (str) serialized ONNX format model path, | |
| such as https://huggingface.co/yzd-v/DWPose/blob/main/dw-ll_ucoco_384.onnx | |
| device: (str) 'cpu' or 'cuda:{device_id}' | |
| """ | |
| def __init__(self, model_det, model_pose, device='cpu'): | |
| self.args = model_det, model_pose, device | |
| def release_memory(self): | |
| if hasattr(self, 'pose_estimation'): | |
| del self.pose_estimation | |
| import gc; gc.collect() | |
| def __call__(self, oriImg): | |
| if not hasattr(self, 'pose_estimation'): | |
| self.pose_estimation = Wholebody(*self.args) | |
| oriImg = oriImg.copy() | |
| H, W, C = oriImg.shape | |
| with torch.no_grad(): | |
| candidate, score = self.pose_estimation(oriImg) | |
| nums, _, locs = candidate.shape | |
| candidate[..., 0] /= float(W) | |
| candidate[..., 1] /= float(H) | |
| body = candidate[:, :18].copy() | |
| body = body.reshape(nums * 18, locs) | |
| subset = score[:, :18].copy() | |
| for i in range(len(subset)): | |
| for j in range(len(subset[i])): | |
| if subset[i][j] > 0.3: | |
| subset[i][j] = int(18 * i + j) | |
| else: | |
| subset[i][j] = -1 | |
| # un_visible = subset < 0.3 | |
| # candidate[un_visible] = -1 | |
| # foot = candidate[:, 18:24] | |
| faces = candidate[:, 24:92] | |
| hands = candidate[:, 92:113] | |
| hands = np.vstack([hands, candidate[:, 113:]]) | |
| faces_score = score[:, 24:92] | |
| hands_score = np.vstack([score[:, 92:113], score[:, 113:]]) | |
| bodies = dict(candidate=body, subset=subset, score=score[:, :18]) | |
| pose = dict(bodies=bodies, hands=hands, hands_score=hands_score, faces=faces, faces_score=faces_score) | |
| return pose | |
| dwpose_detector = DWposeDetector( | |
| model_det="models/DWPose/yolox_l.onnx", | |
| model_pose="models/DWPose/dw-ll_ucoco_384.onnx", | |
| device=device) | |