| | import cv2 |
| | import torch |
| | import numpy as np |
| |
|
| |
|
| | def load_img(path, order='RGB'): |
| | img = cv2.imread(path, cv2.IMREAD_COLOR | cv2.IMREAD_IGNORE_ORIENTATION) |
| | if not isinstance(img, np.ndarray): |
| | raise IOError("Fail to read %s" % path) |
| |
|
| | if order=='RGB': img = img[:,:,::-1] |
| | img = img.astype(np.float32) |
| | return img |
| |
|
| |
|
| | def get_bbox(joint_img, joint_valid, expansion_factor=1.0): |
| | x_img, y_img = joint_img[:,0], joint_img[:,1] |
| | x_img = x_img[joint_valid==1]; y_img = y_img[joint_valid==1]; |
| | xmin = min(x_img); ymin = min(y_img); xmax = max(x_img); ymax = max(y_img); |
| |
|
| | x_center = (xmin+xmax)/2.; width = (xmax-xmin)*expansion_factor; |
| | xmin = x_center - 0.5*width |
| | xmax = x_center + 0.5*width |
| | |
| | y_center = (ymin+ymax)/2.; height = (ymax-ymin)*expansion_factor; |
| | ymin = y_center - 0.5*height |
| | ymax = y_center + 0.5*height |
| |
|
| | bbox = np.array([xmin, ymin, xmax - xmin, ymax - ymin]).astype(np.float32) |
| | return bbox |
| |
|
| |
|
| | def process_bbox(bbox, target_shape, original_img_shape): |
| |
|
| | |
| | w = bbox[2] |
| | h = bbox[3] |
| | c_x = bbox[0] + w/2. |
| | c_y = bbox[1] + h/2. |
| | aspect_ratio = target_shape[1]/target_shape[0] |
| | if w > aspect_ratio * h: |
| | h = w / aspect_ratio |
| | elif w < aspect_ratio * h: |
| | w = h * aspect_ratio |
| | bbox[2] = w*1.25 |
| | bbox[3] = h*1.25 |
| | bbox[0] = c_x - bbox[2]/2. |
| | bbox[1] = c_y - bbox[3]/2. |
| |
|
| | return bbox |
| |
|
| |
|
| | import re |
| | def atoi(text): |
| | return int(text) if text.isdigit() else text |
| | def natural_keys(text): |
| | return [atoi(c) for c in re.split(r'(\d+)', text)] |
| |
|
| |
|
| | |
| | import yaml |
| | def load_config(cfg_path): |
| | with open(cfg_path, 'r') as f: |
| | cfg = yaml.safe_load(f) |
| | return cfg |