o
    ߥiY                     @   s   d dl Z d dlZd dlZd dlZddlmZ ddlmZm	Z	 dd Z
dd Zdd
dZdddZd	edfddZd	edfddZdddZdS )    N   )WriterWrapper)matrix_to_axis_anglerotation_6d_to_matrixc                 C   s   t | d7}t|}t|d }t|d }t|d }d|v r3t|d }|ddd}nd }W d    n1 s?w   Y  |dd}|ddd d d d	f }|dd
}||||fS )Nrbposebetastransjointsr      
   H   )openpickleloadtorch
from_numpyreshape)
pose_fnamefdatar   betar	   r
    r   l/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/cv/human3d_animation/generate_skeleton.pyload_smpl_params   s   

r   c                 C   s$   d| d d |d |d d f< | S )Nr   r   r   r   )r   startendr   r   r   set_pose_param   s    r   movec           	      C   s  t | }tj||tjd}|d d d df }|d d dd f }tj| d d dkr2|d }d}d}t|j	d D ]!}|dkrDq=|dkrL|} n|| 
||d  r\|d7 }q=d}q=|d |d d d f }|d |d d d f }|d	kr|dd d f |dd d d f< ||fS )
Ndevicedtype   comb_d   r   r   r   inplace)npr   r   tensorfloatospathbasenamerangeshapeequal)	filenamer!   modeanimposeslocrepeatidxir   r   r   load_test_anim"   s,   

 r9   c           
      C   s   t j| dd }|d }|j\}}}tj||tjd}|ddd}|dd	}t	|}t
|}|dd
d}|d }	tj|	|tjd}	|	dd}	|dkrVt|df}	td|   ||	fS )NTallow_picklethetasr       r   r   r         r   root_translationr'   zload %s)r(   r   itemr/   r   r)   r*   permuter   r   r   zerosprint)
r1   r!   r2   r   r3   n_jointctr4   r5   r   r   r   load_syn_motion>   s    rH   cpuc                 C   s`   t j|| d }t j|std|   t j|dd}td|  t|||d\}}||fS )N.npyz2can not find action %s, use default action instead	3D-assetszSwingDancing.npyload action %sr2   )r+   r,   joinexistsrD   r9   )action_name	model_dir
action_dirr2   r!   action_path	test_posetest_locr   r   r   load_actionV   s   
rV   c                 C   s   |  d}t|d ||||d\}}|dd d f }d}	t|dkrk|D ]B} |	dkr/|	d7 }	q$td|   t| ||||d\}
}||dd d f  }||7 }|dd d f }t||
gd}t||gd}q$|	d7 }	||fS )N,r   r2   r!   r   r   rL   )splitrV   lenrD   r   cat)actionrQ   rR   r2   r!   action_listrT   rU   	final_locr7   r   r5   	delta_locr   r   r   load_action_listg   s,   



r`   c                 C   s@  t j|d}td}t j| d}t j|d}t|\}	}
}}|dr/t j|d}nt j|d}tj|dd		 }|d
 }|d }|
d}t|}|drq|}td|  t|||d\}}|j|||||	d n'td|  t|| |d|d\}}td}||d |  }|j||||d td|  dS )Nzskeleton_a.bvhrI   rK   zsmpl.pklrJ   zskeleton_nohand.npyzskeleton.npyTr:   skeletonparentr   rL   rM   )
action_loc	rest_poser   rX   gGz?)r   r   )rc   zsave %s)r+   r,   rN   r   r!   r   endswithr(   r   rA   squeezer   rD   rH   writer`   r)   )rQ   rR   case_dirr\   r2   	outpath_ar!   
assets_dirpkl_pathr4   shapesr	   r
   skeleton_pathr   ra   rb   
bvh_writerrS   rT   rU   std_yr   r   r   gen_skeleton_bvh   sB   






rp   )r   )r+   r   numpyr(   r   rn   r   utilsr   r   r   r   r9   rH   r!   rV   r`   rp   r   r   r   r   <module>   s"   



