Diffusers
Safetensors
AR / mesh /check_data.py
xfcghj's picture
Upload folder using huggingface_hub
f0fc238 verified
Raw
History Blame Contribute Delete
4.47 kB
import io
import os
import tarfile
import pickle
import zstandard
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
archive_path = "/home/dataset-assist-0/usr/lh/ysh/dw/RL/AR/data/DyMesh_50000v_16f_0000_part_00"
output_debug_image = "mesh_motion_diff_check.png"
with open(archive_path, 'rb') as fh:
dctx = zstandard.ZstdDecompressor()
with dctx.stream_reader(fh) as reader:
with tarfile.open(fileobj=reader, mode='r|') as tar:
for member in tar:
if member.isfile():
f = tar.extractfile(member)
if f is not None:
data = pickle.load(io.BytesIO(f.read()))
if isinstance(data, dict) and 'vertices' in data and 'faces' in data:
vertices = data['vertices']
faces = data['faces']
if vertices.shape[0] == 16:
# ======= 开始核心差值计算 =======
fig = plt.figure(figsize=(32, 3))
base_frame = vertices[0] # 以第一帧为基准
all_v = vertices.reshape(-1, 3)
max_range = (all_v.max(axis=0) - all_v.min(axis=0)).max() / 2.0
mid_x, mid_y, mid_z = (all_v.max(axis=0) + all_v.min(axis=0)) / 2.0
print(f"正在放大渲染物体 [{member.name}] 的每帧运动轨迹...")
for frame_idx in range(16):
ax = fig.add_subplot(1, 16, frame_idx + 1, projection='3d')
v = vertices[frame_idx]
if frame_idx == 0:
# 第一帧作为基准,显示为冷色调
ax.plot_trisurf(v[:, 0], v[:, 1], v[:, 2], triangles=faces,
color='cyan', edgecolor='none', alpha=0.6)
ax.set_title("Base Frame 1", fontsize=10, color='blue')
else:
# 计算当前帧每个顶点相对于第一帧的欧氏距离(位移量)
displacements = np.linalg.norm(v - base_frame, axis=1)
max_disp = displacements.max()
# 如果有位移,把位移映射为色彩(动的越多越红,没动的部位是蓝色)
# 这样即使只有 0.001 的微小位移,也会在视觉上变红!
if max_disp > 0:
colors = plt.cm.jet(displacements / max_disp)
else:
colors = 'blue'
# 渲染带有“运动热力图”的 Mesh
surf = ax.plot_trisurf(v[:, 0], v[:, 1], v[:, 2], triangles=faces,
edgecolor='none', alpha=0.8)
surf.set_facecolors(colors)
ax.set_title(f"F{frame_idx+1} (Max:{max_disp:.4f})", fontsize=9)
ax.set_xlim(mid_x - max_range, mid_x + max_range)
ax.set_ylim(mid_y - max_range, mid_y + max_range)
ax.set_zlim(mid_z - max_range, mid_z + max_range)
ax.axis('off')
plt.tight_layout()
plt.savefig(output_debug_image, dpi=150, bbox_inches='tight')
plt.close()
print(f"📊 运动热力图已生成: {output_debug_image},快去看看哪里变红了!")
break