
    iW                     P    S SK r S SKrS SKrS SKJr  S SKJr  S/r " S S\	5      r
g)    N)thin)!sort_and_expand_with_direction_v2PGProcessTrainc                       \ rS rSr       SS jrS rS rS rS r S S jr	   S!S	 jr
   S!S
 j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 rS rS rS rS rS rS rS rS rS rSrg)%r      Nc                     X@l         X l        X0l        XPl        USL a  Xl        Xpl        Xl        Xl        X`l        Xl	        U R                  U5      U l        [        U R                  5      U l        SU l        g )NTr   )tcl_lenmax_text_lengthmax_text_nums
batch_sizemin_crop_sizeuse_random_cropmin_text_sizemax_text_size
use_resizepoint_gather_modeget_dictLexicon_Tablelenpad_numimg_id)selfcharacter_dict_pathr
   r   r	   r   r   r   r   r   r   r   kwargss                e/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppocr/data/imaug/pg_process.py__init__PGProcessTrain.__init__   sp     .*$d"!.#2 **$!2!]]+>?4--.    c                    Sn[        US5       nUR                  5       nU H6  nUR                  S5      R                  S5      R                  S5      nX%-  nM8     [	        U5      nS S S 5        U$ ! , (       d  f       W$ = f)N rbzutf-8
z
)open	readlinesdecodestriplist)r   r   character_strfinlineslinedict_characters          r   r   PGProcessTrain.get_dict9   s    %t,MMOE{{7+11$7==fE%  "-0N -  -, s   AA11
B 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                @)npsum)r   polyedges      r   	quad_areaPGProcessTrain.quad_areaC   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[        R                  " [        R                  " U5      5      nSnSn[        S5       H  n[        R                  R                  XXS-   S-     US   -
  5      [        R                  R                  XXS-   S-     XS-  S-
     -
  5      -   [        R                  R                  XXS-   S-     XS-     -
  5      -   [        R                  R                  XXS-   S-     US	   -
  5      -   n	X:  d  M  U	nUnM     [        S5       H  nXVU-   S-     X8'   M     U$ )
#
Generate min area quad from poly.
r      r0   dtype     @r<   r/   r0   r1   )shaper3   zerosfloat32cv2minAreaRectastypeint32array	boxPointsrangelinalgnorm)
r   r5   	point_nummin_area_quadrectboxfirst_point_idxmin_distidists
             r   gen_quad_from_poly!PGProcessTrain.gen_quad_from_polyQ   se    JJqM	rzz:KK!
 hhs}}T*+qA		sEQ;/$q'9:))..!eq[!1Da!9K4L!LMN))..!eq[!1Da4H!HIJ ))..!eq[!1DH!<=>  "#  qA"a$71#<=M  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<   r1   r0   r/   )r   r1   r0   r/   r1   r0   r2   )rA   r3   rH   clipziprU   r7   absprintrK   rL   append)r   polystagsim_sizehwvalidated_polysvalidated_tagshv_tagsr5   tagquadp_arealen_wlen_hhv_tags                   r   check_and_validate_polys'PGProcessTrain.check_and_validate_polysm   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                 T   UR                   u  pn
US-  nU	S-  n[        R                  " XS-  -   [        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UUU-   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X4U4$ [        U5       GH  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  aO  U(       aE  / nU H  n UR!                  UU    5        M     UnUUUS-   2UUS-   2SS24   U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/ nU H  n UR!                  UU    5        M     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X4U4s  $    XX4U4$ )z
make random crop from the input image
:param im:
:param polys:  [b,4,2]
:param tags:
:param crop_background:
:param max_tries: 50 -> 25
:return:
r]   r0   r=   r   decimalsNr/   )sizeaxisr<   )rA   r3   rB   rG   roundrF   minmaxwherer   rJ   randomchoicerc   r   r4   rg   )!r   imrh   ri   ro   txtscrop_background	max_triesrk   rl   _pad_hpad_wh_arrayw_arrayr5   minxmaxxminymaxyh_axisw_axisrS   xxxminxmaxyyyminymaxpoly_axis_in_areaselected_polystxts_tmpselected_polys!                                    r   	crop_areaPGProcessTrain.crop_area   s    ((aRR((A	M"((;((A	M"((;D88D1-44RXX>D66$q!t*%D66$q!t*%D34GD5L4%<066$q!t*%D66$q!t*%D34GD5L4%<0  'Q,'*'Q,'*v;!s6{a/dT11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'"!H)7 ](;< *8#D4$(?D4!8OQ>?n-^,/  D4!8OTD1H_a78B.)E'Dn-GH!/] 34 "0D!Q'Nd"N!Q'Nd"NdT11c "f $--r   c                 (   / nUR                   S   n	[        U	S-  5       H&  n
X*   X)S-
  U
-
     -   S-  nUR                  U5        M(     [        R                  " UU4SS9n[
        R                  " U[        R                  " U5      R                  S5      /SS	5        [        R                  " US:  5      u  p[        R                  " [        [        X5      5      SS
9nUS   US   -   S-  R                  SS5      nUS   US   -   S-  R                  SS5      nUU-
  [        R                  R                  UU-
  5      S-   -  n[        R                  " UUR                   S   S45      n[        R                  " UUR                   S   S45      nUU-
  n[        R                   " UU-  SS9nU[        R"                  " U5         n[        R                  " U5      R                  SS5      SS2SSS24   n[%        U5      n	X:  a6  [        U5       Vs/ s H  n['        U	S	-  U-  U-  5      PM     nnUUSS24   n['        [)        [%        U5      U5      5      n[        R*                  R-                  5       S:  a  US:  a  [        R*                  R-                  U5      S-
  U-  S-  n[        R                  " SS/5      R                  SS/5      UR                  US/5      -  nUU-  n[        R.                  " USS2S4   SUS-
  5      USS2S4'   [        R.                  " USS2S4   SUS-
  5      USS2S4'   [        R                  " U R0                  S4[        R2                  S
9n[        R4                  " U R0                  45      U-  USS2S4'   [        R                  " U R0                  S4[        R6                  S
9n[        R8                  " U5      R                  [        R2                  5      USU2SS24'   S	USU& UU4$ s  snf )C
Find the center point of poly as key_points, then fit and gather.
r   r0   r/   r2   rC   )rA   r>   rG   F      ?r=   r1   ư>r|   r@   N皙?      ?333333?)rA   rJ   rg   r3   rB   rD   	polylinesrH   rF   r   r'   rd   reshaperK   rL   tiler4   argsortr   intr   r   randrc   r	   rG   onesrC   r~   )r   rN   r5   max_hmax_wfixed_point_numr   reference_heightkey_point_xysrM   idxcenter_point	tmp_imageysxsxy_textleft_center_ptright_center_ptproj_unit_vecproj_unit_vec_tileleft_center_pt_tilexy_text_to_left_center
proj_valuepos_infoxkeep_idskeepdlrandom_floatpos_lpos_ms                                  r   fit_and_gather_tcl_points_v2+PGProcessTrain.fit_and_gather_tcl_points_v2   s    JJqM	a(C I]S-@(AASHL  . ) HH 
	 	i"((="9"@"@"I!JESVW)a-(((4B,I>(+mA.>>#ENNqRST)!,}Q/??3FOOPQSTU(>9IINN?^;<tC
  WW]W]]15Eq4IJ ggnw}}Q7G6KL!(+>!>VV25GGaP
"**Z01 88G$,,R3AttG<M	& //A Y_6!;</    !,H3s8}o6799>>c!&6!&;))..&,0@@3FB88QF+33QF;bjj$PQ>SSL$HWWXad^Q	BHQTNWWXad^Q	BHQTN $,,*"((;ggt||o.7ad$,,*"**=88H-44RXX>eteQRiete|)s   Pc           	      b   [         R                  " [        X0R                  -  5      [        X@R                  -  5      45      R	                  [         R
                  5      n[        R                  " U[         R                  " X R                  -  5      R	                  [         R                  5      S5        [        R                  " USU R                  U R                  S9n[         R                  " US:  SS9nU R                  n	[        UR	                  [         R                  5      5      n
[        R                  " U
R	                  [         R                  5      SS9u  p[         R                   " US	:H  5      u  p[#        [%        X5      5      n['        U5      S
:  a  g[)        XU5      n[         R                  " U5      n['        U5      S	-
  nSn[+        U5       H  n[         R,                  " UUU-      S   UUS	-   U-      S   -
  5      n[         R,                  " UUU-      S	   UUS	-   U-      S	   -
  5      n[        [/        UU5      5      nUUU-      UUS	-   U-      -
  U-  nUS	-
  n[+        [        U5      5       H6  nUUU-      US	-   U-  -
  nUU-   S	-   U-   n[         R0                  " UUUSS9nM8     UU-  nM     [         R                  " U5      R3                  SS5      R	                  [         R
                  5      n['        U5      nUU:  a6  [+        U5       Vs/ s H  n[        US-  U-  U-  5      PM     nnUUSS24   n[        [5        ['        U5      U5      5      n [         R,                  " US   US   -
  5      [         R,                  " US   US   -
  5      -   S-  n![         R6                  R9                  5       S	:  Ga  [         R6                  R9                  U 5      S-
  U-  n"[         R6                  R9                  5       S-
  n#[         R                  " SU#U!-  S-  //5      n$[         R                  " S	S/5      R3                  S	S/5      U"R3                  U S	/5      -  n%U$R;                  U SS9n&UU%-  nUU&-  n[         R<                  " USS2S4   SUS	-
  5      USS2S4'   [         R<                  " USS2S	4   SUS	-
  5      USS2S	4'   [         R                  " U R>                  S
4[         R                  S9n'[         R@                  " U R>                  45      U-  U'SS2S4'   [         R                  " U R>                  S	4[         R
                  S9n([         R                  " U5      R	                  [         R                  5      U'SU 2S	S24'   SU(SU & U'U(4$ s  snf )r   r   NdsizefxfyMbP?rC   r=   r_   )connectivityr/   r1   r   r|   r@   r0   )r   r   r   )r@   r/   r   )r   r1   r   )r@   r0   r   r   r   )!r3   rB   r   ds_ratiorF   rC   rD   fillPolyr~   rG   resizerH   f_directionr   uint8connectedComponentsr   r'   rd   r   r   rJ   re   r   insertr   r   r   r   repeatrc   r	   r   ))r   rN   r5   r   r   r   r   r   det_maskr   skeleton_mapinstance_countinstance_label_mapr   r   pos_listpos_list_sortedlength
insert_numindexstride_ystride_x
max_pointsstrideinsert_num_temprS   insert_valueinsert_indexr   rM   r   r   r   reference_widthdhoffsetdwrandom_float_hrandom_float_wr   r   s)                                            r   fit_and_gather_tcl_points_v3+PGProcessTrain.fit_and_gather_tcl_points_v31  s!    88&'U]]-B)CD

&
 	
 	Xrxx}}(<=DDRXXNPST::hdt}}W88HtO9=&&HOOBHH56-0-D-D).
* ,12B$x=1;8
 ((?3_%)
6]Evv
 23A6!%!)j"89!<=H vv
 23A6!%!)j"89!<=H S845J  
 23!%!)j"89:F )1nO3/0.uz/ABa!evEUU$qy1}z9"$))#\<a# 1 /)J/ #4 HH_%--b!4;;BJJG 	 M	& //A Y_6!;</    !,H3s8}o67FF4=4>12ffT']T(^345 99>>a))..&,0@@BYY^^%+FAv7#=>?@BXXq!f-55q!f=

DRS9@UUNYYt!Y4N&H&HWWXad^Q	BHQTNWWXad^Q	BHQTN $,,*"((;ggt||o.7ad$,,*"**=88H-44RXX>eteQRiete|9s   $V,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-  S5      n	[	        [        U5      [        U5      -  S5      n
S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
-  /5      5      n[        R                  " UUR                  5       R                  [         R                  5      [         R                  SS2SS24   U5        US-  nM     U$ )	r    r   r/   r0   r1   r2   r   r   N)r3   rK   rL   rg   r   r4   r   tuplemapfloatrD   r   r~   rF   rG   newaxis)r   
poly_quadsn_chardirection_map
width_listheight_listrq   quad_wquad_h
norm_widthaverage_heightkdirect_vector_fulldirect_vectordirection_labels                  r   generate_direction_map%PGProcessTrain.generate_direction_map  s   
D		tAwa01BIINN47TRSWCT4UUF 		tAwa01BIINN47TRSWCT4UUF f%v&  Z6137
S-K0@@#FD#'7T!W#4a479J"Ks!R"99>>"45<> 
 $EM!,mA.>n@TUVO LL

##BHH-bjj!Q.>?
 FA   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   r1   r0   r/   r2   r   )r3   rK   rL   rg   r   r4   r   )r   r   r   rq   r   r   s         r   calculate_average_height'PGProcessTrain.calculate_average_height  s    D		tAwa01BIINN47TRSWCT4UUF v&	 
 S-K0@@#Fr   c	                    X`l         [        R                  " UU4[        R                  S9n	[	        X-  5      [	        X&-  5      p!X6-  n[        R                  " UU4[        R                  S9n
[        R                  " UU4[        R                  S9n[        R                  " XS4[        R                  S9n[        R
                  " UU4[        R                  S9n[        R
                  " XS45      [        R                  " / SQ5      R                  / SQ5      R                  [        R                  5      -  nSn/ n/ / / nnn[        [        X45      5       GH  u  nnU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(       aP  ["        R$                  " UUR                  [        R&                  5      [        R(                  S
S
2S
S
24   S5        GMa  UU   nU R+                  UU R,                  5      nU Vs/ s H1  nUU R,                  ;   d  M  U R,                  R/                  U5      /PM3     nn[1        U5      S:  a  GM  U R3                  UU5      nU R5                  U5      n U R5                  U5      n!U R7                  U USU-  S9u  n"n#["        R$                  " U
[        R8                  " U"5      R                  [        R&                  5      S5        ["        R$                  " U	[        R8                  " U"U-  5      R                  [        R&                  5      S5        [        U"5       H  u  n$n%[        R                  " X4[        R                  S9n&["        R$                  " U&[        R8                  " U%[        R(                  S
S
2S
S
24   5      R                  [        R&                  5      S5      n&U R;                  U!U#U$      U&U5      nM     US:X  a(  [1        U R,                  5      //n'UR=                  U'5        US-  n["        R$                  " U[        R8                  " U!5      R                  [        R&                  5      U5        UR=                  U5        [1        U5      n(U R?                  U!U(U5      nU RA                  U"5      n)U RB                  S:X  aQ  US
S
2S
S
2S
S24   RE                  5       U l#        U RI                  UU"UUSU RJ                  U)S9n*U*c  GMw  U*S   U*S   n,n+O"U RM                  UUUUSU RJ                  U)S9u  n+n,Un-[1        U5      S	:  a  GM  UR=                  U+5        UR=                  U,5        UR=                  U-5        GM     ["        RN                  " U	S
XfS9n.[        R                  " U.S:  SS9n
U
UUUUUUUU4	$ s  snf )z
Generate polygon.
r=   rb   r1   )r   r   r/   )r/   r/   r1   r   r/   r   r0   N333333?r   )shrink_ratio_of_widthexpand_height_ratioalignr@   @   )r   r   r   r   r   r   r   rC   )(r   r3   rB   rC   r   r   rH   r   rF   	enumeraterd   gen_min_area_quad_from_polyrK   rL   r   r   r   rD   r   rG   r   prepare_text_labelr   r   r   poly2tcl
poly2quadsshrink_poly_along_widthr~   gen_quad_tborg   r  r  r   copyr   r   r   r   r   )/r   rk   rl   rh   ri   	text_strsr   	tcl_ratior	  score_map_big	score_mapscore_label_maptbo_maptraining_maskr   	label_idxscore_label_map_text_label_listr   pos_mask
label_listpoly_idxpoly_tagr5   rp   rN   r   min_area_quad_hmin_area_quad_w
text_labelc_text_label_index_listtcl_poly	tcl_quadsr   
stcl_quads
quad_indexr   rq   	quad_masktext_pos_list_r   average_shrink_heightpos_resr   r   label_lscore_map_big_resizeds/                                                  r   generate_tcl_ctc_label%PGProcessTrain.generate_tcl_ctc_label  s$    ! **
 1< #al"31 HH **
	 (( **
 ((A!9BJJ7 **
 q	*RXXi-@-H-H.

&
 	*,')+RJ("+C,<"=Hh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!4;;rxx#8Q9I#JD 'x0
!44ZASAST
 ))(T/// 3T''--b12( & )
 ,-1==y9 OOH5	!__T2
)-)E)E*?(+i *F *&
J Y(<(C(CBHH(MsS!288J,A#B#I#I"((#SUX "+:!6IC "!rzz BI #!bjj!Q&6!78??I!I
 #//":c?3YG "7 >T//01&N 4::>JQ	#RXXj%9%@%@%JI 0667LM 23 $ ; ;!
 )-(E(Ej(Q%))W4'4Q3B3Y'?'D'D'FD$"??%"(*#{{)> @ G  #*1:wqz5E5 $(#D#D%(*#{{)> $E $LE5 0,-1&&!!'*i #>n !$

(!
 HH2T9K	 +

 
	
A)s    Z8 Z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/   r0   r1   g      ?)r/   r0   r1   r   Nr   ry   g98?)rA   r3   rK   rL   dotarccosr~   re   mathpir'   rJ   rH   )r   r5   rM   len_1len_2len_3len_4vector_1vector_2	cos_thetathetar   s               r   adjust_pointPGProcessTrain.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<   r|   r?   r/   r0   r1   r@   )rA   r3   rB   rC   r4   rD   rE   rF   rG   rH   rI   rJ   rK   rL   )r   r5   rM   rN   r   rO   rP   rQ   rR   rS   rT   s              r   r  *PGProcessTrain.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/   r1   r0   r3   rH   rC   )r   rq   begin_width_ratioend_width_ratio
ratio_pairp0_1p3_2s          r   shrink_quad_along_width&PGProcessTrain.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<PGProcessTrain.shrink_poly_along_width.<locals>.get_cut_info  s@    !*=!9#h&$S'99]=OOE:%	 ":r   r   r/   r1   r@   r0   )rF  rG  )
r3   rK   rL   rg   r   r4   rK  rJ   rH   r'   )r   quadsr	  r
  upper_edge_listrS  rq   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  &PGProcessTrain.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                 D    [        U5      S:X  a  UR                  5       $ U$ )z,
Prepare text label by given Lexicon_Table.
$   )r   lower)r   	label_strr   s      r   r  !PGProcessTrain.prepare_text_label  s$     }#??$$r   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   )r3   rH   arctan2)r   ABABs       r   vector_anglePGProcessTrain.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.
)r3   cossin)r   r?  pointr   yrr  rs  s          r   theta_line_cross_point%PGProcessTrain.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.
)ro  rv  )r   rl  rm  angles       r   line_cross_two_point#PGProcessTrain.line_cross_two_point  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.
r0   )ro  )r   r5   p0p1p2p3angle30angle21s           r   average_anglePGProcessTrain.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=   )rf   r3   rH   rC   )r   line1line2a1b1c1a2b2c2dr   ru  s               r   line_cross_pointPGProcessTrain.line_cross_point%  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   r0   r=   r   r1   r/   rE  )r   r5   rR  rH  p0_3p1_2s         r   quad2tclPGProcessTrain.quad2tcl6  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   r0   r=   r   r/   )r3   rH   rC   
zeros_likerA   rJ   )r   r5   rR  rH  r'  rM   r   
point_pairs           r   r  PGProcessTrain.poly2tcl?  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/   r1   r0   r   r   r<   )
rz  r3   rK   rL   r  argwhererv  r  r   r   )r   rq   tcl_maskr  up_line
lower_liner   r   ry  
xy_in_polyru  r   rt  r+   cross_point_uppercross_point_lowerupper_offset_xupper_offset_ylower_offset_xlower_offset_ys                       r   r  PGProcessTrain.gen_quad_tboO  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   r0   r/   r<   )r   r0   r1   r/   )rA   rJ   rg   r3   rH   r   )r   r5   	quad_listrM   point_pair_listr   r  quad_nums           r   r  PGProcessTrain.poly2quadsq  s     	JJqM	 a(C)Ta-#*=%>?J"":. ) >A%?C/*Cq>:CCAqI,W # xx	""r   c                    UR                   S   UR                   S   pCUR                  5       n/ n[        R                  R	                  5       nSnUS:  a  Sn[        U5       H  n	[        R                  " U5      nM     SU-  n
U
[        R                  -  S-  nUR                   S   nSU-  SU-  pSUR                   S   -  SUR                   S   -  nn[        U5       H  n	X)   n/ n[        S5       H  nUU   S   UU   S   nn[        R                  " U5      UU-
  -  [        R                  " U5      UU-
  -  -
  U-   n[        R                  " U5      UU-
  -  [        R                  " U5      UU-
  -  -   U-   nUR                  UU/5        M     UR                  U5        M     U[        R                  " U[        R                  S94$ )	z(
rotate image with 90 / 180 / 270 degre
r/   r   r   r1   ig     f@r<   r=   )rA   r  r3   r   r   rJ   rot90r6  r7  rr  rs  rg   rH   rC   )r   r   
text_polysim_wim_hdst_im	dst_polysrand_degree_ratiorand_degree_cntrS   
rot_degree	rot_anglen_polycxcyncxncywordBBr5   jsxsydxdys                           r   rotate_im_polyPGProcessTrain.rotate_im_poly  s    XXa["((1+d	IINN,s"O'AXXf%F (?*
(50	!!!$tS4ZBa(#Q*?SvA]FD1X1vay|BHHY'273hhy)R"W56  HHY'273hhy)R"W56 
 RH%  T"! " rxx	<<<r   c           	         SnUS   nUS   nUS   nUS   nUR                   u  pxn	U R                  XEXx45      u  pEn
UR                   S   S::  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                  SL Ga  UR                   u  nnn	[        UU5      S:  ah  S[        UU5      -  n[        R                  " U[        UU-  5      [        UU-  5      45      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U5      S:  ah  S[        UU5      -  n[        R                  " U[        UU-  5      [        UU-  5      45      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'   OU R                  SL a}  UR                   u  pxn	[        Xx5      S:  a*  S[        Xx5      -  n[        R                  " US UUS9nUU-  nUR                   u  pxn	[        Xx5      S:  a  g U R!                  X4XZUSS9u  p4pZnUR                   S   S:X  a  g [        R"                  " US-  5      UR$                  :  a  g UR                   u  nnn	Ub  Uc  g ['        U5      [        UU5      -  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  nnn	[        UU5      US
-  :  a  g [        R0                  " X"S4[        R2                  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U-
  nU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R5                  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 R7                  X"XEUS!5      u	  nnn n!n"n#n$n%n&[9        U%5      S::  a  g [        R:                  " S"S/5      n'[        R:                  " S"S/5      n([        R:                  " U R<                  S/5      U R>                  -   n)[A        U%5       Hz  u  n*n+[9        U+5      n,U,U R<                  :  a  U+S U R<                   U%U*'   M5  U,U R<                  :  d  MG  U+RC                  U R>                  /5        U,S-  n,U,U R<                  :  a  M3  M|     [E        [9        U%5      5       H  n*[        R(                  " U%U*   5      U%U*'   M!     [9        U#5      S::  d  [9        U#5      U RF                  :  a  g [E        U RF                  [9        U#5      -
  SS#5       H6  n-U#RC                  U'5        U$RC                  U(5        U%RC                  U)5        M8     U RH                  U RJ                  S-
  :X  a  SU l$        OU =RH                  S-  sl$        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RM                  S'5      nUS S S#2S S 2S S 24   n.U[        RN                  S S 2S S 24   n/U[        RN                  S S 2S S 24   n0U RM                  S'5      n1U!RM                  S'5      n2U"[        RN                  S S 2S S 24   n3[        R(                  " U#5      n#[        R(                  " U$5      n$[        R(                  " U%5      n%U.US('   U/US)'   U0US*'   U1US+'   U2US,'   U3US-'   U%US.'   U#US/'   U$US0'   U$ )1N   imagerh   ignore_tagstextsr   r   g?g?r   r   r/   T   i   g      @   F)r   )      ?g      ?r   g      ?g      ?g      ?r   r   r   r   r   g?rb   r0   )ksizesigmaXsigmaY        g     o@r1   r=   g33333^@gR]@gRY@)r   r   r  r  r@   g(\2M@g(\L@g     L@)r0   r   r/   imagestcl_mapstcl_label_mapsborder_mapsdirection_mapstraining_masksr  r   r  )(rA   rv   r3   aranger   r   r   r6  sqrtrD   r   r   r   r   r   r   r   r4   r{   r   rH   permutationGaussianBlurrc   r   rC   r  r1  r   rB   r
   r   r  rg   rJ   r   r   r   	transposer   )4r   data
input_sizer   r  	text_tagsr  rk   rl   r   ro   
asp_scales	asp_scaleasp_wxasp_hyori_hori_wrR  rd_scalenew_hnew_w	std_ratiorand_scalesrz_scaleks	im_paddeddel_hdel_wshswr  r  
border_mapr   r  r   r  r  score_label_map_text_labelpos_list_temppos_mask_templabel_list_temprS   labeln__r  r  r  r  r  r  s4                                                       r   __call__PGProcessTrain.__call__  s   
']']
'	M	((a)-)F)FA6*
&
w A!#YYsD#.
II$$Z0	99>>c!iIIIi(	yZZ$6=1a7v%1a7v%??d" hhOE5!5% 3&c%//ZZS%7UU]9K$LM1a7#u,#1a7#u,#5% 3&c%//ZZS%7UU]9K$LM1a7#u,#1a7#u,#!!T)hhGA!1y4!CI-ZZ$8Ih&
hhGA!1y2~ =ANN	Iu =K =9BI	 A!#669s?$	6((uaMu}*%E5(99	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 ((uauezC//GGZQ7rzzJ	(	!Q'(	!Q'(	!Q' U"U"B19RYY^^%-.B19RYY^^%-.B :<	"rEz/2U
?A561a7r!1a7r! ''J9d

	
& z?a"a)"a)((D$8$8!#<=L!*-HAuE
A4''' %&<(<(< =
1d***dll^,Q d*** . s:'AHHZ]3JqM ( x=AX1C1C!C**S]:ArBBOOM*OOM*o. C
 ;;$//A--DKKK1K!Q'k)!Q'k)!Q'k)!Q'm+!Q'm+!Q'm+''	2	4R4A:&RZZA-.(Q)9: **95&00;&rzz1a'7888H%88H%XXj)
X#Z!/)]!/!/'\#Z#Zr   )r   r   r   r   r   r
   r   r   r   r   r   r   r	   r   r   )rY   TF   r<   r  N)F   )r  r   r1   )r   r  )r  r   )r   ) __name__
__module____qualname____firstlineno__r   r   r7   rU   rv   r   r   r   r  r  r1  r@  r  rK  r  r  ro  rv  rz  r  r  r  r  r  r  r  r  __static_attributes__ r   r   r   r      s     <"8,V^ PRQ.r AR bH D	& "|
|6 +D	> AD2Mh.5'2">  D#,#=Jpr   )r6  rD   numpyr3   skimage.morphology._skeletonizer   ,ppocr.utils.e2e_utils.extract_textpoint_fastr   __all__objectr   r  r   r   <module>r     s0     
  0 
BV Br   