init_code
This commit is contained in:
54
data_utils/align_bodies.py
Normal file
54
data_utils/align_bodies.py
Normal file
@@ -0,0 +1,54 @@
|
||||
"""Aling body models s.t. they stand exactly on the plane y=0 and save as a new data"""
|
||||
import igl
|
||||
import numpy as np
|
||||
from pathlib import Path
|
||||
import trimesh
|
||||
|
||||
from pygarment.data_config import Properties
|
||||
|
||||
def load_mesh(path):
|
||||
v, f = igl.read_triangle_mesh(str(path))
|
||||
return v, f.flatten(), f
|
||||
|
||||
def get_shift_param(body_vertices):
|
||||
v_body_arr = np.array(body_vertices)
|
||||
min_y = (min(v_body_arr[:, 1]))
|
||||
if min_y < 0:
|
||||
return abs(min_y)
|
||||
return 0.0
|
||||
|
||||
def save_mesh(path, v, f):
|
||||
igl.write_triangle_mesh(str(path), v=v, f=f, force_ascii=False)
|
||||
|
||||
|
||||
def process_body(path_in, path_out):
|
||||
|
||||
body_vertices, _, body_faces = load_mesh(path_in) # self.paths.in_body_obj)
|
||||
shift_y = get_shift_param(body_vertices)
|
||||
|
||||
# body_vertices = body_vertices * b_scale
|
||||
if shift_y:
|
||||
body_vertices[:, 1] = body_vertices[:, 1] + shift_y
|
||||
|
||||
save_mesh(path_out, body_vertices, body_faces)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
system_paths = Properties('./system.json')
|
||||
|
||||
# body_folder_path = Path(system_paths['body_samples_path']) / 'body_shapes_and_measures_2023-12-30'
|
||||
# body_objs_path = body_folder_path / 'meshes'
|
||||
body_objs_path = Path('./assets/bodies')
|
||||
# out_path = body_folder_path / 'meshes_aligned'
|
||||
out_path = Path('./assets/bodies_aligned')
|
||||
out_path.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# loop over all meshes
|
||||
for file in body_objs_path.iterdir():
|
||||
if '.obj' in file.name:
|
||||
process_body(file, out_path / file.name)
|
||||
|
||||
print(file.name)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user