o
    *jY                     @   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poseZbetastransjointsr      
   H   )openpickleloadtorchZ
from_numpyreshape)Z
pose_fnamefdatar   betar   r	    r   y/var/www/html/Deteccion_Ine/venv/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deviceZdtype   Z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,   

 r4   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Zallow_pickleZthetasr      r   r   r
         r   Zroot_translationr"   zload %s)r#   r   itemr*   r   r$   r%   Zpermuter   r   r   Zzerosprint)
r,   r   r-   r   r.   Zn_jointctr/   r0   r   r   r   load_syn_motion>   s    r=   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r-   )r&   r'   joinexistsr:   r4   )action_name	model_dir
action_dirr-   r   action_path	test_posetest_locr   r   r   load_actionV   s   
rK   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   r-   r   r
   r   rA   )splitrK   lenr:   r   cat)actionrF   rG   r-   r   Zaction_listrI   rJ   Z	final_locr2   r   r0   Z	delta_locr   r   r   load_action_listg   s,   



rR   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.bvhr>   r@   zsmpl.pklr?   zskeleton_nohand.npyzskeleton.npyTr5   skeletonparentr   rA   rB   )
action_locZ	rest_poser   rM   gGz?)r   r   )rU   zsave %s)r&   r'   rC   r   r   r   endswithr#   r   r9   Zsqueezer   r:   r=   writerR   r$   )rF   rG   Zcase_dirrQ   r-   Z	outpath_ar   Z
assets_dirZpkl_pathr/   Zshapesr   r	   Zskeleton_pathr   rS   rT   
bvh_writerrH   rI   rJ   Zstd_yr   r   r   gen_skeleton_bvh   sB   






rY   )r   )r&   r   numpyr#   r   rX   r   utilsr   r   r   r   r4   r=   r   rK   rR   rY   r   r   r   r   <module>   s"   



