
    iF                        S r SSKrSSKrSSKrSSKrSSKrSSKJrJ	r	  S$S jr
S$S jrS$S jrS%S jr " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S  S!\5      r " S" S#\5      rg)&zZ
This code is refer from:
https://github.com/FangShancheng/ABINet/blob/main/transforms.py
    N)ComposeColorJitterc                 J    [         R                  R                  SSU5      U -  $ )N      nprandombeta	magnitudesizes     e/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppocr/data/imaug/abinet_aug.pysample_asymr      s    99>>!Q%	11    c                 R    [         R                  R                  SSUS9S-
  S-  U -  $ )Nr   r         ?   r   r   s     r   
sample_symr      s*    IINN1adN+c1Q6BBr   c                 >    [         R                  R                  XUS9$ )Nr   )r	   r
   uniform)lowhighr   s      r   sample_uniformr   #   s    99ST22r   c                    U S:X  af  [         R                  [         R                  [         R                  [         R                  /nU[
        R                  " S[        U5      S-
  5         nU$ U S:X  a  [         R                  nU$ U S:X  a  [         R                  nU$ U S:X  a  [         R                  nU$ U S:X  a  [         R                  nU$ [        S5      e)	Nr
   r   r   nearestlinearcubicareazDInterpolation types only nearest, linear, cubic, area are supported!)	cv2INTER_NEARESTINTER_LINEARINTER_CUBIC
INTER_AREAr
   randintlen	TypeError)typechoiceinterpolations      r   get_interpolationr,   '   s    x##S%5%5sWv~~aVqAB  
	))  
	((  
  

  R
 	
r   c                   4    \ rS rSrSS jr\S 5       rS rSrg)CVRandomRotation:   c                 v    [        U[        R                  5      (       d   S5       eUS:  d   S5       eXl        g )N!degree should be a single number.r   degree must be positive.)
isinstancenumbersNumberdegrees)selfr6   s     r   __init__CVRandomRotation.__init__;   s6    '7>>22W4WW2!|777|r   c                     [        U 5      $ N)r   r6   s    r   
get_paramsCVRandomRotation.get_params@   s    '""r   c                    U R                  U R                  5      nUR                  S S u  p4[        R                  " US-  US-  4USS9n[        US   5      [        US   5      pv[        X7-  XF-  -   5      n[        X6-  XG-  -   5      n	US==   X-
  S-  -  ss'   US==   X-
  S-  -  ss'   [        5       n
[        R                  " XX4U
[        R                  S9$ )	Nr         ?)centeranglescaler   r   )r   r   r   r   r   r   flags
borderMode)
r=   r6   shaper!   getRotationMatrix2Dabsintr,   
warpAffineBORDER_REPLICATE)r7   imgrB   src_hsrc_wMabs_cosabs_sindst_wdst_hrH   s              r   __call__CVRandomRotation.__call__D   s    -yy!}##AIuqy)c
 qw<QtWEOeo56EOeo56	$EMQ&&	$EMQ&&!#~~UN%C<P<P
 	
r   r<   N)   )	__name__
__module____qualname____firstlineno__r8   staticmethodr=   rX   __static_attributes__ r   r   r.   r.   :   s     
 # #
