コード例 #1
0
ファイル: mv1p.py プロジェクト: sergeyprokudin/EasyMocap
def mv1pmf_skel(dataset, check_repro=True, args=None):
    MIN_CONF_THRES = args.thres2d
    no_img = not (args.vis_det or args.vis_repro)
    dataset.no_img = no_img
    kp3ds = []
    start, end = args.start, min(args.end, len(dataset))
    kpts_repro = None
    for nf in tqdm(range(start, end), desc='triangulation'):
        images, annots = dataset[nf]
        check_keypoints(annots['keypoints'],
                        WEIGHT_DEBUFF=1,
                        min_conf=MIN_CONF_THRES)
        keypoints3d, kpts_repro = simple_recon_person(annots['keypoints'],
                                                      dataset.Pall)
        if check_repro:
            keypoints3d, kpts_repro = check_repro_error(
                keypoints3d,
                kpts_repro,
                annots['keypoints'],
                P=dataset.Pall,
                MAX_REPRO_ERROR=args.MAX_REPRO_ERROR)
        # keypoints3d, kpts_repro = robust_triangulate(annots['keypoints'], dataset.Pall, config=config, ret_repro=True)
        kp3ds.append(keypoints3d)
        if args.vis_det:
            dataset.vis_detections(images, annots, nf, sub_vis=args.sub_vis)
        if args.vis_repro:
            dataset.vis_repro(images, kpts_repro, nf=nf, sub_vis=args.sub_vis)
    # smooth the skeleton
    if args.smooth3d > 0:
        kp3ds = smooth_skeleton(kp3ds, args.smooth3d)
    for nf in tqdm(range(len(kp3ds)), desc='dump'):
        dataset.write_keypoints3d(kp3ds[nf], nf + start)
コード例 #2
0
ファイル: mv1p.py プロジェクト: sergeyprokudin/EasyMocap
def mv1pmf_smpl(dataset, args, weight_pose=None, weight_shape=None):
    dataset.skel_path = args.skel
    kp3ds = []
    start, end = args.start, min(args.end, len(dataset))
    keypoints2d, bboxes = [], []
    dataset.no_img = True
    for nf in tqdm(range(start, end), desc='loading'):
        images, annots = dataset[nf]
        keypoints2d.append(annots['keypoints'])
        bboxes.append(annots['bbox'])
    kp3ds = dataset.read_skeleton(start, end)
    keypoints2d = np.stack(keypoints2d)
    bboxes = np.stack(bboxes)
    kp3ds = check_keypoints(kp3ds, 1)
    # optimize the human shape
    with Timer('Loading {}, {}'.format(args.model, args.gender),
               not args.verbose):
        body_model = load_model(gender=args.gender, model_type=args.model)
    params = smpl_from_keypoints3d2d(body_model,
                                     kp3ds,
                                     keypoints2d,
                                     bboxes,
                                     dataset.Pall,
                                     config=dataset.config,
                                     args=args,
                                     weight_shape=weight_shape,
                                     weight_pose=weight_pose)
    # write out the results
    dataset.no_img = not (args.vis_smpl or args.vis_repro)
    for nf in tqdm(range(start, end), desc='render'):
        images, annots = dataset[nf]
        param = select_nf(params, nf - start)
        dataset.write_smpl(param, nf)
        if args.vis_smpl:
            vertices = body_model(return_verts=True,
                                  return_tensor=False,
                                  **param)
            dataset.vis_smpl(vertices=vertices[0],
                             faces=body_model.faces,
                             images=images,
                             nf=nf,
                             sub_vis=args.sub_vis,
                             add_back=True)
        if args.vis_repro:
            keypoints = body_model(return_verts=False,
                                   return_tensor=False,
                                   **param)[0]
            kpts_repro = projectN3(keypoints, dataset.Pall)
            dataset.vis_repro(images, kpts_repro, nf=nf, sub_vis=args.sub_vis)