CoolFace
Apppublic

iti/HandMesh

sourceHugging Faceupdated 5y agoView on Hugging Face
0likes
read.py76 linesDownload Raw Back to utils
1import torch2from torch_geometric.data import Data3from torch_geometric.utils import to_undirected4import openmesh as om5from os import path as osp6from utils import utils, mesh_sampling7from psbody.mesh import Mesh8import pickle9 10 11def read_mesh(path):12    mesh = om.read_trimesh(path)13    face = torch.from_numpy(mesh.face_vertex_indices()).T.type(torch.long)14    x = torch.tensor(mesh.points().astype('float32'))15    edge_index = torch.cat([face[:2], face[1:], face[::2]], dim=1)16    edge_index = to_undirected(edge_index)17    return Data(x=x, edge_index=edge_index, face=face)18 19 20def save_mesh(fp, x, f):21    om.write_mesh(fp, om.TriMesh(x, f))22 23 24def save_obj(v, f, file_name='output.obj'):25    obj_file = open(file_name, 'w')26    for i in range(len(v)):27        obj_file.write('v ' + str(v[i][0]) + ' ' + str(v[i][1]) + ' ' + str(v[i][2]) + '\n')28    for i in range(len(f)):29        obj_file.write('f ' + str(f[i][0]+1) + '/' + str(f[i][0]+1) + ' ' + str(f[i][1]+1) + '/' + str(f[i][1]+1) + ' ' + str(f[i][2]+1) + '/' + str(f[i][2]+1) + '\n')30    obj_file.close()31 32 33def spiral_tramsform(transform_fp, template_fp, ds_factors, seq_length, dilation):34    if not osp.exists(transform_fp):35        print('Generating transform matrices...')36        mesh = Mesh(filename=template_fp)37        # ds_factors = [3.5, 3.5, 3.5, 3.5]38        _, A, D, U, F, V = mesh_sampling.generate_transform_matrices(39            mesh, ds_factors)40        tmp = {41            'vertices': V,42            'face': F,43            'adj': A,44            'down_transform': D,45         'up_transform': U46        }47 48        with open(transform_fp, 'wb') as fp:49            pickle.dump(tmp, fp)50        print('Done!')51        print('Transform matrices are saved in \'{}\''.format(transform_fp))52    else:53        with open(transform_fp, 'rb') as f:54            tmp = pickle.load(f, encoding='latin1')55 56    spiral_indices_list = [57        utils.preprocess_spiral(tmp['face'][idx], seq_length[idx], tmp['vertices'][idx], dilation[idx])#.to(device)58        for idx in range(len(tmp['face']) - 1)59    ]60 61    down_transform_list = [62        utils.to_sparse(down_transform)#.to(device)63        for down_transform in tmp['down_transform']64    ]65    up_transform_list = [66        utils.to_sparse(up_transform)#.to(device)67        for up_transform in tmp['up_transform']68    ]69 70    return spiral_indices_list, down_transform_list, up_transform_list, tmp71 72 73if __name__ == '__main__':74    mesh = read_mesh('../data/FreiHAND/template/template.obj')75    save_mesh('../data/FreiHAND/template/template.obj', mesh.x.numpy(), mesh.face.numpy().T)76