def main()

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}.")