
    h                         S SK r S SKrS SKJr  \R                  " SS/SS/SS/S	S
/SS//\R                  S9rSS jr	SS jr
SS jrS rS rS rS rS rg)    N)	transformghs%C@g7[ I@g 	bR@gq-I@g9L@gSt$Q@g_vOD@gZdW@gmV}Q@gEGrW@dtypec                 V   U R                   S:X  d   eUS-  S:X  d  US-  S:X  d   eUS-  S:X  a  [        U5      S-  nSnO[        U5      S-  nSU-  n[        U-  nUS S 2S4==   U-  ss'   [        R                  " 5       nUR                  X5        UR                  SS2S S 24   nU$ )	N)      p   r      g      \@g      `@g       @r   )shapefloatarcface_dsttransSimilarityTransformestimateparams)lmk
image_sizemoderatiodiff_xdsttformMs           V/var/www/fran/franai/venv/lib/python3.13/site-packages/insightface/utils/face_align.pyestimate_normr      s    99c>1
3 111#~qj!%'j!%'U

C!HH%%'E	NN3QqS!VAH    c                 L    [        XU5      n[        R                  " XX"4SS9nU$ N        borderValuer   cv2
warpAffineimglandmarkr   r   r   warpeds         r   	norm_cropr)      s(    hD1A^^CZ$<#NFMr   c                 N    [        XU5      n[        R                  " XX"4SS9nXT4$ r   r"   r%   s         r   
norm_crop2r+       s+    hD1A^^CZ$<#NF9r   c                 V   U R                   S   U R                   S   :  aR  Un[        [        U R                   S   5      U R                   S   -  U-  5      n[        U5      U R                   S   -  nOQUn[        [        U R                   S   5      U R                   S   -  U-  5      n[        U5      U R                   S   -  n[        R                  " XU45      n[
        R                  " XS4[
        R                  S9nXVS UR                   S   2S UR                   S   2S S 24'   Xd4$ )Nr         r   )r   intr   r#   resizenpzerosuint8)imSheightwidthscale
resized_imdet_ims          r   square_cropr;   %   s   	xx{RXXa[ E"((1+&!4q89a288A;&U288A;'"((1+59:a288A;&B0JXXqQirxx0F<FJQ!5*"2"21"5!5q89=r   c                    Un[        U5      [        R                  -  S-  n[        R                  " US9nUS   U-  nUS   U-  n	[        R                  " SU-  SU	-  4S9n
[        R                  " US9n[        R                  " US-  US-  4S9nXz-   U-   U-   nUR
                  SS n[        R                  " U XU4S	S
9nX4$ )Ng     f@)r8   r   r-   )translation)rotationr   r   r    )r   r1   pir   r   r   r#   r$   )datacenteroutput_sizer8   r?   scale_ratiorott1cxcyt2t3t4tr   croppeds                   r   r   r   4   s    K
/BEE
!E
)C		"	"	5B	[	 B	[	 B		"	"Rb/A	BB		"	"C	0B		"	"a0;a0A 
BB
"rA	1AnnTk :),.G :r   c                 8   [         R                  " U R                  [         R                  S9n[	        U R                  S   5       HP  nX   n[         R
                  " US   US   S/[         R                  S9n[         R                  " X5      nUSS X#'   MR     U$ )Nr   r   r   r-         ?r   r   )r1   r2   r   float32rangearraydot)ptsr   new_ptsiptnew_pts         r   trans_points2drZ   G   s}    hhSYYbjj9G399Q< V2a5"Q%,BJJ?"Aa[
 ! Nr   c                    [         R                  " US   S   US   S   -  US   S   US   S   -  -   5      n[         R                  " U R                  [         R                  S9n[        U R                  S   5       Hb  nX   n[         R                  " US   US   S/[         R                  S9n[         R                  " X5      nUSS X4   SS& X   S   U-  X4   S'   Md     U$ )Nr   r-   rO   rP   r   r   )r1   sqrtr2   r   rQ   rR   rS   rT   )rU   r   r8   rV   rW   rX   rY   s          r   trans_points3dr]   S   s    GGAaDGad1g%!Q!A$q'(99:EhhSYYbjj9G399Q< V2a5"Q%,BJJ?" 1+
1Qq	E)
1 ! Nr   c                 T    U R                   S   S:X  a  [        X5      $ [        X5      $ )Nr-   r   )r   rZ   r]   )rU   r   s     r   trans_pointsr_   b   s(    
yy|qc%%c%%r   )r	   arcface)r#   numpyr1   skimager   r   rS   rQ   r   r   r)   r+   r;   rZ   r]   r_    r   r   <module>rd      sw    
  & hhw'7+gw-?w'7+-
**
 

&	&r   