
    h                     F    S r SSKrSSKJr   S	S jrS
S jrSS jrSS jrg)zP
Estimating parameters about vertices: shape para, exp para, pose para(s, R, t)
    N   )meshc	                 6   U R                  5       n UR                  S   UR                  S   :X  d   eUR                  S   U R                  S   S-  :X  d   eUR                  S   n	U R                  S   n
Un[        R                  " U5      n[        R                  " / SQ/ SQ/[        R                  S9nX\R                  U5      -  n[        R                  " UR                  XS/5      n[        R                  " XU
-  S/5      nUR                  UR                  R                  5       5      n[        R                  " XS/5      R                  n[        R                  " XS/5      R                  nUnUR                  UU-   5      [        R                  " USS2[        R                  4   SU
/5      -   n[        R                  " UR                  SS/5      n[        R
                  " UR                  U5      U[        R                  " SUS	-  -  5      -  -   n[        R                  " U R                  SS/5      n [        R
                  " UR                  U U-
  5      n[        R
                  " [        R                  R                  U5      U5      nU$ )
a=  
Args:
    x: (2, n). image points (to be fitted)
    shapeMU: (3n, 1)
    shapePC: (3n, n_sp)
    shapeEV: (n_sp, 1)
    expression: (3, n)
    s: scale
    R: (3, 3). rotation matrix
    t2d: (2,). 2d translation
    lambda: regulation coefficient

Returns:
    shape_para: (n_sp, 1) shape parameters(coefficients)
r         r   r   r   r   r   r   dtypeNr   copyshapenparrayfloat32dotresizeTreshapetilenewaxisdiagflatlinalginv)xshapeMUshapePCshapeEV
expressionsRt2dlambdofnsigmaPApc_3dpc_2dpcmu_3dexp_3dbequation_leftequation_right
shape_paras                          k/var/www/fran/franai/venv/lib/python3.13/site-packages/insightface/thirdparty/face3d/morphable_model/fit.pyestimate_shaper4   7   s     	
A==w}}Q//0/==qwwqz!|+,+
--
C	
AE
((3-C
)Y'<A	%%(
A IIgii#!-EJJu1uaj)EIIacchhj!E	E9	%	'	'B IIg1v&((EF	efnArzzM(:QF CCA


133Q A FF244$tbkk!E1H*.E'EEM


133Q AVVBDD!a%(N		m4nEJ    c	                    U R                  5       n UR                  S   UR                  S   :X  d   eUR                  S   U R                  S   S-  :X  d   eUR                  S   n	U R                  S   n
Un[        R                  " U5      n[        R                  " / SQ/ SQ/[        R                  S9nX\R                  U5      -  n[        R                  " UR                  XS/5      n[        R                  " XU
-  S/5      nUR                  UR                  5      n[        R                  " XS/5      R                  n[        R                  " XS/5      R                  nUnUR                  UU-   5      [        R                  " USS2[        R                  4   SU
/5      -   n[        R                  " UR                  SS/5      n[        R
                  " UR                  U5      U[        R                  " SUS	-  -  5      -  -   n[        R                  " U R                  SS/5      n [        R
                  " UR                  U U-
  5      n[        R
                  " [        R                  R                  U5      U5      nU$ )
a2  
Args:
    x: (2, n). image points (to be fitted)
    shapeMU: (3n, 1)
    expPC: (3n, n_ep)
    expEV: (n_ep, 1)
    shape: (3, n)
    s: scale
    R: (3, 3). rotation matrix
    t2d: (2,). 2d translation
    lambda: regulation coefficient

Returns:
    exp_para: (n_ep, 1) shape parameters(coefficients)
r   r   r   r   r	   r
   r   Nr   r   )r   r   expPCexpEVr   r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   shape_3dr/   r0   r1   exp_paras                          r3   estimate_expressionr;   l   s     	
A==u{{1~-.-==qwwqz!|+,+
++a.C	
AE
((3-C
)Y'<A	%%(
A IIegg{+EJJu1uaj)EIIaccNE	E9	%	'	'B IIg1v&((EH	eh"''#am*<q!f"EEA


133Q A FF244$tbkk!E1H*.E'EEM


133Q AVVBDD!a%(NvvbiimmM2NCHOr5   c                 j   U R                  5       R                  n [        R                  " US4[        R                  S9n[        R                  " US4[        R                  S9n[        R
                  " U[        R                  SS24   SS/5      S-  nUSSS24==   S-  ss'   USSS24==   S-  ss'   UR                  S5      n	US   U	SS24   n
US   U	SU24   nUS	   U	SU24   n[        U5       GH  nXR                  U5      -   UR                  U5      -   n[        R                  " U[        [        U5      S-  5      S/5      R                  n[        R                  R                  UR                  U R                  5      n[        R                  R!                  U5      u  nnn[        R                  R#                  U5      u  nnnUR                  U5      n[        R                  " U[        [        U5      S-  5      S/5      R                  n[%        X
XS
   SU2SS24   UUUUSS SS9	nUR                  U5      n[        R                  " U[        [        U5      S-  5      S/5      R                  nUS:X  d  GM  ['        X
XS   SU2SS24   UUUUSS SS9	nGM     XgWWW4$ )
Args:
    x: (n, 2) image points
    X_ind: (n,) corresponding Model vertex indices
    model: 3DMM
    max_iter: iteration
Returns:
    sp: (n_sp, 1). shape parameters
    ep: (n_ep, 1). exp parameters
    s, R, t
r   r
   Nr   r   Fr   r   r7   r8      r$   r   r   (   )r   r   r   zerosr   r   r   flattenranger   r   intlenr   	transformestimate_affine_matrix_3d22dP2sRtmatrix2angler;   r4   )r   X_indmodeln_spn_epmax_iterspep	X_ind_all	valid_indr   r   r7   iXr(   r!   r"   trxryrzr   r    s                           r3   
fit_pointsrZ      sy    	


A 
4)RZZ	0B	4)RZZ	0B bjj!m,q!f5a7IadOqOadOqO!!#&IIy!|,GIy%4%/0G'N9ete+,E8_kk"o%		"5JJq3s1vax=!,-// NN77QSSA..&&q)1a^^003
B
 B

53s5z!|#4a"89;; U'N5D574KUTUWXZ[\^]^Z_hjk YYr]
ZZ
SZ1B-CQ,GHJJ
6G95EeteAg5NPZ\]_`bcdfefbgprsB) , 1a?r5   c                 0   U R                  5       R                  n [        R                  " US4[        R                  S9n[        R                  " US4[        R                  S9n[        R
                  " U[        R                  SS24   SS/5      S-  nUSSS24==   S-  ss'   USSS24==   S-  ss'   UR                  S5      n	US   U	SS24   n
US   U	SU24   nUS	   U	SU24   nS
n[        R                  R                  / SQ5      n/ SQn/ n/ n/ n/ n/ n[        U5       GH  nXR                  U5      -   UR                  U5      -   n[        R                  " U[        [        U5      S-  5      S/5      R                  nUR!                  U5        UR!                  U5        UR!                  U5      UR!                  U5      UR!                  U5      4  [        R                  R#                  UR                  U R                  5      n[        R                  R%                  U5      u  pnUR!                  U5        UR!                  U5        UR!                  U5      UR!                  U5      UR!                  U5      4  UR                  U5      n[        R                  " U[        [        U5      S-  5      S/5      R                  n['        X
XS   SU2SS24   UXUSS SS9	nUR!                  U5        UR!                  U5        UR!                  U5      UR!                  U5      UR!                  U5      4  UR                  U5      n[        R                  " U[        [        U5      S-  5      S/5      R                  n[)        X
XS   SU2SS24   UXUSS SS9	nGM     [        R*                  " U5      [        R*                  " U5      [        R*                  " U5      [        R*                  " U5      [        R*                  " U5      4$ )r=   r   r
   Nr   r   r>   r   r   r7   g-C6:?)r   r   r   r8   r?   r@   r   rA   )r   r   r   rB   r   r   r   rC   r   rG   angle2matrixrD   r   r   rE   rF   appendrH   rI   r;   r4   r   )r   rK   rL   rM   rN   rO   rP   rQ   rR   rS   r   r   r7   r!   r"   rV   lspleplslRltrT   rU   r(   r   r    s                             r3   fit_points_for_showrc      sO    	


A 
4)RZZ	0B	4)RZZ	0B bjj!m,q!f5a7IadOqOadOqO!!#&IIy!|,GIy%4%/0G'N9ete+,EA##I.AA
CBcRbr"8_kk"o%		"5JJq3s1vax=!,-//

2

2		!biilBIIaL(P NN77QSSA..&&q)a

2

2		!biilBIIaL(P B

53s5z!|#4a"89;; U'N5D574KUTUZ[\^]^Z_hjk

2

2		!biilBIIaL(P YYr]
ZZ
SZ1B-CQ,GHJJ
Ay1A%4%'1JJXY^_`bab^clno) 0 88C="((3-"rxx|RXXb\QQr5   )i  )i  )   )	__doc__numpyr    r   r4   r;   rZ   rc    r5   r3   <module>ri      s0     .`3j2l2l8Rr5   