120 lines
5.2 KiB
Python
120 lines
5.2 KiB
Python
'''
|
|
@ Date: 2021-01-15 12:09:27
|
|
@ Author: Qing Shuai
|
|
@ LastEditors: Qing Shuai
|
|
@ LastEditTime: 2021-06-15 11:09:36
|
|
@ FilePath: /EasyMocap/easymocap/mytools/cmd_loader.py
|
|
'''
|
|
import os
|
|
import argparse
|
|
|
|
def load_parser():
|
|
parser = argparse.ArgumentParser('EasyMocap commond line tools')
|
|
parser.add_argument('path', type=str)
|
|
parser.add_argument('--out', type=str, default=None)
|
|
parser.add_argument('--cfg', type=str, default=None)
|
|
parser.add_argument('--camera', type=str, default=None)
|
|
parser.add_argument('--annot', type=str, default='annots', help="sub directory name to store the generated annotation files, default to be annots")
|
|
parser.add_argument('--sub', type=str, nargs='+', default=[],
|
|
help='the sub folder lists when in video mode')
|
|
parser.add_argument('--from_file', type=str, default=None)
|
|
parser.add_argument('--pid', type=int, nargs='+', default=[0],
|
|
help='the person IDs')
|
|
parser.add_argument('--max_person', type=int, default=-1,
|
|
help='maximum number of person')
|
|
parser.add_argument('--start', type=int, default=0,
|
|
help='frame start')
|
|
parser.add_argument('--end', type=int, default=100000,
|
|
help='frame end')
|
|
parser.add_argument('--step', type=int, default=1,
|
|
help='frame step')
|
|
#
|
|
# keypoints and body model
|
|
#
|
|
parser.add_argument('--cfg_model', type=str, default=None)
|
|
parser.add_argument('--body', type=str, default='body25', choices=['body15', 'body25', 'h36m', 'bodyhand', 'bodyhandface', 'handl', 'handr', 'total'])
|
|
parser.add_argument('--model', type=str, default='smpl', choices=['smpl', 'smplh', 'smplx', 'manol', 'manor'])
|
|
parser.add_argument('--gender', type=str, default='neutral',
|
|
choices=['neutral', 'male', 'female'])
|
|
# Input control
|
|
detec = parser.add_argument_group('Detection control')
|
|
detec.add_argument("--thres2d", type=float, default=0.3,
|
|
help="The threshold for suppress noisy kpts")
|
|
#
|
|
# Optimization control
|
|
#
|
|
recon = parser.add_argument_group('Reconstruction control')
|
|
recon.add_argument('--smooth3d', type=int,
|
|
help='the size of window to smooth keypoints3d', default=0)
|
|
recon.add_argument('--MAX_REPRO_ERROR', type=int,
|
|
help='The threshold of reprojection error', default=50)
|
|
recon.add_argument('--MAX_SPEED_ERROR', type=int,
|
|
help='The threshold of reprojection error', default=50)
|
|
recon.add_argument('--robust3d', action='store_true')
|
|
#
|
|
# visualization part
|
|
#
|
|
output = parser.add_argument_group('Output control')
|
|
output.add_argument('--vis_det', action='store_true')
|
|
output.add_argument('--vis_repro', action='store_true')
|
|
output.add_argument('--vis_smpl', action='store_true')
|
|
output.add_argument('--write_smpl_full', action='store_true')
|
|
parser.add_argument('--write_vertices', action='store_true')
|
|
output.add_argument('--vis_mask', action='store_true')
|
|
output.add_argument('--undis', action='store_true')
|
|
output.add_argument('--sub_vis', type=str, nargs='+', default=[],
|
|
help='the sub folder lists for visualization')
|
|
#
|
|
# debug
|
|
#
|
|
parser.add_argument('--verbose', action='store_true')
|
|
parser.add_argument('--save_origin', action='store_true')
|
|
parser.add_argument('--restart', action='store_true')
|
|
parser.add_argument('--no_opt', action='store_true')
|
|
parser.add_argument('--debug', action='store_true')
|
|
parser.add_argument('--opts',
|
|
help="Modify config options using the command-line",
|
|
default=[],
|
|
nargs='+')
|
|
parser.add_argument('--cfg_opts',
|
|
help="Modify config options using the command-line",
|
|
default=[],
|
|
nargs='+')
|
|
return parser
|
|
|
|
from os.path import join
|
|
def save_parser(args):
|
|
import yaml
|
|
res = vars(args)
|
|
os.makedirs(args.out, exist_ok=True)
|
|
with open(join(args.out, 'exp.yml'), 'w') as f:
|
|
yaml.dump(res, f)
|
|
|
|
def parse_parser(parser):
|
|
args = parser.parse_args()
|
|
if args.out is None:
|
|
print(' - [Warning] Please specify the output path `--out ${out}`')
|
|
print(' - [Warning] Default to {}/output'.format(args.path))
|
|
args.out = join(args.path, 'output')
|
|
if args.from_file is not None:
|
|
assert os.path.exists(args.from_file), args.from_file
|
|
with open(args.from_file) as f:
|
|
datas = f.readlines()
|
|
subs = [d for d in datas if not d.startswith('#')]
|
|
subs = [d.rstrip().replace('https://www.youtube.com/watch?v=', '') for d in subs]
|
|
newsubs = sorted(os.listdir(join(args.path, 'images')))
|
|
clips = []
|
|
for newsub in newsubs:
|
|
if newsub.split('+')[0] in subs:
|
|
clips.append(newsub)
|
|
for sub in subs:
|
|
if os.path.exists(join(args.path, 'images', sub)):
|
|
clips.append(sub)
|
|
args.sub = clips
|
|
if len(args.sub) == 0 and os.path.exists(join(args.path, 'images')):
|
|
args.sub = sorted(os.listdir(join(args.path, 'images')))
|
|
if args.sub[0].isdigit():
|
|
args.sub = sorted(args.sub, key=lambda x:int(x))
|
|
args.opts = {args.opts[2*i]:float(args.opts[2*i+1]) for i in range(len(args.opts)//2)}
|
|
save_parser(args)
|
|
return args |