r   r.   c                   :    \ rS rSrSS jrS r\S 5       rS rSr	g)	CVRandomAffineV   Nc                    [        U[        R                  5      (       d   S5       eUS:  d   S5       eXl        UbT  [        U[        [
        45      (       a  [        U5      S:X  d   S5       eU H  nSUs=::  a  S::  a  M  O  [        S5      e   X l        UbK  [        U[        [
        45      (       a  [        U5      S:X  d   S	5       eU H  nUS::  d  M  [        S
5      e   X0l	        Ubq  [        U[        R                  5      (       a  US:  a  [        S5      eU/U l
        g [        U[        [
        45      (       a  [        U5      S:X  d   S5       eX@l
        g X@l
        g )Nr1   r   r2   r   z?translate should be a list or tuple and it must be of length 2.        r@   z,translation values should be between 0 and 1z;scale should be a list or tuple and it must be of length 2.zscale values should be positivez1If shear is a single number, it must be positive.z;shear should be a list or tuple and it must be of length 2.)r3   r4   r5   r6   tuplelistr'   
ValueError	translaterC   shear)r7   r6   rj   rC   rk   tss          r   r8   CVRandomAffine.__init__W   s^   '7>>22W4WW2!|777| 9udm44Y19LQPQLqC$%STT  #55$-00SZ1_MLMD6$%FGG  
%0019$K  $W
!%%77J!OQPQ  #
Jr   c                 x   SSK JnJnJn  [	        U[
        R                  5      (       a  US/n[	        U[        [        45      (       d,  [        U5      S:X  a  [        SSR                  U5      -   5      e[        R                  " U5      n	U V
s/ s H  n
[        R                  " U
5      PM     sn
u  pUu  pUu  nnU" X-
  5      U" U5      -  nU" X-
  5      * U" U5      -  U" U5      -  U" U	5      -
  nU" X-
  5      U" U5      -  nU" X-
  5      * U" U5      -  U" U5      -  U" U	5      -   nUU* SU* US/nU Vs/ s H  nUU-  PM
     nnUS==   US   U* U-
  -  US   U* U-
  -  -   -  ss'   US==   US   U* U-
  -  US	   U* U-
  -  -   -  ss'   US==   U-  ss'   US==   U-  ss'   U$ s  sn
f s  snf )
Nr   )sincostanr   z:Shear should be a single value or a tuple/list containing ztwo values. Got {}r         r   )numpyrp   rq   rr   r3   r4   r5   rg   rh   r'   ri   formatmathradians)r7   rA   rB   rj   rC   rk   rp   rq   rr   rotrm   sxsycxcytxtyabcdrS   xs                          r   _get_inverse_affine_matrix)CVRandomAffine._get_inverse_affine_matrix}   s   ''eW^^,,AJE%%//CJ!OL&--e45 
 ll5!+015a$,,q/51B MCG#]NSW$s2w.S9MCG#]NSW$s2w.S9 Ar1a  !"1QY" 	
!!b!AaDRC"H$555	!!b!AaDRC"H$555 	
!
	!
/ 2 #s    F2=F7c                    [        U 5      nUbO  US   U-  nUS   U-  n[        R                  " [        U5      5      [        R                  " [        U5      5      4nOSnUb  [        US   US   5      n	OSn	UbL  [	        U5      S:X  a  [        US   5      S/n
O.[	        U5      S:X  a  [        US   5      [        US   5      /n
OSn
XXU	W
4$ )Nr   r   rD   r@   rf   r   )r   r	   roundr   r'   )r6   rj   scale_rangesshearsheightrB   max_dxmax_dytranslationsrC   rk   s              r   r=   CVRandomAffine.get_params   s    7# q\F*Fq\F*FHHZ%78"((:fCU:VWL!L#"<?LODEE6{a#F1I.4V!#F1I.
6!90EFEE500r   c           
         UR                   S S u  p#U R                  U R                  U R                  U R                  U R
                  U5      u  pEpgU R                  US-  US-  4USXg5      n[        R                  " U5      R                  SS5      nSUS-
  S4US-
  US-
  4SUS-
  4/n	S n
U	 VVs/ s H  u  pU
" X/US   Q76 U
" X/US   Q76 4PM     nnn[        R                  " [        R                  " U5      5      n[        R                  " U5      R                  [        R                  S9nUS S 2S4   R                  5       US S 2S4   R                  5       nnUS S 2S4   R!                  5       US S 2S4   R!                  5       nn[#        UU-
  5      n[#        UU-
  5      nUS==   UU-
  S-  -  ss'   US	==   UU-
  S-  -  ss'   U[#        [%        US   5      5      -  nU[#        [%        US   5      5      -  nUS   S:  a  US==   [%        US   5      -  ss'   US   S:  a  US	==   [%        US   5      -  ss'   ['        5       n[        R(                  " XUU4U[        R*                  S
9$ s  snnf )Nr   rD   rt   r   r   c                 ,    [        X -  X1-  -   U-   5      $ r;   )rM   )r   yr   r   r   s        r   <lambda>)CVRandomAffine.__call__.<locals>.<lambda>   s    AEAEMA,=(>r   dtyperE   rF   rG   )rJ   r=   r6   rj   rC   rk   r   r	   arrayreshaper!   minAreaRect	boxPointsastypeint32maxminrM   rL   r,   rN   rO   )r7   rP   rQ   rR   rB   rj   rC   rk   rS   startpointsprojectr   r   	endpointsrectbboxmax_xmax_ymin_xmin_yrV   rW   rH   s                          r   rX   CVRandomAffine.__call__   so   yy!})-LL$..$**djj%*
&% ++QY	"E65
 HHQK1%	1~	519/E5ST9~V>EP
EPTQWQ!AaD!71#7!A$#78[ 	 
 rxx	23}}T")))9AqDz~~'ad)9uAqDz~~'ad)9uEEM"EEM"	$EEMQ&&	$EEMQ&& 	S1&''S1&''Q<!dGs9Q<((GQ<!dGs9Q<((G!#~~UEN%C<P<P
 	
/
s   4$I=)r6   rC   rk   rj   )NNN)
r[   r\   r]   r^   r8   r   r_   r=   rX   r`   ra   r   r   rc   rc   V   s'    $L%N 1 10&
r   rc   c                   *    \ rS rSrSS jrS rS rSrg)CVRandomPerspective   c                     Xl         g r;   
distortion)r7   r   s     r   r8   CVRandomPerspective.__init__   s    $r   c                    [        X2-  S-  SS9R                  [        R                  S9n[        X1-  S-  SS9R                  [        R                  S9nUS   US   4nUS-
  US   -
  US   4nUS-
  US   -
  US-
  US   -
  4nUS   US-
  US   -
  4n	SUS-
  S4US-
  US-
  4SUS-
  4/n
XgX/n[        R                  " U
[        R
                  S9[        R                  " U[        R
                  S94$ )	Nr   r   r   r   r   r   rt   rD   )r   r   r	   r   r   float32)r7   widthr   r   offset_hoffset_wtoplefttoprightbotrightbotleftr   r   s               r   r=   CVRandomPerspective.get_params   s    z2Q6Q?FFRXXFVz1A5A>EEBHHEUA;,AI+Xa[9AI+VaZ(1+-EFA;
Xa[ 89	1~	6A:/FFUVJX:	xx2::6RZZ9
 
 	
r   c                 t   UR                   S S u  p#U R                  X2U R                  5      u  pE[        R                  " XE5      n[        R
                  " U5      n[        R                  " U5      R                  [        R                  S9nUS S 2S4   R                  5       US S 2S4   R                  5       pUS S 2S4   R                  5       US S 2S4   R                  5       p[        US5      [        US5      p[        5       n[        R                  " XX4U[        R                  S9nXS 2US 24   nU$ )Nr   r   r   r   rG   )rJ   r=   r   r!   getPerspectiveTransformr   r   r   r	   r   r   r   r,   warpPerspectiverO   )r7   rP   r   r   r   r   rS   r   r   r   r   r   r   rH   s                 r   rX   CVRandomPerspective.__call__   s   		"1!%!P''? y)}}T")))9AqDz~~'ad)9uAqDz~~'ad)9u5!}c%mu!#!!UN%C<P<P
 &%&.!
r   r   Nr   )r[   r\   r]   r^   r8   r=   rX   r`   ra   r   r   r   r      s    %
r   r   c                   $    \ rS rSrSS jrS rSrg)	CVRescalei  c                 H   [        U[        R                  5      (       a  [        [	        SU5      5      U l        OV[        U[        [        45      (       a0  [        U5      S:X  a!  [        [	        US   US   5      5      U l        O[        S5      eUSS u  U l
        U l        g)zDefine image scales using gaussian pyramid and rescale image to target scale.

Args:
    factor: the decayed factor from base size, factor=4 keeps target scale by default.
    base_size: base size the build the bottom layer of pyramid
r   r   r   z+factor must be number or list with length 2N)r3   r4   r5   r   r   factorrg   rh   r'   	Exceptionbase_hbase_w)r7   r   	base_sizes      r   r8   CVRescale.__init__  s     fgnn--q& 9:DK..3v;!3Cvay&) DEDKIJJ#,Ra= T[r   c                 Z   U R                   S:X  a  U$ UR                  S S u  p#U R                  U R                  pT[        R
                  " XU4[        5       S9n[        U R                   5       H  n[        R                  " U5      nM     [        R
                  " XcU4[        5       S9nU$ )Nr   r   )r+   )	r   rJ   r   r   r!   resizer,   rangepyrDown)r7   rP   rQ   rR   cur_wcur_h	scale_img_s           r   rX   CVRescale.__call__  s    ;;!Jyy!}{{DKKuJJsENBSBUV	t{{#AI.I $JJu~5F5H
	 r   )r   r   r   N)r   )   i   r[   r\   r]   r^   r8   rX   r`   ra   r   r   r   r     s    1 r   r   c                   $    \ rS rSrSS jrS rSrg)CVGaussianNoisei+  c                 @   Xl         [        U[        R                  5      (       a$  [	        [        [        U5      5      S5      U l        g [        U[        [        45      (       a0  [        U5      S:X  a!  [        [        US   US   5      5      U l        g [        S5      eNr   r   r   z+degree must be number or list with length 2)meanr3   r4   r5   r   rM   r   varrg   rh   r'   r   r   )r7   r   r   s      r   r8   CVGaussianNoise.__init__,  sr    	c7>>**3{3/0!4DHeT]++CA>#a&#a&9:DHIJJr   c                     [         R                  R                  U R                  U R                  S-  UR
                  5      n[         R                  " X-   SS5      R                  [         R                  5      nU$ )Nr   r      )	r	   r
   normalr   r   rJ   clipr   uint8r7   rP   noises      r   rX   CVGaussianNoise.__call__5  sR    		  DHHcM399Eggck1c*11"((;
r   )r   r   N)r      r   ra   r   r   r   r   +  s    Kr   r   c                   $    \ rS rSrSS jrS rSrg)CVPossionNoisei;  c                 @   Xl         [        U[        R                  5      (       a$  [	        [        [        U5      5      S5      U l         g [        U[        [        45      (       a0  [        U5      S:X  a!  [        [        US   US   5      5      U l         g [        S5      e)Nr   r   r   z(lam must be number or list with length 2)lamr3   r4   r5   r   rM   r   rg   rh   r'   r   r   )r7   r   s     r   r8   CVPossionNoise.__init__<  sr    c7>>**3{3/0!4DHeT]++CA>#a&#a&9:DHFGGr   c                     [         R                  R                  U R                  UR                  S9n[         R
                  " X-   SS5      R                  [         R                  5      nU$ )N)r   r   r   r   )r	   r
   poissonr   rJ   r   r   r   r   s      r   rX   CVPossionNoise.__call__E  sK    		!!dhhSYY!?ggck1c*11"((;
r   r   N)r   r   ra   r   r   r   r   ;  s    Hr   r   c                        \ rS rSrS rS rSrg)CVGaussionBluriK  c                 @   Xl         [        U[        R                  5      (       a$  [	        [        [        U5      5      S5      U l         g [        U[        [        45      (       a0  [        U5      S:X  a!  [        [        US   US   5      5      U l         g [        S5      e)Nr   r   r   z+radius must be number or list with length 2)radiusr3   r4   r5   r   rM   r   rg   rh   r'   r   r   )r7   r   s     r   r8   CVGaussionBlur.__init__L  ss    fgnn--c+f"56:DK..3v;!3CnVAYq	BCDKIJJr   c                     [         R                  " U R                  S[         R                  S9n[         R                  " USX"5      nU$ )Nr   )ksizesigmaktype)r!   getGaussianKernelr   CV_32FsepFilter2D)r7   rP   fils      r   rX   CVGaussionBlur.__call__U  s5    ##$++QcjjQooc2s0
r   r   Nr   ra   r   r   r   r   K  s    Kr   r   c                   $    \ rS rSrSS jrS rSrg)CVMotionBluri[  c                 Z   [        U[        R                  5      (       a$  [        [	        [        U5      5      S5      U l        OV[        U[        [        45      (       a0  [        U5      S:X  a!  [	        [        US   US   5      5      U l        O[        S5      e[        U* U5      U l        g r   )r3   r4   r5   r   rM   r   degreerg   rh   r'   r   r   rB   )r7   r6   rB   s      r   r8   CVMotionBlur.__init__\  s~    gw~~..c+g"67;DK%//CLA4EnWQZDEDKIJJ#UFE2
r   c                    [         R                  " U R                  S-  U R                  S-  4U R                  S5      n[        R
                  " U R                  U R                  45      nSX0R                  S-  S S 24'   [         R                  " X2U R                  U R                  45      nX0R                  -  n[         R                  " USU5      n[        R                  " USS5      R                  [        R                  5      nU$ )Nr   r   r   r   r   )r!   rK   r   rB   r	   zerosrN   filter2Dr   r   r   )r7   rP   rS   motion_blur_kernels       r   rX   CVMotionBlur.__call__e  s    ##T[[A%5t{{a7G$H$**VWXXXt{{DKK&@A23;;!+Q./ ^^DKK#=
 0++=ll3$67ggc1c"))"((3
r   )rB   r   N)   Z   r   ra   r   r   r   r   [  s    3
r   r   c                   0    \ rS rSr      SS jrS rSrg)
CVGeometryir  c                     X`l         [        R                  " 5       nUS:  a  [        US9U l        g US:  a  [	        XX4S9U l        g [        US9U l        g )NgQ?r<   gQ?r6   rj   rC   rk   r   )pr
   r.   
transformsrc   r   )r7   r6   rj   rC   rk   r   r  type_ps           r   r8   CVGeometry.__init__s  sM     D=.w?DOd],EDO 2ZHDOr   c                 n    [         R                   " 5       U R                  :  a  U R                  U5      $ U$ r;   r
   r  r  r7   rP   s     r   rX   CVGeometry.__call__  (    ==?TVV#??3''Jr   r  r  N)rZ   333333?r  r   g       @-   rZ   r   r   r   ra   r   r   r	  r	  r  s!     
I(r   r	  c                   $    \ rS rSrSS jrS rSrg)CVDeteriorationi  c                    X@l         / nUb  UR                  [        US95        Ub  UR                  [        US95        Ub  UR                  [	        US95        [
        R                  " U5        [        U5      nXPl        g Nr   r<   r   )	r  appendr   r   r   r
   shuffler   r  r7   r   r6   r   r  r  s         r   r8   CVDeterioration.__init__  sq    
?o#67l7;<iv67z"Z(
$r   c                 n    [         R                   " 5       U R                  :  a  U R                  U5      $ U$ r;   r  r  s     r   rX   CVDeterioration.__call__  r  r   r  Nr   r   ra   r   r   r  r    s    %r   r  c                   $    \ rS rSrSS jrS rSrg)CVColorJitteri  c                 .    XPl         [        XX4S9U l        g )N)
brightnesscontrast
saturationhue)r  r   r  )r7   r*  r+  r,  r-  r  s         r   r8   CVColorJitter.__init__  s    %!
r   c                 n    [         R                   " 5       U R                  :  a  U R                  U5      $ U$ r;   r  r  s     r   rX   CVColorJitter.__call__  r  r   r  N)r   r   r   g?r   r   ra   r   r   r(  r(    s    
r   r(  c                   $    \ rS rSrSS jrS rSrg)SVTRDeteriorationi  c                     X@l         / nUb  UR                  [        US95        Ub  UR                  [        US95        Ub  UR                  [	        US95        XPl        g r  )r  r!  r   r   r   r  r#  s         r   r8   SVTRDeterioration.__init__  s[    
?o#67l7;<iv67$r   c                     [         R                   " 5       U R                  :  a=  [         R                  " U R                  5        [	        U R                  5      nU" U5      $ U$ r;   r
   r  r"  r  r   r7   rP   r  s      r   rX   SVTRDeterioration.__call__  A    ==?TVV#NN4??+ 1Jc?"Jr   r  Nr   r   ra   r   r   r2  r2    s    	%r   r2  c                   $    \ rS rSrSS jrS rSrg)ParseQDeteriorationi  c                 .   X`l         / nUb  UR                  [        US95        Ub  UR                  [        US95        Ub  UR                  [	        US95        Ub  UR                  [        US95        Ub  UR                  [        US95        Xpl        g )Nr  r<   r   r   r   )r  r!  r   r   r   r   r   r  )r7   r   r6   r   r   r   r  r  s           r   r8   ParseQDeterioration.__init__  s    
?o#67l7;<?n56nF;<iv67$r   c                     [         R                   " 5       U R                  :  a=  [         R                  " U R                  5        [	        U R                  5      nU" U5      $ U$ r;   r6  r7  s      r   rX   ParseQDeterioration.__call__  r9  r   r  Nr   r   ra   r   r   r;  r;    s    %r   r;  c                   2    \ rS rSr       SS jrS rSrg)SVTRGeometryi  c           	          Xl         Xpl        / U l        U R                  R                  [	        US95        U R                  R                  [        X#XES95        U R                  R                  [        US95        g )Nr<   r  r   )aug_typer  r  r!  r.   rc   r   )r7   rC  r6   rj   rC   rk   r   r  s           r   r8   SVTRGeometry.__init__  sf     !/@AE	

 	2jIJr   c                 t   [         R                   " 5       U R                  :  a  U R                  (       aW  [         R                  " U R                  5        [        U R                  S [         R                  " SS5       5      nU" U5      nU$ U R                  [         R                  " SS5         " U5      nU$ U$ )Nr   rt   r   r   )r
   r  rC  r"  r  r   r&   r7  s      r   rX   SVTRGeometry.__call__  s    ==?TVV#}}t/$T__5Kv~~a7K%LM
 o J oofnnQ&:;C@JJr   )rC  r  r  N)r   rZ   r  r  r  r   r   r   ra   r   r   rA  rA    s$     
K*
r   rA  r;   )r
   )__doc__rw   r4   r
   r!   ru   r	   paddle.vision.transformsr   r   r   r   r   r,   objectr.   rc   r   r   r   r   r   r   r	  r  r(  r2  r;  rA  ra   r   r   <module>rJ     s       
  92C3&
v 
8M
V M
`#& #L >f  V  V  6 . 8f ,F  *& 2 6  r   