def show_boxes_from_standard_json(json_file_path, classes, img_folder_path=None, output_folder_path=None, track_id=-1): dets = read_json_from_file(json_file_path) for det in dets: python_data = det if img_folder_path is None: img_path = os.path.join(python_data["image"]["folder"], python_data["image"]["name"]) else: img_path = os.path.join(img_folder_path, python_data["image"]["name"]) if is_image(img_path): img = cv2.imread(img_path) candidates = python_data["candidates"] for candidate in candidates: bbox = np.array(candidate["det_bbox"]).astype(int) score = candidate["det_score"] if score >= bbox_thresh: img = draw_bbox(img, bbox, score, classes, track_id=track_id) if output_folder_path is not None: create_folder(output_folder_path) img_output_path = os.path.join(output_folder_path, python_data["image"]["name"]) cv2.imwrite(img_output_path, img) return True
def show_poses_from_standard_json(json_file_path, joint_pairs, joint_names, img_folder_path=None, output_folder_path=None): poses = read_json_from_file(json_file_path) for pose in poses: python_data = pose if img_folder_path is None: img_path = os.path.join(python_data["image"]["folder"], python_data["image"]["name"]) else: img_path = os.path.join(img_folder_path, python_data["image"]["name"]) if is_image(img_path): img = cv2.imread(img_path) candidates = python_data["candidates"] for candidate in candidates: pose_keypoints_2d = candidate["pose_keypoints_2d"] joints = reshape_keypoints_into_joints(pose_keypoints_2d) img = show_poses_from_python_data(img, joints, joint_pairs, joint_names) if output_folder_path is not None: create_folder(output_folder_path) img_output_path = os.path.join(output_folder_path, python_data["image"]["name"]) cv2.imwrite(img_output_path, img) return
def merge_json(gt_json_paths, save_json_path): python_data_merged = {"annolist": []} for gt_json_path in gt_json_paths: python_data = read_json_from_file(gt_json_path) python_data_merged["annolist"].extend(python_data["annolist"]) write_json_to_file(python_data_merged, save_json_path, flag_verbose=False)
def __init__(self): #{0-Rank 1-Rkne 2-Rhip 3-Lhip 4-Lkne 5-Lank 6-Rwri 7-Relb 8-Rsho 9-Lsho 10-Lelb 11-Lwri 12-neck 13-nose 14-TopHead} self.kp_names = [ 'right_ankle', 'right_knee', 'right_pelvis', 'left_pelvis', 'left_knee', 'left_ankle', 'right_wrist', 'right_elbow', 'right_shoulder', 'left_shoulder', 'left_elbow', 'left_wrist', 'upper_neck', 'nose', 'head' ] self.max_num_joints = 15 self.color = np.random.randint(0, 256, (self.max_num_joints, 3)) self.posetrack = [] self.test_posetrack = [] for posetrack, stage in zip([self.posetrack, self.test_posetrack], ['train', 'val']): if stage == 'train': self._train_gt_path = "posetrack_merged_train.json" gt_python_data = read_json_from_file(self._train_gt_path) anns = gt_python_data["annolist"] else: self._val_gt_path = "posetrack_merged_val.json" gt_python_data = read_json_from_file(self._val_gt_path) anns = gt_python_data["annolist"] if stage == 'train': for aid, ann in enumerate(anns): if ann["is_labeled"][0] == 0: continue if not ann["annorect"]: #if it is empty continue num_candidates = len(ann["annorect"]) for candidate_id in range(0, num_candidates): if not ann["annorect"][candidate_id]["annopoints"]: continue #list is empty # (1) bbox bbox = get_bbox_from_keypoints( ann["annorect"][candidate_id]["annopoints"][0] ["point"]) bbox = x1y1x2y2_to_xywh(bbox) if bbox == [0, 0, 2, 2]: continue # (2) imgpath imgname = ann["image"][0]["name"] prefix = '../data/posetrack_data/' imgpath = os.path.join(prefix, imgname) # (2) joints joints = get_joints_from_ann( ann["annorect"][candidate_id]["annopoints"][0] ["point"]) num_points = len(ann["annorect"][candidate_id] ["annopoints"][0]["point"]) if np.sum(joints[2::3]) == 0 or num_points == 0: continue # (4) head_rect: useless rect = np.array([0, 0, 1, 1], np.int32) ''' This [humanData] is what [load_data] will provide ''' humanData = dict(aid=aid, joints=joints, imgpath=imgpath, headRect=rect, bbox=bbox, imgid=ann['imgnum'][0]) posetrack.append(humanData) elif stage == 'val': for aid, ann in enumerate(anns): if ann["is_labeled"][0] == 0: continue if not ann["annorect"]: #if it is empty continue num_candidates = len(ann["annorect"]) for candidate_id in range(0, num_candidates): if not ann["annorect"][candidate_id]["annopoints"]: continue #list is empty imgname = ann["image"][0]["name"] prefix = '../data/posetrack_data/' imgpath = os.path.join(prefix, imgname) humanData = dict(imgid=aid, imgpath=imgpath) posetrack.append(humanData) else: print('PoseTrack data error, please check') embed()