コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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)
コード例 #4
0
    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()