This repository was archived by the owner on Oct 31, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 380
/
Copy pathdemo_bodymocap.py
78 lines (59 loc) · 2.8 KB
/
demo_bodymocap.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# Copyright (c) Facebook, Inc. and its affiliates.
import torch
import numpy as np
from bodymocap.body_mocap_api import BodyMocap
from bodymocap.body_bbox_detector import BodyPoseEstimator
import mocap_utils.demo_utils as demo_utils
import demo
from demo.demo_options import DemoOptions
def run_body_mocap(args, body_bbox_detector, body_mocap, visualizer):
for input_frame_and_metadata in demo.demo_common.input_frame_and_metadata_iterator(args):
image_path = input_frame_and_metadata.image_path
img_original_bgr = input_frame_and_metadata.img_original_bgr
load_bbox = input_frame_and_metadata.load_bbox
if load_bbox:
body_bbox_list = input_frame_and_metadata.body_bbox_list
body_pose_list = None
else:
body_pose_list, body_bbox_list = body_bbox_detector.detect_body_pose(
img_original_bgr)
hand_bbox_list = [None, ] * len(body_bbox_list)
# save the obtained body & hand bbox to json file
if args.save_bbox_output:
demo_utils.save_info_to_json(args, image_path, body_bbox_list, hand_bbox_list)
if len(body_bbox_list) < 1:
print(f"No body deteced: {image_path}")
continue
#Sort the bbox using bbox size
# (to make the order as consistent as possible without tracking)
bbox_size = [ (x[2] * x[3]) for x in body_bbox_list]
idx_big2small = np.argsort(bbox_size)[::-1]
body_bbox_list = [ body_bbox_list[i] for i in idx_big2small ]
if args.single_person and len(body_bbox_list)>0:
body_bbox_list = [body_bbox_list[0], ]
# Body Pose Regression
pred_output_list = body_mocap.regress(img_original_bgr, body_bbox_list)
assert len(body_bbox_list) == len(pred_output_list)
demo.demo_common.show_and_save_result(
args, 'body', input_frame_and_metadata, visualizer, pred_output_list
)
def main():
args = DemoOptions().parse()
device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')
assert torch.cuda.is_available(), "Current version only supports GPU"
# Set bbox detector
body_bbox_detector = BodyPoseEstimator()
# Set mocap regressor
use_smplx = args.use_smplx
checkpoint_path = args.checkpoint_body_smplx if use_smplx else args.checkpoint_body_smpl
print("use_smplx", use_smplx)
body_mocap = BodyMocap(checkpoint_path, args.smpl_dir, device, use_smplx)
# Set Visualizer
if args.renderer_type in ['pytorch3d', 'opendr']:
from renderer.screen_free_visualizer import Visualizer
else:
from renderer.visualizer import Visualizer
visualizer = Visualizer(args.renderer_type)
run_body_mocap(args, body_bbox_detector, body_mocap, visualizer)
if __name__ == '__main__':
main()