shunsukesaito / PIFu

This repository contains the code for the paper "PIFu: Pixel-Aligned Implicit Function for High-Resolution Clothed Human Digitization"
https://shunsukesaito.github.io/PIFu/
Other
1.77k stars 340 forks source link

I want to use only tex-pifu #150

Open Yumekawa-chan opened 1 year ago

Yumekawa-chan commented 1 year ago

I made Avatar by ECON(https://github.com/YuliangXiu/ECON). But this doesn't support predict back texture, so only front texture. That's why I edited gen_mesh_color in PIFu's train_utils.py to add the code that gives the texture to the ECON avatar. Specifically, I assigned the vertex information of the avatar generated by ECON to the variable verts. As a result, the avatar and the texture are misaligned and a mysterious texture is applied.

Can someone please help me?

This code is gen_mesh_color function of train_urils.py.

`def gen_mesh_color(opt, netG, netC, cuda, data, save_path, use_octree=True): image_tensor = data["img"].to(device=cuda) calib_tensor = data["calib"].to(device=cuda)

netG.filter(image_tensor)
netC.filter(image_tensor)
netC.attach(netG.get_im_feat()) 
print("netC: ",type(netC))
print("netG: ",type(netG))
b_min = data["b_min"]
b_max = data["b_max"]
try:
    save_img_path = save_path[:-4] + ".png"
    save_img_list = []
    for v in range(image_tensor.shape[0]):
        save_img = (
            np.transpose(image_tensor[v].detach().cpu().numpy(), (1, 2, 0)) * 0.5
            + 0.5
        )[:, :, ::-1] * 255.0
        save_img_list.append(save_img)
    save_img = np.concatenate(save_img_list, axis=1)
    Image.fromarray(np.uint8(save_img[:, :, ::-1])).save(save_img_path)

    verts, faces, _, _ = reconstruction(
        netG,
        cuda,
        calib_tensor,
        opt.resolution,
        b_min,
        b_max,
        use_octree=use_octree,
    ) # pifuの点群の生成

    verts = np.load("/mnt/hdd1/mikihiro/work/tex-pifu/src/utils/01_Color.npy") # iconの点群の読み込み

    # verts = scaling(verts2, verts)

    # Now Getting colors
    verts_tensor = torch.from_numpy(verts.T).unsqueeze(0).to(device=cuda).float()
    verts_tensor = reshape_sample_tensor(verts_tensor, opt.num_views)
    color = np.zeros(verts.shape)
    interval = 10000
    for i in range(len(color) // interval):
        left = i * interval
        right = i * interval + interval
        if i == len(color) // interval - 1:
            right = -1
        netC.query(verts_tensor[:, :, left:right], calib_tensor)
        rgb = netC.get_preds()[0].detach().cpu().numpy() * 0.5 + 0.5
        color[left:right] = rgb.T

    np.save("01_Color_points.npy",verts)
    np.save("01_Color_colors.npy",color)

    save_obj_mesh_with_color(save_path, verts, faces, color)
except Exception as e:
    print(e)
    print("Can not create marching cubes at this time.")`

This is result 3D avatar of me.

image image image