Spaces:
Sleeping
Sleeping
Update src/pixel3dmm/tracking/tracker.py
Browse files
src/pixel3dmm/tracking/tracker.py
CHANGED
|
@@ -1279,6 +1279,18 @@ class Tracker(object):
|
|
| 1279 |
verts_depth=proj_vertices[:, :, 2:3],
|
| 1280 |
is_viz=True
|
| 1281 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1282 |
mask = (self.parse_mask(ops, batch, visualization=True) > 0).float()
|
| 1283 |
grabbed_depth = ops['actual_rendered_depth'][0, 0,
|
| 1284 |
torch.clamp(proj_vertices[0, :, 1].long(), 0, self.config.size-1),
|
|
@@ -1289,49 +1301,6 @@ class Tracker(object):
|
|
| 1289 |
is_visible_verts_idx = torch.ones_like(is_visible_verts_idx)
|
| 1290 |
|
| 1291 |
|
| 1292 |
-
all_final_views = []
|
| 1293 |
-
for b_i in range(bs):
|
| 1294 |
-
final_views = []
|
| 1295 |
-
|
| 1296 |
-
for views in visualizations:
|
| 1297 |
-
row = []
|
| 1298 |
-
for view in views:
|
| 1299 |
-
if view == View.COLOR_OVERLAY:
|
| 1300 |
-
row.append((ops['normal_images'][b_i].cpu().numpy() + 1)/2)
|
| 1301 |
-
if view == View.GROUND_TRUTH:
|
| 1302 |
-
row.append(images[b_i].cpu().numpy())
|
| 1303 |
-
if (view == View.LANDMARKS and not self.no_lm) or is_camera:
|
| 1304 |
-
gt_lmks = images[b_i:b_i+1].clone()
|
| 1305 |
-
gt_lmks = util.tensor_vis_landmarks(gt_lmks, landmarks[b_i:b_i+1, :, :], color='g')
|
| 1306 |
-
gt_lmks = util.tensor_vis_landmarks(gt_lmks, batch['left_iris'][b_i:b_i+1, ...], color='g')
|
| 1307 |
-
gt_lmks = util.tensor_vis_landmarks(gt_lmks, batch['right_iris'][b_i:b_i+1, ...], color='g')
|
| 1308 |
-
gt_lmks = util.tensor_vis_landmarks(gt_lmks, proj_vertices[b_i:b_i+1, left_iris_flame, ...], color='r')
|
| 1309 |
-
gt_lmks = util.tensor_vis_landmarks(gt_lmks, proj_vertices[b_i:b_i+1, right_iris_flame, ...], color='r')
|
| 1310 |
-
gt_lmks = util.tensor_vis_landmarks(gt_lmks, lmk68[b_i:b_i+1, :, :], color='r')
|
| 1311 |
-
row.append(gt_lmks[0].cpu().numpy())
|
| 1312 |
-
|
| 1313 |
-
if True:
|
| 1314 |
-
nvd_mask = gaussian_blur(ops['mask_images_rendering'].detach(),
|
| 1315 |
-
kernel_size=[self.config.normal_mask_ksize, self.config.normal_mask_ksize],
|
| 1316 |
-
sigma=[self.config.normal_mask_ksize, self.config.normal_mask_ksize])
|
| 1317 |
-
nvd_mask = (nvd_mask > 0.5).float()
|
| 1318 |
-
nvd_mask_clone = nvd_mask.clone()
|
| 1319 |
-
|
| 1320 |
-
|
| 1321 |
-
eyebrow_level = torch.min(lmk68[:, :, 1], dim=1).indices
|
| 1322 |
-
|
| 1323 |
-
for _i in range(eyebrow_level.shape[0]):
|
| 1324 |
-
nvd_mask_clone[_i, :, :eyebrow_level[_i], :] = 0
|
| 1325 |
-
|
| 1326 |
-
|
| 1327 |
-
final_views.append(row)
|
| 1328 |
-
|
| 1329 |
-
|
| 1330 |
-
# VIDEO
|
| 1331 |
-
final_views = util.merge_views(final_views)
|
| 1332 |
-
all_final_views.append(final_views)
|
| 1333 |
-
final_views = np.concatenate(all_final_views, axis=0)
|
| 1334 |
-
|
| 1335 |
if outer_iter is None:
|
| 1336 |
frame_id = str(self.frame).zfill(5)
|
| 1337 |
else:
|
|
@@ -1714,8 +1683,9 @@ class Tracker(object):
|
|
| 1714 |
batches = {k: torch.cat([x[k] for x in batches], dim=0) for k in batch.keys()}
|
| 1715 |
selected_frames = torch.from_numpy(np.array(selected_frames)).long().cuda()
|
| 1716 |
|
| 1717 |
-
result_rendering = self.render_and_save(
|
| 1718 |
-
|
|
|
|
| 1719 |
video_frames.append(np.array(result_rendering))
|
| 1720 |
self.frame += 1
|
| 1721 |
|
|
|
|
| 1279 |
verts_depth=proj_vertices[:, :, 2:3],
|
| 1280 |
is_viz=True
|
| 1281 |
)
|
| 1282 |
+
# if they asked *only* for the pure shape mask:
|
| 1283 |
+
if visualizations == [[View.SHAPE]]:
|
| 1284 |
+
# ops['normal_images'] is [1,3,H,W] in world‐space ∈ [-1,1]
|
| 1285 |
+
normals = ops['normal_images'][0].cpu().numpy() # [3,H,W]
|
| 1286 |
+
# remap to [0,1]
|
| 1287 |
+
normals = (normals + 1.0) / 2.0
|
| 1288 |
+
# H×W×3
|
| 1289 |
+
normals = np.transpose(normals, (1, 2, 0))
|
| 1290 |
+
# scale to uint8
|
| 1291 |
+
arr = (normals * 255).clip(0,255).astype(np.uint8)
|
| 1292 |
+
return arr
|
| 1293 |
+
|
| 1294 |
mask = (self.parse_mask(ops, batch, visualization=True) > 0).float()
|
| 1295 |
grabbed_depth = ops['actual_rendered_depth'][0, 0,
|
| 1296 |
torch.clamp(proj_vertices[0, :, 1].long(), 0, self.config.size-1),
|
|
|
|
| 1301 |
is_visible_verts_idx = torch.ones_like(is_visible_verts_idx)
|
| 1302 |
|
| 1303 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1304 |
if outer_iter is None:
|
| 1305 |
frame_id = str(self.frame).zfill(5)
|
| 1306 |
else:
|
|
|
|
| 1683 |
batches = {k: torch.cat([x[k] for x in batches], dim=0) for k in batch.keys()}
|
| 1684 |
selected_frames = torch.from_numpy(np.array(selected_frames)).long().cuda()
|
| 1685 |
|
| 1686 |
+
result_rendering = self.render_and_save(batch,
|
| 1687 |
+
visualizations=[[View.SHAPE]], # ← only mesh by default
|
| 1688 |
+
frame_dst='/video', save=True, dump_directly=False, outer_iter=0, timestep=timestep, is_final=True, selected_frames=selected_frames)
|
| 1689 |
video_frames.append(np.array(result_rendering))
|
| 1690 |
self.frame += 1
|
| 1691 |
|