
    ir                     T    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rS/r " S S\	5      r
g)z^
This part code is referred from:
https://github.com/songdejia/EAST/blob/master/data_utils.py
    NSASTProcessTrainc                       \ rS rSrSS/SSSS4S jrS rS rS	 rSS
 jrS r	S r
 S S jrS!S jrS rS rS"S jr S#S jrS rS rS rS rS rS rS rS rS rS rSrg)$r      i      333333?
   c                 H    US   U l         X l        X0l        X@l        XPl        g )N   )
input_sizemin_crop_sizemin_crop_side_ratiomin_text_sizemax_text_size)selfimage_shaper   r   r   r   kwargss          g/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppocr/data/imaug/sast_process.py__init__SASTProcessTrain.__init__   s'     &a.*#6 **    c                 H   US   S   US   S   -
  US   S   US   S   -   -  US   S   US   S   -
  US   S   US   S   -   -  US   S   US   S   -
  US   S   US   S   -   -  US   S   US   S   -
  US   S   US   S   -   -  /n[         R                  " U5      S-  $ )z1
compute area of a polygon
:param poly:
:return:
r
   r                @)npsum)r   polyedges      r   	quad_areaSASTProcessTrain.quad_area,   s     !WQZ$q'!*$ad1gaj)@A!WQZ$q'!*$ad1gaj)@A!WQZ$q'!*$ad1gaj)@A!WQZ$q'!*$ad1gaj)@A	
 vvd|c!!r   c                 *   UR                   S   n[        R                  " S[        R                  S9n [        R
                  " UR                  [        R                  5      5      nUS   n[        R                  " [        R                  " U5      5      nSnSn[        S5       H  n	[        R                  R                  XiS-   S-     US   -
  5      [        R                  R                  XiS-   S-     XS-  S-
     -
  5      -   [        R                  R                  XiS-   S-     XS-     -
  5      -   [        R                  R                  XiS-   S-     US	   -
  5      -   n
X:  d  M  U
nU	nM     [        S5       H  n	XgU	-   S-     X9'   M     U$ )
#
Generate min area quad from poly.
r      r   dtype     @r$   r
   r   r   )shaper   zerosfloat32cv2minAreaRectastypeint32array	boxPointsrangelinalgnorm)r   r   	point_nummin_area_quadrectcenter_pointboxfirst_point_idxmin_distidists              r   gen_quad_from_poly#SASTProcessTrain.gen_quad_from_poly:   sr    JJqM	rzz:??BHH%D  7L((3==./COH1XIINN3A{#3d1g#=>iinnSa%1%5!^a=O8P%PQRiinnSa%1%5!^8L%LMN iinnSa%1%5R%@AB  ?#H&'O  1X#&!(;q'@#A   r   c                    Uu  pEUR                   S   S:X  a-  U[        R                  " / 5      [        R                  " / 5      4$ [        R                  " USS2SS2S4   SUS-
  5      USS2SS2S4'   [        R                  " USS2SS2S4   SUS-
  5      USS2SS2S4'   / n/ n/ n[	        X5       GHQ  u  pU R                  U	5      nU R                  U5      n[        U5      S:  a  [        S5        MD  US:  a%  U
S:X  a  [        S5        Sn
U	SSS24   n	US	SS24   n[        R                  R                  US   US   -
  5      [        R                  R                  US
   US   -
  5      -   n[        R                  R                  US   US
   -
  5      [        R                  R                  US   US   -
  5      -   nSnUS-  U:  a  SnUR                  U	5        UR                  U
5        UR                  U5        GMT     [        R                  " U5      [        R                  " U5      [        R                  " U5      4$ )z
check so that the text poly is in the same direction,
and also filter some invalid polygons
:param polys:
:param tags:
:return:
r   Nr
   zinvalid polyFzpoly in wrong directionT)r                  r   	               r$   r   r   r
   )r   r   r   r
   r   r   r   )r)   r   r0   clipzipr>   r   absprintr3   r4   append)r   polystagsxxx_todo_changemehwvalidated_polysvalidated_tagshv_tagsr   tagquadp_arealen_wlen_hhv_tags                   r   check_and_validate_polys)SASTProcessTrain.check_and_validate_polysX   s    #;;q>Q"((2,44q!QwAE:aAgq!QwAE:aAgU)ID**40D^^D)F6{Qn%z%<34CRTUUVL!O,IINN47T!W#45		Q$q'!9 E IINN47T!W#45		Q$q'!9 E Fs{U"""4(!!#&NN6"5 *6 xx("((>*BBHHWDUUUr   c                    UR                   u  pxn	US-  n
US-  n[        R                  " XzS-  -   [        R                  S9n[        R                  " XS-  -   [        R                  S9nU H  n[        R                  " USS9R                  [        R                  5      n[        R                  " USS2S4   5      n[        R                  " USS2S4   5      nSXU-   UU-   & [        R                  " USS2S4   5      n[        R                  " USS2S4   5      nSUUU
-   UU
-   & M     [        R                  " US:H  5      S   n[        R                  " US:H  5      S   n[        U5      S:X  d  [        U5      S:X  a  XX44$ [        U5       GHG  n[        R                  R                  USS9n[        R                  " U5      U-
  n[        R                  " U5      U-
  n[        R                  " USUS-
  5      n[        R                  " USUS-
  5      n[        R                  R                  USS9n[        R                  " U5      U
-
  n[        R                  " U5      U
-
  n[        R                  " USUS-
  5      n[        R                  " USUS-
  5      nUU-
  U R                  :  d  UU-
  U R                  :  a  GM9  UR                   S   S:w  ao  USS2SS2S4   U:  USS2SS2S4   U:*  -  USS2SS2S4   U:  -  USS2SS2S4   U:*  -  n[        R                  " [        R                  " USS	9S
:H  5      S   nO/ n[        U5      S:X  a-  U(       a#  UUUS-   2UUS-   2SS24   UU   UU   UU   4s  $ GM  UUUS-   2UUS-   2SS24   nUU   nUU   nUU   nUSS2SS2S4==   U-  ss'   USS2SS2S4==   U-  ss'   XX44s  $    XX44$ )z
make random crop from the input image
:param im:
:param polys:
:param tags:
:param crop_background:
:param max_tries: 50 -> 25
:return:
r   r   r%   r   decimalsNr
   )sizeaxisr$   )r)   r   r*   r/   roundr.   minmaxwherelenr2   randomchoicerK   r   r   )r   imrP   rQ   rW   crop_background	max_triesrS   rT   _pad_hpad_wh_arrayw_arrayr   minxmaxxminymaxyh_axisw_axisr<   xxxminxmaxyyyminymaxpoly_axis_in_areaselected_polyss                                 r   	crop_areaSASTProcessTrain.crop_area   s    ((aRR((A	M"((;((A	M"((;D88D1-44RXX>D66$q!t*%D66$q!t*%D34G5L4%<066$q!t*%D66$q!t*%D34GD5L4%<0  'Q,'*'Q,'*v;!s6{a/d++y!A!!&q!1B66":%D66":%D774AE*D774AE*D!!&q!1B66":%D66":%D774AE*D774AE*D d{T///4$;ASAS3S{{1~"1a7^t+Q1W~-/Q1W~-/ Q1W~-/ " "$"&&1B*Kq*P!QRS!T!#>"a'"4$(?D4!8OQ>?n-^,/	  D4!8OTD1H_a78B.)E'Dn-G!Q'Nd"N!Q'Nd"Nd++W "Z $''r   c                    / n/ nU H  n[         R                  R                  US   US   -
  5      [         R                  R                  US   US   -
  5      -   S-  n[         R                  R                  US   US   -
  5      [         R                  R                  US   US   -
  5      -   S-  nUR                  U5        UR                  U5        M     [	        [        U5      [        U5      S-   -  S5      n[	        [        U5      [        U5      S-   -  S5      n	U H  nUS   US   -   US   US   -   -
  S-  n
U
[         R                  R                  U
5      S-   -  U-  n[        [        [        US   US   SU	S-   -  /5      5      n[        R                  " UUR                  5       R                  [         R                  5      [         R                  SS2SS24   U5        M     U$ )	 r   r
   r   r   r   ư>      ?N)r   r3   r4   rO   rh   r   rj   tuplemapfloatr,   fillPolyrf   r.   r/   newaxis)r   
poly_quadsdirection_map
width_listheight_listrY   quad_wquad_h
norm_widthaverage_heightdirect_vector_fulldirect_vectordirection_labels                r   generate_direction_map'SASTProcessTrain.generate_direction_map   s   
D		tAwa01BIINN47TRSWCT4UUF 		tAwa01BIINN47TRSWCT4UUF f%v&  ZC
Od,BCSI
S-[1AD1HI3OD#'7T!W#4a479J"Ks!R"99>>"45<> 
 $"1%}Q'7QU@U9VWO LL

##BHH-bjj!Q.>? $ r   c                 (   / nU Hh  n[         R                  R                  US   US   -
  5      [         R                  R                  US   US   -
  5      -   S-  nUR                  U5        Mj     [	        [        U5      [        U5      -  S5      nU$ )r   r   r   r   r
   r   r   )r   r3   r4   rO   rh   r   rj   )r   r   r   rY   r   r   s         r   calculate_average_height)SASTProcessTrain.calculate_average_height   s    D		tAwa01BIINN47TRSWCT4UUF v&	 
 S-K0@@#Fr   c                 d   Uu  px[        Xt-  5      [        X-  5      pX$-  n[        R                  " UU4[        R                  S9n	[        R                  " XxS4[        R                  S9n
[        R                  " UU4[        R                  S9n[        R                  " XxS45      [        R
                  " / SQ5      R                  / SQ5      R                  [        R                  5      -  n[        [        X#5      5       GH  u  pUS   nUS   nU R                  U5      u  nnS[        R                  R                  US   US   -
  5      [        R                  R                  US   US	   -
  5      -   -  nS[        R                  R                  US   US   -
  5      [        R                  R                  US	   US   -
  5      -   -  n[        UU5      U R                  U-  :  d  [        UU5      U R                  U-  :  a  GM	  U(       aO  [         R"                  " XR                  [        R$                  5      [        R&                  S
S
2S
S
24   S5        GM_  U R)                  X5      nU R+                  U5      nU R+                  U5      nU R-                  UUSU-  S9u  nn[         R"                  " U	[        R.                  " U5      R                  [        R$                  5      S5        [        U5       H  u  nn[        R                  " Xx4[        R                  S9n[         R"                  " U[        R.                  " U[        R&                  S
S
2S
S
24   5      R                  [        R$                  5      S5      nU R1                  UUU      UU
5      n
M     GM     XU4$ )z
Generate polygon.
r%   rJ   r   )r   r   r
   )r
   r
   r   r   r
         ?r   N333333?r   )shrink_ratio_of_widthexpand_height_ratio)intr   r*   r+   onesr0   reshaper.   	enumeraterL   gen_min_area_quad_from_polyr3   r4   rg   r   r   r,   r   r/   r   poly2tcl
poly2quadsshrink_poly_along_widthrf   gen_quad_tbo)r   hwrP   rQ   ds_ratio	tcl_ratior   rS   rT   	score_maptbo_maptraining_maskr   poly_idxpoly_tagr   rX   r6   r8   min_area_quad_hmin_area_quad_wtcl_poly	tcl_quadsr   
stcl_quads
quad_indexidxrY   	quad_masks                                r   generate_tcl_label#SASTProcessTrain.generate_tcl_label   s*    1< #al"31 HH **
	 ((A!9BJJ7 **
 q	*RXXi-@-H-H.

&
 #,C,<"=HA;D1+C +/*J*J4*P'M<!		}Q/-2BBC))..q!1M!4D!DEFO "		}Q/-2BBC))..q!1M!4D!DEFO O_58J8JX8UU84;M;MPX;XX!;;rxx#8Q9I#JD  ==9 OOH5	!__T2
)-)E)E*?(+i *F *&
J Y(<(C(CBHH(MsS "+:!6IC "!rzz BI #!bjj!Q&6!78??I!I
 #//":c?3YG "7Q #>d =00r   c                    Uu  pg[        Xe-  5      [        Xu-  5      pvX%-  n[        R                  " Xg4[        R                  S9n[        R                  " SXg4[        R                  S9n	[        R
                  " [        R                  " SU5      US45      U	SSS2'   [        R
                  " [        R                  " SU5      US45      R                  U	SSS2'   [        R                  " SXg4[        R                  S9n
[        R                  " SXg4[        R                  S9n[        R
                  " [        R                  " SU5      US45      US'   [        R
                  " [        R                  " SU5      US45      R                  US'   [        R                  " SXg4[        R                  S9n[        R                  " Xg4[        R                  S9n[        X#5       GHv  u  pUS	:X  a  M  U R                  U5      nU R                  U5      u  nnS
[        R                  R                  US   US   -
  5      [        R                  R                  US   US   -
  5      -   -  nS
[        R                  R                  US   US   -
  5      [        R                  R                  US   US   -
  5      -   -  nU R                  X5      n[        S5       GH  n[        R                   " U
SU-     [        R"                  " U[        R$                  SS2SS24   5      R'                  [        R(                  5      [+        [-        [/        UUS4   S5      U5      5      5        [        R                   " U
SU-  S-      [        R"                  " U[        R$                  SS2SS24   5      R'                  [        R(                  5      [+        [-        [/        UUS4   S5      U5      5      5        GM     [        S5       Hs  n[        R                   " UU   [        R"                  " U[        R$                  SS2SS24   5      R'                  [        R(                  5      [+        UU   5      5        Mu     [        R                   " U[        R"                  " U[        R$                  SS2SS24   5      R'                  [        R(                  5      [+        [/        [-        UU5      S5      5      5        [        R                   " U[        R"                  " U[        R$                  SS2SS24   5      R'                  [        R(                  5      S5        GMy     X-  n	U	SS=== U
-  sss& U	S==   U-  ss'   U	R1                  S5      n	X-  nUSS=== U-  sss& US==   U-  ss'   UR1                  S5      nX4$ )z(
Generate tcl map, tvo map and tbo map.
r%   rF   r   r
   r(   r   rG   r   Tr   r$   Nr   )r
   r   r   )r   r   r*   r+   r   tilearangeTrL   adjust_pointr   r3   r4   r   r2   r,   r   rf   r   r.   r/   r   rg   rh   	transpose)r   r   rP   rQ   r   r   rS   rT   	poly_masktvo_mappoly_tv_xy_maptco_mappoly_tc_xy_mappoly_short_edge_mapr   r   r6   r8   r   r   r   r   s                         r   generate_tvo_and_tco%SASTProcessTrain.generate_tvo_and_tcoQ  s    1< #al"31 HHaV2::6	''1a)2::6''"))Aq/Aq6:"Q''"))Aq/Aq6:<<"Q1a)2::> ''1a)2::6WWRYYq!_q!f5
WWRYYq!_q!f577
1a)2::> ggqfBJJ?!%.ND4 $$T*D +/*J*J4*P'M<!		}Q/-2BBC))..q!1M!4D!DEFO "		}Q/-2BBC))..q!1M!4D!DEFO }}T5H Qx"1s7+HHXbjj!Q&678??I#c-Q"7;Q?@
 "1s7Q;/HHXbjj!Q&678??I#c-Q"7;Q?@   Qx"3'HHXbjj!Q&678??I,s+,   LL#"**a"234;;BHHEc#o?EF LL288HRZZA-=$>?FFrxxPRSe /l 	~%**##I.~%**##I.r   c                    UR                   S   nUS:X  a  [        R                  R                  US   US   -
  5      n[        R                  R                  US   US   -
  5      n[        R                  R                  US   US   -
  5      n[        R                  R                  US   US   -
  5      nX5-   S-  XF-   :  a  U/ SQSS24   nU$ US:  a  US   US   -
  nUS   US   -
  n[        R                  " Xx5      [        R                  R                  U5      [        R                  R                  U5      -  S	-   -  n	[        R
                  " [        R                  " U	SS
95      n
[        U
5      S[        R                  -  :  a6  [        [        SU5      5      S/-   nU[        R                  " U5      SS24   nU$ )z
adjust point order.
r   r$   r
   r   r   g      ?)r
   r   r   r   Nr   ra   g98?)r)   r   r3   r4   dotarccosrf   rM   mathpilistr2   r0   )r   r   r5   len_1len_2len_3len_4vector_1vector_2	cos_thetathetaindexs               r   r   SASTProcessTrain.adjust_point  s    JJqM	>IINN47T!W#45EIINN47T!W#45EIINN47T!W#45EIINN47T!W#45E$6L!O,  ]Awa(HAwa(Hx2		x(299>>(+CCdJI IIbhhy1=>E5zX/0U1i01QC7BHHUOQ./r   c                 p   UR                   S   n[        R                  " S[        R                  S9nUS:X  a  Un[        R                  " USS9S-  nX44$ [
        R                  " UR                  [        R                  5      5      nUS   n[        R                  " [
        R                  " U5      5      nSnSn[        S5       H  n	[        R                  R                  XiS-   S-     US   -
  5      [        R                  R                  XiS-   S-     XS-  S-
     -
  5      -   [        R                  R                  XiS-   S-     XS-     -
  5      -   [        R                  R                  XiS	-   S-     US
   -
  5      -   n
X:  d  M  U
nU	nM     [        S5       H  n	XgU	-   S-     X9'   M     X44$ )r"   r   r#   r%   r$   rd   r'   r
   r   r   r(   )r)   r   r*   r+   r   r,   r-   r.   r/   r0   r1   r2   r3   r4   )r   r   r5   r6   r8   r7   r9   r:   r;   r<   r=   s              r   r   ,SASTProcessTrain.gen_min_area_quad_from_poly  s    JJqM	rzz:> M66$Q/!3L0 **- ??BHH%D  7L((3==./COH1XIINN3A{#3d1g#=>iinnSa%1%5!^a=O8P%PQRiinnSa%1%5!^8L%LMN iinnSa%1%5R%@AB  ?#H&'O  1X#&!(;q'@#A   **r   c                     [         R                  " U/U//[         R                  S9nUS   US   US   -
  U-  -   nUS   US   US   -
  U-  -   n[         R                  " US   US   US   US   /5      $ )z#
Generate shrink_quad_along_width.
r%   r   r
   r   r   r   r0   r+   )r   rY   begin_width_ratioend_width_ratio
ratio_pairp0_1p3_2s          r   shrink_quad_along_width(SASTProcessTrain.shrink_quad_along_width  s     XX ?"34BJJ

 Aw$q'DG+z99Aw$q'DG+z99xxa$q'47DG<==r   c                 d   / nS nU H<  n[         R                  R                  US   US   -
  5      nUR                  U5        M>     [         R                  R                  US   S   US   S   -
  5      U-  n[         R                  R                  US   S   US   S   -
  5      U-  n	[	        X[        U5      5      U-  n
U
n[        U5      U
-
  nU" XK5      u  pU R                  X   USS9nU" XL5      u  nnU R                  UU   SUS9n/ nUU:X  a"  UR                  US   US   US   US   /5        OLUR                  U5        [        US-   U5       H  nUR                  UU   5        M     UR                  U5        [         R                  " U5      [        [        UUS-   5      5      4$ )z 
shrink poly with given length.
c                 b    [        U 5       H   u  p#X-  nUS::  d  M  XU   -   X   -  nX$4s  $    g )Nr   )r   )edge_len_listcut_lenr   edge_lenratios        r   get_cut_info>SASTProcessTrain.shrink_poly_along_width.<locals>.get_cut_info  s@    !*=!9#h&$S'99]=OOE:%	 ":r   r   r
   r   r(   r   )r   r   )
r   r3   r4   rO   rg   r   r   r2   r0   r   )r   quadsr   r   upper_edge_listr   rY   upper_edge_lenleft_lengthright_lengthshrink_lengthupper_len_leftupper_len_rightleft_idx
left_ratio	left_quad	right_idxright_ratio
right_quadout_quad_listr   s                        r   r   (SASTProcessTrain.shrink_poly_along_width  s    	& DYY^^DGd1g,=>N"">2 
 iinnU1Xa[58A;%>?BUUyy~~eBilU2Yq\&ABEXX 3+?@CXX 	 'o.>+OL00Oz1 1 
	 ".o!O	;11); 2 

 y   1z!}jmYq\J   +X\95$$U3Z0 6  ,xx&U8Y]-K(LLLr   c                 |    [         R                  " US   US   -
  US   US   -
  /5      n[         R                  " U6 $ )zF
Calculate the angle between vector AB and x-axis positive direction.
r
   r   )r   r0   arctan2)r   ABABs       r   vector_angleSASTProcessTrain.vector_angle%  s=     XXqtad{AaD1Q4K01zz2r   c                 z    Uu  p4[         R                  " U5      n[         R                  " U5      nXe* XT-  Xc-  -
  /$ )zJ
Calculate the line through given point and angle in ax + by + c =0 form.
)r   cossin)r   r   pointxyr  r  s          r   theta_line_cross_point'SASTProcessTrain.theta_line_cross_point,  s;     ffUmffUmT37SW,--r   c                 F    U R                  X5      nU R                  X15      $ )zH
Calculate the line through given point A and B in ax + by + c =0 form.
)r  r  )r   r  r  angles       r   line_cross_two_point%SASTProcessTrain.line_cross_two_point5  s%     !!!'**544r   c                 ^    Uu  p#pEU R                  XR5      nU R                  XC5      nXg-   S-  $ )zH
Calculate the average angle between left and right edge in given poly.
r   )r  )r   r   p0p1p2p3angle30angle21s           r   average_angleSASTProcessTrain.average_angle<  s;     ##B+##B+!Q&&r   c                    Uu  p4nUu  pgnX7-  Xd-  -
  n	U	S:X  a0  [        S5        [        R                  " SS/[        R                  S9$ XH-  Xu-  -
  U	-  n
Xe-  X8-  -
  U	-  n[        R                  " X/[        R                  S9$ )zP
line1 and line2 in  0=ax+by+c form, compute the cross point of line1 and line2
r   zCross point does not existr%   )rN   r   r0   r+   )r   line1line2a1b1c1a2b2c2dr
  r  s               r   line_cross_point!SASTProcessTrain.line_cross_pointE  s     

Gbg6 ./88QF"**5527"a'A27"a'Axxbjj11r   c                    [         R                  " SUS-  -
  /SUS-  -   //[         R                  S9nUS   US   US   -
  U-  -   nUS   US   US   -
  U-  -   n[         R                  " US   US   US   US   /5      $ )z7
Generate center line by poly clock-wise point. (4, 2)
r   r   r%   r   r   r
   r   )r   r   r   r   p0_3p1_2s         r   quad2tclSASTProcessTrain.quad2tclX  s     XXeai03?2CDBJJW
Aw$q'DG+z99Aw$q'DG+z99xxa$q'47DG<==r   c                 6   [         R                  " SUS-  -
  /SUS-  -   //[         R                  S9n[         R                  " U5      nUR                  S   n[        US-  5       H.  nX   XS-
  U-
     X   -
  U-  -   nUS   XF'   US   XES-
  U-
  '   M0     U$ )z0
Generate center line by poly clock-wise point.
r   r   r%   r   r
   )r   r0   r+   
zeros_liker)   r2   )r   r   r   r   r   r5   r   
point_pairs           r   r   SASTProcessTrain.poly2tcla  s     XXeai03?2CDBJJW
==&JJqM	a(C	Ta-#"56BjPP  'qMHM,6qMH]S() ) r   c                     U R                  US   US   5      nU R                  US   US   5      nS[        R                  R                  US   US   -
  5      [        R                  R                  US   US   -
  5      -   -  nS[        R                  R                  US   US   -
  5      [        R                  R                  US   US   -
  5      -   -  nU R	                  U5      n[        R
                  " US:H  5      n	U	 H  u  pX4nU R                  X5      nU R                  XM5      nU R                  X]5      nX-
  u  nnX-
  u  nnUX:US4'   UX:US4'   UX:US4'   UX:US4'   S[        [        Xg5      S5      -  S-  X:US4'   M     U$ )z!
Generate tbo_map for give quad.
r   r
   r   r   r   r   r$   )
r  r   r3   r4   r  argwherer  r%  rh   rg   )r   rY   tcl_maskr   up_line
lower_liner   r   r  
xy_in_polyr  r
  r	  linecross_point_uppercross_point_lowerupper_offset_xupper_offset_ylower_offset_xlower_offset_ys                       r   r   SASTProcessTrain.gen_quad_tboq  s   
 ++DGT!W=..tAwQ@
IINN47T!W,-		tAwa?P0QQ
 IINN47T!W,-		tAwa?P0QQ

 ""4([[Q/
DAFE..u<D $ 5 5g D $ 5 5j G->-F*NN->-F*NN-Gq!G-Gq!G-Gq!G-Gq!G"SV)<c%BBQFGq!G  r   c                 r   / nUR                   S   n/ n[        US-  5       H"  nX   XS-
  U-
     /nUR                  U5        M$     US-  S-
  n[        U5       HD  nUR                  [        R                  " U5      XUS-   /   R                  SS5      / SQ   5        MF     [        R                  " U5      $ )z
Split poly into quads.
r   r   r
   r$   )r   r   r   r
   )r)   r2   rO   r   r0   r   )r   r   	quad_listr5   point_pair_listr   r.  quad_nums           r   r   SASTProcessTrain.poly2quads  s     	JJqM	 a(C)Ta-#*=%>?J"":. ) >A%?C/*Cq>:CCAqI,W # xx	""r   c                    US   nUS   nUS   nUc  g UR                   S   S:X  a  g UR                   u  pVnU R                  X4XV45      u  p4nUR                   S   S:X  a  g [        R                  " SSS5      n	[        R                  R                  U	5      n
[        R                  R                  5       S:  a  SU
-  n
[        R                  " U
5      n
U
nSU
-  n[        R                  " US XS	9nUS S 2S S 2S4==   U-  ss'   US S 2S S 2S
4==   U-  ss'   UR                   u  pVn[        XV5      S:  a(  S[        XV5      -  n[        R                  " US XS	9nX=-  nUR                   u  pVn[        XV5      S:  a  g U R                  X#XHSS9u  p#pHUR                   S   S:X  a  g [        R                  " US-  5      UR                  :  a  g UR                   u  pnUb  Uc  g [!        U R"                  5      [        X5      -  n[        R$                  " / SQ5      nU[        R                  R                  U5      -  n[        R                  " US UUS	9nUS S 2S S 2S4==   U-  ss'   US S 2S S 2S
4==   U-  ss'   [        R                  R                  5       S:  aR  [        R                  R'                  S5      S   S
-   n[)        US-  5      S-  S
-   n[        R*                  " UUU4SSS9n[        R                  R                  5       S:  a?  US[        R                  R                  5       S-  -   -  n[        R,                  " USS5      n[        R                  R                  5       S:  a?  US[        R                  R                  5       S-  -
  -  n[        R,                  " USS5      nUR                   u  pn[        X5      U R"                  S-  :  a  g [        R.                  " U R"                  U R"                  S4[        R0                  S9nSUS S 2S S 2S4'   SUS S 2S S 2S
4'   SUS S 2S S 2S4'   U R"                  U-
  nU R"                  U-
  nSu  nnUS
:  a*  [)        [        R                  R                  5       U-  5      nUS
:  a*  [)        [        R                  R                  5       U-  5      nUR3                  5       UUUU-   2UUU-   2S S 24'   US S 2S S 2S4==   U-  ss'   US S 2S S 2S
4==   U-  ss'   U R5                  U R"                  U R"                  4X4S5      u  nnnU R7                  U R"                  U R"                  4UUSSS9u  nnUS S 2S S 2S4==   S-  ss'   US S 2S S 2S
4==   S-  ss'   US S 2S S 2S4==   S-  ss'   US S 2S S 2S4==   S -  ss'   US S 2S S 2S
4==   S!-  ss'   US S 2S S 2S4==   S"-  ss'   UR9                  S#5      nUS S S$2S S 2S S 24   US'   U[        R:                  S S 2S S 24   US%'   UR9                  S#5      US&'   U[        R:                  S S 2S S 24   US''   UR9                  S#5      US('   UR9                  S#5      US)'   U$ )*NimagerP   ignore_tagsr   r   g?g?r   )dsizefxfyr
   i   g      @   F)rn   )      ?g      ?r   g      ?g      ?g      ?r   r   r   r   r   g?rJ   r   )ksizesigmaXsigmaY        g     o@r   r%   g33333^@gR]@gRY@)r   r   rJ  r   )r   r   g(\2M@g(\L@g     L@)r   r   r
   r(   r   
border_mapr   r   r   )r)   r^   r   r   rk   rl   randr   sqrtr,   resizerh   rg   r   r   rc   r   r   r0   permutationr   GaussianBlurrK   r   r+   copyr   r   r   r   )r   datarm   
text_polys	text_tagsrS   rT   rp   rW   
asp_scales	asp_scaleasp_wxasp_hyrd_scalenew_hnew_w	std_ratiorand_scalesrz_scaleks	im_paddeddel_hdel_wshswr   rO  r   r   r   s                                 r   __call__SASTProcessTrain.__call__  s   ']']
'	:A!#((a)-)F)FA6*
&
w A!# YYsD#.
II$$Z0	99>>c!iIIIi(	yZZ$6=1a7v%1a7v%((aq9tA	)HBdxEB"J((aq9r> .2^^I .< .
*	 A!#669s?$	6((aMu}$//*S->>	hhK
 ryy//<<ZZ$8A1a7x'1a7x' 99>>i'&&q)!,q0BR!Vq1$B!!"RHQqIB99>>i'sRYY^^-334BS%(B99>>i'sRYY^^-334BS%(B ((aut44GGT__dooqAT	(	!Q'(	!Q'(	!Q' %'%'B19RYY^^%-.B19RYY^^%-.B :<	"rEz/2U
?A561a7r!1a7r!/3/F/F__doo.
t0
,	:}
  44__doo. 5 
 	!Q'k)!Q'k)!Q'k)!Q'm+!Q'm+!Q'm+''	2	!$B$1*-W%bjj!Q&67['11)<\ -bjj!Q.> ?_!++I6Y!++I6Yr   )r   r   r   r   r   N)F   )r   r   )r   rJ  )rN  r   )r   )__name__
__module____qualname____firstlineno__r   r   r>   r^   r   r   r   r   r   r   r   r   r   r  r  r  r  r%  r*  r   r   r   ri  __static_attributes__ r   r   r   r      s     #J+"<,V\I(V"H	 OSO1bV p6 +D	> AD2Mh.5'2&>  D#,Ar   )__doc__r   r,   numpyr   jsonsysos__all__objectr   rq  r   r   <module>ry     s4     
   
 	
Nv Nr   