
    8j                    |    S r SSKJr  SSKrSSKrSSKJr  SSKrSSKr	SSK
r
\" S5      r\S-  S-  r " S S	5      rg)
u   Thin wrapper around LAM Audio2Expression for generating lipsync targets.

Model location: /dataset/text-to-face-se/LAM_Audio2Expression
Checkpoint:     checkpoints_황준희_lr5e-6/best.pt
    )annotationsN)Pathz-/dataset/text-to-face-se/LAM_Audio2Expressionu   checkpoints_황준희_lr5e-6zbest.ptc                  j    \ rS rSr\S4SS jjr\R                  " 5       SS	S jj5       rS
SS jjr	Sr
g)
LAMWrapper   Nc                    [         R                  5       (       d  [        S[          35      eUR                  5       (       d  [        SU 35      e[        R                  R                  S[        [         5      5        [        R                  " 5       U l	        [        R                  " [        [         5      5         SSKJn  [        R                  " U R                  5        U=(       d'    [        R                  R                  5       (       a  SOSU l        [        R                  " [        [         5      5         U" SSS	S
SSSSSS9	R#                  U R                   5      U l        [        R&                  " XR                   SS9nUR)                  SUR)                  SU5      5      nUR+                  5        VVs0 s H(  u  pgUR-                  SS5      R-                  SS5      U_M*     nnnU R$                  R/                  USS9  U R$                  R1                  5         [        R                  " U R                  5        g ! [        R                  " U R                  5        f = fs  snnf ! [        R                  " U R                  5        f = f)NzLAM_DIR not found: zLAM checkpoint not found: r   )Audio2Expressioncudacpuwav2veczfacebook/wav2vec2-base-960hzconfigs/wav2vec2_config.json   @   i   4   lnF)	pretrained_encoder_typepretrained_encoder_pathwav2vec2_config_pathnum_identity_classesidentity_feat_dim
hidden_dimexpression_dim	norm_typeuse_transformer)map_locationweights_onlymodel_state_dict
state_dictzmodule. z	backbone.)strict)LAM_DIRexistsFileNotFoundErrorsyspathinsertstrosgetcwd	_orig_cwdchdirmodels.networkr	   torchr
   is_availabledevicetomodelloadgetitemsreplaceload_state_dicteval)	selfcheckpoint_pathr.   r	   ckptr   kvnew_state_dicts	            `/home/ubuntu/service/kemix-engine/package/face/animasync-face-v3/scripts/compiler/lam_wrapper.py__init__LAMWrapper.__init__   s   ~~#&9'$CDD%%''#&@@Q$RSS3w<(
W	%7HHT^^$P5::+B+B+D+D% 	W	%)(1(E%C%'"$! %
 bo J ::oKKV[\D"4dhh|T6RSJ ',,..DA 		)R(00bA1D.   JJ&&~e&DJJOOHHT^^$9 HHT^^$* HHT^^$s+   :I  9B I+ 9/I%(7I+  "I"%I+ +"Jc                F   SSK n[        R                  " [        U5      SSS9u  pE[        R
                  " U5      R                  5       R                  S5      R                  U R                  5      nUR                  [        U5      U-  U-  5      nU[        R                  " SS5      R                  U R                  5      US.nU R                  U5      n	U	R                  S5      R                  5       R!                  5       R#                  [$        R&                  5      n
U
$ )	zXRun LAM on an audio file.

Returns:
    (T, 52) float32 blendshapes at `fps` frame rate
r   N>  T)srmono   r   )input_audio_arrayid_idx
time_steps)mathlibrosar1   r&   r,   
from_numpyfloat	unsqueezer/   r.   ceillenzerosr0   squeezer   numpyastypenpfloat32)r7   
audio_pathfpsrH   wavrB   
wav_tensor
num_frames
input_dictoutputbss              r=   infer_audioLAMWrapper.infer_audio?   s     	,,s:5tD%%c*002<<Q?BB4;;O
YYs3x"}s23
 ",kk!R(++DKK8$


 J'^^A""$**,33BJJ?	    c                    SSK nSSKnUR                  SSS9 nUR                  UR                  X5        U R                  [        UR                  5      5      sSSS5        $ ! , (       d  f       g= f)z5Run LAM on a raw audio array (already at 16kHz mono).r   Nz.wavF)suffixdelete)tempfile	soundfileNamedTemporaryFilewritenamer]   r   )r7   rW   rB   rc   sffs         r=   infer_wav_arrayLAMWrapper.infer_wav_arrayT   sR    ((u(EHHQVVS%##DL1 FEEs   A A##
A1)r)   r.   r0   )r8   r   r.   r&   )   )rU   r   rV   intreturn
np.ndarray)rA   )rW   ro   rB   rm   rn   ro   )__name__
__module____qualname____firstlineno__LAM_CHECKPOINTr>   r,   no_gradr]   rj   __static_attributes__ r_   r=   r   r      s1    /=T (%T ]]_ (2 2r_   r   )__doc__
__future__r   r'   r#   pathlibr   rI   rQ   rS   r,   r    rt   r   rw   r_   r=   <module>r{      sH   
 # 	 
    
>
?99IEF2 F2r_   