code: def read_smpls(cls, scene_dir, caps, scale=1, smpl_type="romp"):
      def extract_smpl_at_frame(raw_smpl, frame_id):
          out = {}
          for k, v in raw_smpl.items():
              try:
                  out[k] = v[frame_id]
              except:
                  out[k] = None
          return out
  
      device = torch.device("cpu")
      body_model = SMPL(
          os.path.join(
              os.path.abspath(
                  os.path.join(os.path.dirname(__file__), "..")
              ),
              "data/smplx/smpl",
          ),
          gender="neutral",
          device=device,
      )
      smpls = []
      static_verts = []
      world_verts = []
      Ts = []
      smpl_path = os.path.join(
          scene_dir, f"smpl_output_{smpl_type}.pkl"
      )
      assert os.path.isfile(smpl_path), f"{smpl_path} is missing"
      print(f"using {smpl_type} smpl")
      raw_smpl = joblib.load(smpl_path)
      assert len(raw_smpl) == 1
      raw_smpl = raw_smpl[list(raw_smpl.keys())[0]]
      raw_alignments = np.load(
          os.path.join(scene_dir, "alignments.npy"), allow_pickle=True
      ).item()
      for cap in caps:
          frame_id = int(os.path.basename(cap.image_path)[:-4])
          # assert 0 <= frame_id < len(caps)
          temp_smpl = extract_smpl_at_frame(raw_smpl, frame_id)
          temp_alignment = np.eye(4)
          temp_alignment[:, :3] = raw_alignments[
              os.path.basename(cap.image_path)
          ]
  
          # 大 pose
          da_smpl = np.zeros_like(temp_smpl["pose"][None])
          da_smpl = da_smpl.reshape(-1, 3)
          da_smpl[1] = np.array([0, 0, 1.0])
          da_smpl[2] = np.array([0, 0, -1.0])
          da_smpl = da_smpl.reshape(1, -1)
  
          _, T_t2pose = body_model.verts_transformations(
              return_tensor=False,
              poses=temp_smpl["pose"][None],
              betas=temp_smpl["betas"][None],
              concat_joints=True,
          )
          _, T_t2da = body_model.verts_transformations(
              return_tensor=False,
              poses=da_smpl,
              betas=temp_smpl["betas"][None],
              concat_joints=True,
          )
          T_da2pose = T_t2pose @ np.linalg.inv(T_t2da)
          T_da2scene = temp_alignment.T @ T_da2pose
          s = np.eye(4)
          s[:3, :3] *= scale
          T_da2scene = s @ T_da2scene
  
          da_pose_verts, da_pose_joints = body_model(
              return_tensor=False,
              return_joints=True,
              poses=da_smpl,
              betas=temp_smpl["betas"][None],
          )
          temp_world_verts = np.einsum(
              "BNi, Bi->BN",
              T_da2scene,
              ray_utils.to_homogeneous(
                  np.concatenate(
                      [da_pose_verts, da_pose_joints], axis=0
                  )
              ),
          )[:, :3].astype(np.float32)
          temp_world_verts, temp_world_joints = (
              temp_world_verts[:6890, :],
              temp_world_verts[6890:, :],
          )
          temp_smpl["joints_3d"] = temp_world_joints
          temp_smpl["static_joints_3d"] = da_pose_joints
          smpls.append(temp_smpl)
          Ts.append(T_da2scene)
          static_verts.append(da_pose_verts)
          world_verts.append(temp_world_verts)
      return smpls, world_verts, static_verts, Ts
  
imports: import os
  import joblib
  import numpy
  import torch
  from tqdm import tqdm
  import PIL
  import scipy
  from data_io import colmap_helper
  from geometry import pcd_projector
  from cameras import captures, contents
  from scenes import scene
  from utils import utils, ray_utils
  from models.smpl import SMPL
label_desc: Use image node_id 3 for calling the NeuManReader obj's underlying member method code with example usage: obj.read_smpls(cls, scene_dir, caps, scale, smpl_type) and returns: smpls,  world_verts,  static_verts,  Ts, out