| | import os |
| | import numpy as np |
| | import torch |
| | from PIL import Image |
| | import os |
| | from .scripts.proj_commands import projection as isomer_projection |
| | from .data.utils import simple_remove_bkg_normal |
| |
|
| | |
| | def projection( |
| | meshes, |
| | masks, |
| | images, |
| | azimuths, |
| | elevations, |
| | weights, |
| | fov, |
| | radius, |
| | save_dir, |
| | save_glb_addr=None, |
| | remove_background=False, |
| | auto_center=False, |
| | projection_type="perspective", |
| | below_confidence_strategy="smooth", |
| | complete_unseen=True, |
| | mesh_scale_factor=1.0, |
| | rm_bkg_with_rembg=True, |
| | ): |
| | |
| | if save_glb_addr is None: |
| | os.makedirs(save_dir, exist_ok=True) |
| | save_glb_addr=os.path.join(save_dir, "rgb_projected.glb") |
| |
|
| | bs = len(images) |
| | assert len(azimuths) == bs, f'len(azimuths) ({len(azimuths)} != batchsize ({bs}))' |
| | assert len(elevations) == bs, f'len(elevations) ({len(elevations)} != batchsize ({bs}))' |
| | assert len(weights) == bs, f'len(weights) ({len(weights)} != batchsize ({bs}))' |
| | |
| | image_rgba = torch.cat([images[:,:,:,:3], masks.unsqueeze(-1)], dim=-1) |
| |
|
| | assert image_rgba.shape[-1] == 4, f'image_rgba.shape is {image_rgba.shape}' |
| |
|
| | img_list = [Image.fromarray((image.cpu()*255).numpy().astype(np.uint8)) for image in image_rgba] |
| |
|
| |
|
| | if remove_background: |
| | if rm_bkg_with_rembg: |
| | os.environ["OMP_NUM_THREADS"] = '8' |
| | img_list = simple_remove_bkg_normal(img_list, rm_bkg_with_rembg, return_Image=True) |
| |
|
| | resolution = img_list[0].size[0] |
| | new_img_list = [] |
| | for i in range(len(img_list)): |
| | new_img = img_list[i].resize((resolution,resolution)) |
| |
|
| | path_dir = os.path.join(save_dir, f'projection_images') |
| | os.makedirs(path_dir, exist_ok=True) |
| | |
| | path_ = os.path.join(path_dir, f'ProjectionImg{i}.png') |
| |
|
| | new_img.save(path_) |
| |
|
| | new_img_list.append(new_img) |
| |
|
| | img_list = new_img_list |
| | |
| | isomer_projection(meshes, |
| | img_list=img_list, |
| | weights=weights, |
| | azimuths=azimuths, |
| | elevations=elevations, |
| | projection_type=projection_type, |
| | auto_center=auto_center, |
| | resolution=resolution, |
| | fovy=fov, |
| | radius=radius, |
| | scale_factor=mesh_scale_factor, |
| | save_glb_addr=save_glb_addr, |
| | scale_verts=True, |
| | complete_unseen=complete_unseen, |
| | below_confidence_strategy=below_confidence_strategy |
| | ) |
| |
|
| | return save_glb_addr |
| |
|
| |
|
| |
|