o
    *ju                     @   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)Z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.pklZ
model_pathzJ_regressor_extra.npyJ_regressor_extra)Zdtypec                 S   s   g | ]}t | qS  )	JOINT_MAP).0ir3   r3   t/var/www/html/Deteccion_Ine/venv/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   r3   )ospjoin
contextlibredirect_stdoutsuperr1   __init__nploadZregister_buffertorchZtensorZfloat32arrayJOINT_NAMESaction2motion_jointsZarangeuniqueZr_maps)selfZsmpl_data_pathkwargsr2   Zvibe_indexesZa2m_indexesZsmpl_indexesZa2mpl_indexes	__class__r3   r7   r>   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=   r1   forwardr   r2   rL   rA   catZjointsrF   items)	rG   argsrH   Zsmpl_outputZextra_jointsZ
all_jointsoutputZ	joinstypeZindexesrI   r3   r7   rM   i   s   
zSMPL.forward)__name__
__module____qualname____doc__r>   rM   __classcell__r3   r3   rI   r7   r1   N   s    r1   )r;   Zos.pathpathr9   numpyr?   rA   Zsmplxr   Z
_SMPLLayerZ	smplx.lbsr   rD   ZJOINTSTYPE_ROOTr4   listkeysrC   r1   r3   r3   r3   r7   <module>   s   	
 !"#4