pose_cords = [] for idx in tqdm(range(len(os.listdir(str(img_dir))))): img_path = img_dir.joinpath('{:05}.png'.format(idx)) img = cv2.imread(str(img_path)) shape_dst = np.min(img.shape[:2]) oh = (img.shape[0] - shape_dst) // 2 ow = (img.shape[1] - shape_dst) // 2 img = img[oh:oh + shape_dst, ow:ow + shape_dst] img = cv2.resize(img, (512, 512)) multiplier = get_multiplier(img) with torch.no_grad(): paf, heatmap = get_outputs(multiplier, img, model, 'rtpose') r_heatmap = np.array([ remove_noise(ht) for ht in heatmap.transpose(2, 0, 1)[:-1] ]).transpose(1, 2, 0) heatmap[:, :, :-1] = r_heatmap param = {'thre1': 0.1, 'thre2': 0.05, 'thre3': 0.5} #TODO get_pose label, cord = get_pose(param, heatmap, paf) index = 13 crop_size = 25 try: head_cord = cord[index] except: head_cord = pose_cords[ -1] # if there is not head point in picture, use last frame pose_cords.append(head_cord) head = img[int(head_cord[1] - crop_size):int(head_cord[1] + crop_size),
test_head_dir.mkdir(exist_ok=True) pose_cords = [] for idx in tqdm(range(len(os.listdir(str(img_dir))))): img_path = img_dir.joinpath('{:05}.png'.format(idx)) img = cv2.imread(str(img_path)) shape_dst = np.min(img.shape[:2]) oh = (img.shape[0] - shape_dst) // 2 ow = (img.shape[1] - shape_dst) // 2 img = img[oh:oh + shape_dst, ow:ow + shape_dst] img = cv2.resize(img, (512, 512)) multiplier = get_multiplier(img) with torch.no_grad(): paf, heatmap = get_outputs(multiplier, img, model, 'rtpose') r_heatmap = np.array([remove_noise(ht) for ht in heatmap.transpose(2, 0, 1)[:-1]]) \ .transpose(1, 2, 0) heatmap[:, :, :-1] = r_heatmap param = {'thre1': 0.1, 'thre2': 0.05, 'thre3': 0.5} label, cord = get_pose(param, heatmap, paf) index = 13 crop_size = 25 try: head_cord = cord[index] except: head_cord = pose_cords[ -1] # if there is not head point in picture, use last frame pose_cords.append(head_cord) head = img[int(head_cord[1] - crop_size):int(head_cord[1] + crop_size),
def extract_poses(model, save_dir): '''make label images for pix2pix''' train_dir = os.path.join(save_dir, 'train') os.makedirs(train_dir, exist_ok=True) train_img_dir = os.path.join(train_dir, 'train_img') os.makedirs(train_img_dir, exist_ok=True) train_label_dir = os.path.join(train_dir, 'train_label') os.makedirs(train_label_dir, exist_ok=True) train_head_dir = os.path.join(train_dir, 'head_img') os.makedirs(train_head_dir, exist_ok=True) img_dir = os.path.join(save_dir, 'images') pose_cords = [] for idx in tqdm(range(len(os.listdir(img_dir)))): img_path = os.path.join(img_dir, '{:05}.png'.format(idx)) img = cv2.imread(img_path) shape_dst = np.min(img.shape[:2]) oh = (img.shape[0] - shape_dst) // 2 ow = (img.shape[1] - shape_dst) // 2 img = img[oh:oh + shape_dst, ow:ow + shape_dst] img = cv2.resize(img, (512, 512)) multiplier = get_multiplier(img) with torch.no_grad(): paf, heatmap = get_outputs(multiplier, img, model, 'rtpose', device) r_heatmap = np.array([remove_noise(ht) for ht in heatmap.transpose(2, 0, 1)[:-1]]).transpose(1, 2, 0) heatmap[:, :, :-1] = r_heatmap param = {'thre1': 0.1, 'thre2': 0.05, 'thre3': 0.5} label, cord = get_pose(param, heatmap, paf) index = 13 crop_size = 25 try: head_cord = cord[index] except IndexError: try: head_cord = pose_cords[-1] # if there is not head point in picture, use last frame except IndexError: print("skipping 1st frame as pose detection failed") continue head = img[int(head_cord[1] - crop_size): int(head_cord[1] + crop_size), int(head_cord[0] - crop_size): int(head_cord[0] + crop_size), :] try: plt.imshow(head) plt.savefig(os.path.join(train_head_dir, 'pose_{}.jpg'.format(idx))) plt.clf() cv2.imwrite(os.path.join(train_img_dir, '{:05}.png'.format(idx)), img) cv2.imwrite(os.path.join(train_label_dir, '{:05}.png'.format(idx)), label) except Exception as e: print(e) continue pose_cords.append(head_cord) pose_cords_arr = np.array(pose_cords, dtype=np.int) np.save(os.path.join(save_dir, 'pose_source.npy'), pose_cords_arr) torch.cuda.empty_cache()