Ali Mohsin
feat: Add virtual try-on system components including DensePose, SMPL, and pix2pixHD models, rendering, and utilities.
5db43ff
| import os | |
| import numpy as np | |
| from scipy.spatial.transform import Rotation as R | |
| def load_obj(filename): | |
| vertices = [] | |
| faces = [] | |
| with open(filename, 'r') as fp: | |
| for line in fp: | |
| line_split = line.split() | |
| if not line_split: | |
| continue | |
| elif line_split[0] == 'v': | |
| vertices.append([line_split[1], line_split[2], line_split[3]]) | |
| elif line_split[0] == 'f': | |
| vertex_indices = [s.split("/")[0] for s in line_split[1:]] | |
| faces.append(vertex_indices) | |
| vertices = np.array(vertices, dtype=np.float32) | |
| faces = np.array(faces, dtype=np.int32) - 1 | |
| return vertices, faces | |
| def save_obj(filename, vertices, faces): | |
| os.makedirs(os.path.dirname(filename), exist_ok=True) | |
| with open(filename, 'w') as fp: | |
| for v in vertices: | |
| fp.write('v %f %f %f\n' % (v[0], v[1], v[2])) | |
| for f in (faces + 1): # Faces are 1-based, not 0-based in obj files | |
| fp.write('f %d %d %d\n' % (f[0], f[1], f[2])) | |
| print("Saved:", filename) | |