o
    ߥiu                     @   sj  d dl Z d dlmZ d dlZd dlZd dlmZ	 d dl
mZ g dZd d d ddZi ddd	d
dddddddddddddd dddddddddd d!d"d#d$d%d&i d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7dd8dd9d:d;d<d=d d>d"d?dd@ddAdddddBdCdDdEdFdGdHdd&d$d*d(dIZee ZG dJdK dKe	ZdS )L    N)	SMPLLayer)vertices2joints)                        r   	   
                     &   r   )a2msmpla2mplvibezOP Noser   zOP Neckr   zOP RShoulder   z	OP RElbow   z	OP RWristr   zOP LShoulder   z	OP LElbow   z	OP LWrist   z	OP MidHipzOP RHipr   zOP RKneer	   z	OP RAnklezOP LHipr   zOP LKneer   z	OP LAnkler   zOP REye   zOP LEye   zOP REar   zOP LEar   z
OP LBigToe   zOP LSmallToe   zOP LHeel   z
OP RBigToe    zOP RSmallToe!   zOP RHeel"   zRight Anklez
Right Kneez	Right Hip-   zLeft Hip.   z	Left Kneez
Left AnklezRight WristzRight ElbowzRight Shoulder/   0   1   2   3   4   5   )zLeft Shoulderz
Left Elbowz
Left Wristz
Neck (LSP)zTop of Head (LSP)zPelvis (MPII)zThorax (MPII)zSpine (H36M)z
Jaw (H36M)zHead (H36M)NosezLeft Eyez	Right EyezLeft Earz	Right Earc                       s,   e Zd ZdZ fddZ fddZ  ZS )SMPLzF Extension of the official SMPL implementation to support more joints c                    s   t |d|d< td  tt| jd
i | W d    n1 s#w   Y  tt |d}| 	dt
j|t
jd tdd tD }|t }td}ttj||f }||||d	| _d S )NzSMPL_NEUTRAL.pkl
model_pathzJ_regressor_extra.npyJ_regressor_extra)dtypec                 S   s   g | ]}t | qS  )	JOINT_MAP).0ir6   r6   g/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/cv/motion_generation/modules/smpl.py
<listcomp>]   s    z!SMPL.__init__.<locals>.<listcomp>r   )r   r   r   r   r6   )ospjoin
contextlibredirect_stdoutsuperr2   __init__nploadregister_buffertorchtensorfloat32arrayJOINT_NAMESaction2motion_jointsarangeuniquer_maps)selfsmpl_data_pathkwargsr4   vibe_indexesa2m_indexessmpl_indexesa2mpl_indexes	__class__r6   r:   rA   Q   s(   

zSMPL.__init__c           	         sn   t t| j|i |}t| j|j}tj|j|gdd}d|ji}| j	
 D ]\}}|d d |f ||< q&|S )Nr   )dimvertices)r@   r2   forwardr   r4   rY   rE   catjointsrN   items)	rO   argsrQ   smpl_outputextra_joints
all_jointsoutput	joinstypeindexesrV   r6   r:   rZ   i   s   
zSMPL.forward)__name__
__module____qualname____doc__rA   rZ   __classcell__r6   r6   rV   r:   r2   N   s    r2   )r>   os.pathpathr<   numpyrB   rE   smplxr   
_SMPLLayer	smplx.lbsr   rJ   JOINTSTYPE_ROOTr7   listkeysrI   r2   r6   r6   r6   r:   <module>   s   	
 !"#4