in demo.py [0:0]
def main(args):
loss_weights = DEFAULT_LOSS_WEIGHTS[args.class_name]
# Update defaults based on commandline args.
for loss_name in loss_weights.keys():
loss_weight = getattr(args, loss_name)
if hasattr(args, loss_name) and getattr(args, loss_name) is not None:
loss_weights[loss_name] = loss_weight
logger.info(f"Updated {loss_name} with {loss_weight}")
image = Image.open(args.filename).convert("RGB")
w, h = image.size
r = min(IMAGE_SIZE / w, IMAGE_SIZE / h)
w = int(r * w)
h = int(r * h)
image = np.array(image.resize((w, h)))
segmenter = get_pointrend_predictor()
instances = segmenter(image)["instances"]
# Process Human Estimations.
is_person = instances.pred_classes == 0
bboxes_person = instances[is_person].pred_boxes.tensor.cpu().numpy()
masks_person = instances[is_person].pred_masks
human_predictor = get_bodymocap_predictor()
mocap_predictions = human_predictor.regress(
image[..., ::-1], bbox_xy_to_wh(bboxes_person)
)
person_parameters = process_mocap_predictions(
mocap_predictions=mocap_predictions, bboxes=bboxes_person, masks=masks_person
)
object_parameters = find_optimal_poses(
instances=instances, class_name=args.class_name, mesh_index=args.mesh_index
)
model = optimize_human_object(
person_parameters=person_parameters,
object_parameters=object_parameters,
class_name=args.class_name,
mesh_index=args.mesh_index,
loss_weights=loss_weights,
)
frontal, top_down = visualize_human_object(model, image)
os.makedirs(args.output_dir, exist_ok=True)
file_name = os.path.basename(args.filename)
ext = file_name[file_name.rfind(".") :]
frontal_path = os.path.join(args.output_dir, file_name)
Image.fromarray(frontal).save(frontal_path)
logger.info(f"Saved rendered image to {frontal_path}.")
top_down_path = frontal_path.replace(ext, "_top" + ext)
Image.fromarray(top_down).save(top_down_path)
logger.info(f"Saved top-down image to {top_down_path}.")
if args.save_metadata:
json_path = frontal_path.replace(ext, ".json")
metadata = model.get_parameters()
with open(json_path, "w") as f:
json.dump(metadata, json_path)
logger.info(f"Saved metadata to {json_path}.")