
    i                         S SK r S SKrS SKrS SKrS SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr   " S S\5      rS	 rS
 rS rSS jrg)    N)Image)Polygon)
IaaAugment)is_poly_outside_rect)get_rotate_crop_imagec                   0    \ rS rSrSS jrS rS rS rSrg)		CopyPaste   c                 ^    SU l         Xl        X l        SSSS/0S./n[        U5      U l        g )N   Resizesize      ?   )typeargs)ext_data_numobjects_paste_ratiolimit_paster   aug)selfr   r   kwargsaugmenter_argss        e/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppocr/data/imaug/copy_paste.py__init__CopyPaste.__init__   s8    #6 &#+fsAh5GHIn-    c                    US   R                   S   nUS   nUS   R                  5       nUS   nUS   R                  5       nUS   S   nUS   nUS   n	US   n
US   n[        [        U5      5       Vs/ s H  oU   (       a  M  UPM     nn[	        S[        [        U R                  [        U	5      -  5      S5      5      n[        R                  " U5        US U nX   nX   n[        R                  " U[        R                  5      n[        R                  " U[        R                  5      n[        R                  " U5      R                  S	5      n[!        UUU5       H  u  nnn[#        UU5      nU R%                  UUU5      u  nnUc  M.  UR                  5       n[        [        U5      U5       H  nUR'                  US
   5        M     UR'                  U5        UR'                  U
U   5        UR'                  U5        M     [        R                  " [(        R*                  " U5      [        R,                  5      nUR                   S S u  nn[(        R*                  " U5      n[(        R.                  " US S 2S S 2S4   SU5      US S 2S S 2S4'   [(        R.                  " US S 2S S 2S4   SU5      US S 2S S 2S4'   X1S'   XAS'   XQS'   [(        R*                  " U5      US'   U$ s  snf )Npolysr   imagetextsignore_tagsext_datar      RGBA   )shapetolistrangelenmaxminintr   randomshufflecv2cvtColorCOLOR_BGR2RGBr   	fromarrayconvertzipr   	paste_imgappendnparrayCOLOR_RGB2BGRclip)r   data	point_numsrc_img	src_polys	src_textssrc_ignoresr#   	ext_image	ext_polys	ext_textsext_ignoresiindexes
select_numselect_idxsselect_polysselect_ignoresidxpolytagbox_imgbox_hws                             r   __call__CopyPaste.__call__"   s   M''*	w-M((*	M	=)002
#A&W%	W%	W%	}-#C$45L5^15LCD$<$<s9~$M NPRST
wkz* -$1,,w(9(9:LLC,=,=>	//'*226:!+|^LNCs+It<G>>'7IFLGSjjls3x3AJJs2w' 4  %  30""3' M ,,rxx0#2C2CD}}Ra 1HHY'	WWYq!Qw%7A>	!Q'WWYq!Qw%7A>	!Q'W!W!W hh{3]? Ms   5K*K*c                 r   [         R                  " U5      R                  S5      nUR                  u  pVUR                  u  px[        R
                  R                  SS5      n	[        R                  " SS/US/Xx/SU///5      n
[        X*U	5      S   n
UR                  U	SS9nUR                  UR                  pXW-
  S:  d  Xh-
  S:  a  US 4$ U R                  X:XW-
  Xh-
  5      u  pUc  US 4$ U
S S 2S4==   U-  ss'   U
S S 2S4==   U-  ss'   UR                  5       u  pnnUR                  XKU4US9  X4$ )Nr%   r   ih  r   )expand)mask)r   r4   r5   r   r9   r/   randintr:   rotate_bboxrotatewidthheightselect_coordsplitpaste)r   r?   rP   r@   box_img_pilsrc_wsrc_hbox_wbox_hanglerQ   paste_xpaste_yrgbAs                    r   r7   CopyPaste.paste_imgO   sK   oog.66v>||"''		!!!S)hh!Q%e^aZHIJ'.q1!((q(9"((+*<*<u=1 1D= ,,EM5=
 ?D= AqD	W	AqD	W	 &&(
akW#5A>|r   c           
      J   U R                   (       a  US S 2S4   R                  5       US S 2S4   R                  5       US S 2S4   R                  5       US S 2S4   R                  5       4u  pVpx[        S5       Hu  n	[        R
                  " SU5      n
[        R
                  " SU5      nXZ-   nXz-   nXk-   nX-   nSnU H!  n[        UXX-
  X-
  5      (       a  M  US-  n  O   US:X  d  Mr  X4s  $    g[        R
                  " SU5      n
[        R
                  " SU5      nX4$ )Nr   r   2   )NN)r   r-   r,   r*   r/   rZ   r   )r   r@   rQ   endxendyxminyminxmaxymaxrR   rh   ri   xmin1xmax1ymin1ymax1num_poly_in_rectrN   s                     r   r_   CopyPaste.select_coordh   s"   AqD	AqD	AqD	AqD		&"D 2Y ..D1 ..D1#$ %D/eEM5=  )A-( & $q("++! " nnQ-GnnQ-G##r   )r   r   r   r   N)g?T)	__name__
__module____qualname____firstlineno__r   rU   r7   r_   __static_attributes__ r   r   r	   r	      s    .+Z2$r   r	   c                 \    [        U 5      R                  [        U5      5      R                  $ N)r   unionareapDpGs     r   	get_unionr      s!    2;WR[)...r   c                 0    [        X5      [        X5      -  $ r   )get_intersectionr   r   s     r   get_intersection_over_unionr      s    B#i&777r   c                 \    [        U 5      R                  [        U5      5      R                  $ r   )r   intersectionr   r   s     r   r   r      s!    2;##GBK0555r   c           	         U R                   S   nU R                   S   n[        R                  " U5      n[        [        R                  " U5      U-  5      [        [        R
                  " U5      U-  5      -   n[        [        R
                  " U5      U-  5      [        [        R                  " U5      U-  5      -   n[        R                  " US-  US-  4X#5      n	[        R                  " U	[        R                  " Xt-
  S-  X-
  S-  S/5      5      n
U	S==   U
S   -  ss'   U	S==   U
S   -  ss'   [        5       nU H  n[        R                  " U	[        R                  " US   US   S/5      5      n[        R                  " U	[        R                  " US   US	   S/5      5      n[        R                  " U	[        R                  " US
   US   S/5      5      n[        R                  " U	[        R                  " US   US   S/5      5      nUR                  XUU/5        M     [        R                  " U[        R                  S9$ )z
from https://github.com/WenmuZhou/DBNet.pytorch/blob/master/data_loader/modules/augment.py
Args:
    img: np.ndarray
    text_polys: np.ndarray N*4*2
    angle: int
    scale: int

Returns:

r   r   r   )r   r'   )r   r'   )r   r   )r   r   )r   r   )r   r   )r'   r   )r'   r   )r   r   )r   r   )dtype)r(   r9   deg2radabssincosr1   getRotationMatrix2Ddotr:   listr8   float32)img
text_polysrg   scalerT   rS   ranglenwnhrot_matrot_moverot_text_polysbboxpoint1point2point3point4s                    r   r[   r[      s    			!A		!AZZF	RVVF^a	 3rvvf~'9#:	:B	RVVF^a	 3rvvf~'9#:	:B%%rCxc&:EIGvvgrxx"&C"&C(KLMHDMXa[ MDMXa[ M VN4:tDz1*E!FG4:tDz1*E!FG4:tDz1*E!FG4:tDz1*E!FGvvv>?  88N"**55r   )r   )copyr1   r/   numpyr9   PILr   shapely.geometryr   ppocr.data.imaug.iaa_augmentr   !ppocr.data.imaug.random_crop_datar   tools.infer.utilityr   objectr	   r   r   r   r[   r   r   r   <module>r      sE     
    $ 3 B 5k$ k$\/866r   