alexnasa commited on
Commit
65bb582
·
1 Parent(s): 2b8469f

save the mesh

Browse files
Files changed (1) hide show
  1. src/pixel3dmm/tracking/tracker.py +23 -1
src/pixel3dmm/tracking/tracker.py CHANGED
@@ -201,7 +201,7 @@ class Tracker(object):
201
  self.save_folder = env_paths.TRACKING_OUTPUT
202
  self.output_folder = os.path.join(self.save_folder, self.actor_name)
203
  self.checkpoint_folder = os.path.join(self.save_folder, self.actor_name, "checkpoint")
204
- self.mesh_folder = os.path.join(self.save_folder, self.actor_name, "mesh")
205
  self.create_output_folders()
206
  self.writer = SummaryWriter(log_dir=self.save_folder + self.actor_name + '/logs')
207
 
@@ -1288,6 +1288,28 @@ class Tracker(object):
1288
  normals = np.transpose(normals, (1, 2, 0))
1289
  # scale to uint8
1290
  arr = (normals * 255).clip(0,255).astype(np.uint8)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1291
  return arr
1292
 
1293
  mask = (self.parse_mask(ops, batch, visualization=True) > 0).float()
 
201
  self.save_folder = env_paths.TRACKING_OUTPUT
202
  self.output_folder = os.path.join(self.save_folder, self.actor_name)
203
  self.checkpoint_folder = os.path.join(self.save_folder, self.actor_name, "checkpoint")
204
+ self.mesh_folder = os.path.join(self.save_folder, self.video_name, "mesh")
205
  self.create_output_folders()
206
  self.writer = SummaryWriter(log_dir=self.save_folder + self.actor_name + '/logs')
207
 
 
1288
  normals = np.transpose(normals, (1, 2, 0))
1289
  # scale to uint8
1290
  arr = (normals * 255).clip(0,255).astype(np.uint8)
1291
+
1292
+ if visualizations == [[View.SHAPE]]:
1293
+ # build your normal‐map preview as before
1294
+ normals = ops['normal_images'][0].cpu().numpy() # [3,H,W]
1295
+ normals = (normals + 1.0) / 2.0 # → [0,1]
1296
+ normals = np.transpose(normals, (1,2,0)) # H×W×3
1297
+ arr = (normals * 255).clip(0,255).astype(np.uint8)
1298
+
1299
+ # --- new: export the *non*-canonical mesh ---
1300
+ os.makedirs(self.mesh_folder, exist_ok=True)
1301
+ frame_id = str(self.frame).zfill(5)
1302
+ ply_path = os.path.join(self.mesh_folder, f"{frame_id}.ply")
1303
+
1304
+ # faces is the same face list you loaded in setup_renderer
1305
+ faces_np = self.faces.cpu().numpy()
1306
+ # vertices is your posed mesh from above:
1307
+ # vertices = … # torch.Tensor of shape (1, V, 3)
1308
+ verts_np = vertices[0].detach().cpu().numpy()
1309
+
1310
+ trimesh.Trimesh(faces=faces_np, vertices=verts_np, process=False) \
1311
+ .export(ply_path)
1312
+
1313
  return arr
1314
 
1315
  mask = (self.parse_mask(ops, batch, visualization=True) > 0).float()