
    iB                     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)zY
This code is referred from:
https://github.com/songdejia/EAST/blob/master/data_utils.py
    NEASTProcessTrainc                   p    \ rS rSrSS/SSS4S jrS rS rS	 rS
 rS r	S r
S rSS jrS rS rS rSrg)r      i   g      ?g?
   c                 v    US   U l         [        R                  " / SQ5      U l        X l        X0l        X@l        g )N   )      ?r          @g      @)
input_sizenparrayrandom_scalebackground_ratiomin_crop_side_ratiomin_text_size)selfimage_shaper   r   r   kwargss         g/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppocr/data/imaug/east_process.py__init__EASTProcessTrain.__init__   s3     &a.HH%78 0#6 *    c                    U R                   nUR                  n[        R                  " USS 5      n[        R                  " USS 5      n[        U5      [        U5      -  n[        R                  " US S XfS9n/ SQn/ SQnUS-  nX-  nX-  nUR                  u  pn[        R                  " X"S4[        R                  S9nXS U	2S U
2S S 24'   UR                  S	5      nU[        R                  S S 24   nX4$ )
Nr      )fxfy)g
ףp=
?gv/?gCl?)gZd;O?gy&1?g?      dtype)r   r   r   )r   shaper   minmaxfloatcv2resizezerosfloat32	transposenewaxis)r   imr   im_shapeim_size_minim_size_maxim_scaleimg_meanimg_stdnew_hnew_w_	im_paddeds                r   
preprocessEASTProcessTrain.preprocess+   s    __
88ffXa]+ffXa]+$u['99ZZD$8A('#X

((aHHja8

K	')&5&&5&!#$''	2	bjj!m,	""r   c                    UR                   S   UR                   S   pCUR                  5       n/ n[        R                  R	                  5       nSnSUs=:  a  S:  a  O  OSnO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     [        R                  " U[        R                  S9nXV4$ )z(
rotate image with 90 / 180 / 270 degre
r   r   gZd;O?gZd;O?r   r   ig     f@r	      r   )r!   copyr   randomrandrangerot90mathpicossinappendr   r(   )r   r+   
text_polysim_wim_hdst_im	dst_polysrand_degree_ratiorand_degree_cnti
rot_degree	rot_anglen_polycxcyncxncywordBBpolyjsxsydxdys                           r   rotate_im_polyEASTProcessTrain.rotate_im_poly?   s    XXa["((1+d	IINN,$,u,O&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"! " HHYbjj9	  r   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   r   r   r
   )r   sum)r   rT   edges      r   polygon_areaEASTProcessTrain.polygon_areag   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                 ,   X4peUR                   S   S:X  a  U$ [        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[        X5       Ha  u  pU R	                  U	5      n[        U5      S:  a  M'  US:  a  U
(       d  Sn
U	SSS24   n	UR                  U	5        UR                  U
5        Mc     [        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   T)r   r   r   r   )r!   r   clipzipr_   absrC   r   )r   polystags
img_height	img_widthhwvalidated_polysvalidated_tagsrT   tagp_areas               r   check_and_validate_polys)EASTProcessTrain.check_and_validate_polysu   s    1;;q>QLq!QwAE:aAgq!QwAE:aAgU)ID&&t,F6{QzCL!O,""4(!!#& * xx("((>*BBBr   c           	      x   [        UR                  5      S:X  a  [        R                  " USS9nUR                  S   S:X  aM  UR	                  S5      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'   [
        R                  " SU5        [
        R                  " S5      nU HI  nUR                  [        R                  5      R                  S5      n[
        R                  " X/SSSS9  MK     SS KnUR                  SS5      n[
        R                  " SU-  U5        g )Nr9   r   axisr   )r   r   r   r   gQ^@r   gR1]@g\(Y@ztmp.jpg)r   r   T)r   r   r   )color	thicknessd   z
tmp_%d.jpg)lenr!   r   squeezer)   r%   imwriteimreadastypeint32reshape	polylinesr;   randint)r   imgre   boxr;   inos         r   draw_img_polysEASTProcessTrain.draw_img_polys   s    syy>Q**Sq)C99Q<1--	*C1aLF"L1aLF"L1aLF"LIs#jj#C**RXX&..z:CMM#ud-1M  	nnQ$L3&,r   c                    S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[         R                  R                  US   US   -
  5      nXE-   Xg-   :  Ga  [         R                  " US   S   US   S   -
  US   S   US   S   -
  5      nUS   S==   X2S   -  [         R                  " U5      -  -  ss'   US   S==   X2S   -  [         R
                  " U5      -  -  ss'   US   S==   X2S   -  [         R                  " U5      -  -  ss'   US   S==   X2S   -  [         R
                  " U5      -  -  ss'   [         R                  " US   S   US   S   -
  US   S   US   S   -
  5      nUS   S==   X2S   -  [         R                  " U5      -  -  ss'   US   S==   X2S   -  [         R
                  " U5      -  -  ss'   US   S==   X2S   -  [         R                  " U5      -  -  ss'   US   S==   X2S   -  [         R
                  " U5      -  -  ss'   [         R                  " US   S   US   S   -
  US   S   US   S   -
  5      nUS   S==   X2S   -  [         R
                  " U5      -  -  ss'   US   S==   X2S   -  [         R                  " U5      -  -  ss'   US   S==   X2S   -  [         R
                  " U5      -  -  ss'   US   S==   X2S   -  [         R                  " U5      -  -  ss'   [         R                  " US   S   US   S   -
  US   S   US   S   -
  5      nUS   S==   X2S   -  [         R
                  " U5      -  -  ss'   US   S==   X2S   -  [         R                  " U5      -  -  ss'   US   S==   X2S   -  [         R
                  " U5      -  -  ss'   US   S==   X2S   -  [         R                  " U5      -  -  ss'   U$ [         R                  " US   S   US   S   -
  US   S   US   S   -
  5      nUS   S==   X2S   -  [         R
                  " U5      -  -  ss'   US   S==   X2S   -  [         R                  " U5      -  -  ss'   US   S==   X2S   -  [         R
                  " U5      -  -  ss'   US   S==   X2S   -  [         R                  " U5      -  -  ss'   [         R                  " US   S   US   S   -
  US   S   US   S   -
  5      nUS   S==   X2S   -  [         R
                  " U5      -  -  ss'   US   S==   X2S   -  [         R                  " U5      -  -  ss'   US   S==   X2S   -  [         R
                  " U5      -  -  ss'   US   S==   X2S   -  [         R                  " U5      -  -  ss'   [         R                  " US   S   US   S   -
  US   S   US   S   -
  5      nUS   S==   X2S   -  [         R                  " U5      -  -  ss'   US   S==   X2S   -  [         R
                  " U5      -  -  ss'   US   S==   X2S   -  [         R                  " U5      -  -  ss'   US   S==   X2S   -  [         R
                  " U5      -  -  ss'   [         R                  " US   S   US   S   -
  US   S   US   S   -
  5      nUS   S==   X2S   -  [         R                  " U5      -  -  ss'   US   S==   X2S   -  [         R
                  " U5      -  -  ss'   US   S==   X2S   -  [         R                  " U5      -  -  ss'   US   S==   X2S   -  [         R
                  " U5      -  -  ss'   U$ )z
fit a poly inside the origin poly, maybe bugs here...
used for generate the score map
:param poly: the text poly
:param r: r in the paper
:return: the shrunk poly
g333333?r   r   r   r   )r   linalgnormarctan2rA   rB   )	r   rT   rRdist0dist1dist2dist3thetas	            r   shrink_polyEASTProcessTrain.shrink_poly   s    		tAwa01		tAwa01		tAwa01		tAwa01=5=( JJQ
T!WQZ 7471:QPQ
;RTEGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JJJQ
T!WQZ 7471:QPQ
;RTEGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JJJQ
T!WQZ 7471:QPQ
;RTEGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JJJQ
T!WQZ 7471:QPQ
;RTEGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22J6 / JJQ
T!WQZ 7471:QPQ
;RTEGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JJJQ
T!WQZ 7471:QPQ
;RTEGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JJJQ
T!WQZ 7471:QPQ
;RTEGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JJJQ
T!WQZ 7471:QPQ
;RTEGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22JGAJ!d(RVVE]22Jr   c           	      T   Uu  pE[         R                  " XE4[         R                  S9n[         R                  " XE4[         R                  S9n[         R                  " XES4[         R                  S9n[         R                  " XE4[         R                  S9n	[        [        X#5      5       GHw  u  pUS   nUS   n/ SQn[        S5       Hi  n[         R                  R                  X   XS-   S-     -
  5      n[         R                  R                  X   XS-
  S-     -
  5      n[        UU5      X'   Mk     U R                  UR                  5       U5      R                  [         R                  5      [         R                  SS2SS24   n[         R"                  " UUS5        [         R"                  " UUU
S-   5        [        [         R                  R                  US   US   -
  5      [         R                  R                  US   US	   -
  5      5      n[        [         R                  R                  US   US   -
  5      [         R                  R                  US	   US   -
  5      5      n[        UU5      U R$                  :  aL  [         R"                  " XR                  [         R                  5      [         R                  SS2SS24   S5        U(       aL  [         R"                  " XR                  [         R                  5      [         R                  SS2SS24   S5        [         R&                  " XjS-   :H  5      nUSS2S4   nUSS2S4   n[         R(                  " [         R*                  " USS2S4   S5      U5      USS2S4'   [         R(                  " [         R*                  " USS2S4   S5      U5      USS2S4'   [        S5       H+  nUS	-  nUUUS4   -
  UUUU4'   UUUS4   -
  UUUUS-   4'   M-     S
[-        [        UU5      S
5      -  UUUS4'   GMz     XxU	4$ )z
Generate quadrangle.
r   	   r   r   )NNNNr9   Nr   r         ?   )r   r'   uint8r(   ones	enumeraterc   r=   r   r   r"   r   r:   r|   r}   r*   r%   fillPolyr   argwhereminimummaximumr#   )r   im_sizere   rf   ri   rj   	poly_mask	score_mapgeo_maptraining_maskpoly_idxpoly_tagrT   rm   r   rK   r   r   shrinked_polypoly_hpoly_w
xy_in_poly	y_in_poly	x_in_polypnogeo_channel_begs                             r   generate_quadEASTProcessTrain.generate_quad   ss    HHaV2884	HHaV2884	((A!9BJJ7bhh7"+C,<"=HA;D1+C(A1X		tw1uk1B'BC		tw1uk1B'BC5%( 
 !,,TYY[!<CCBHHM

Aq M LLM15LLM8a<@		tAwa01299>>$q'DQRGBS3TF 		tAwa01299>>$q'DQRGBS3TF 66"T%7%77]KK,A"**aQRBR,SUVW]KK,A"**aQRBR,SUVWYa<%@AJ"1a4(I"1a4(IBJJtAqDz1$=qADAJBJJtAqDz1$=qADAJQx"%'S!V, 	9o=> S!V, 	9o.AAB   03SVV9Lc5R/RGIy!+,U #>V =00r   c                    UR                   u  pgnUS-  n	US-  n
[        R                  " XiS-  -   [        R                  S9n[        R                  " XzS-  -   [        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
-   X-   & [        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U4$ [        U5       GHC  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                  U-  :  d  UU-
  U R                  U-  :  a  GM?  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   n/ n/ nX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SS2SS2S4==   U-  ss'   USS2SS2S4==   U-  ss'   XU4s  $    XU4$ )z
make random crop from the input image
:param im:
:param polys:
:param tags:
:param crop_background:
:param max_tries:
:return:
r   r   r   r   )decimalsNr   )sizerr   r9   )r!   r   r'   r}   roundr|   r"   r#   whererx   r=   r;   choicerb   r   r]   )r   r+   re   rf   crop_background	max_triesri   rj   r4   pad_hpad_wh_arrayw_arrayrT   minxmaxxminymaxyh_axisw_axisrK   xxxminxmaxyyyminymaxpoly_axis_in_areaselected_polyss                                r   	crop_areaEASTProcessTrain.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td66::$;!9!9A!== {{1~"1a7^t+Q1W~-/Q1W~-/ Q1W~-/ " "$"&&1B*Kq*P!QRS!T!#>"a'"D4!8OTD1H_a?@BEDd?*D4!8OTD1H_a78B.)E'D!Q'Nd"N!Q'Nd"Nd?"W "X $r   c                 j   U R                  XUSS9u  pn[        U5      S:  a  g U R                  nU R                  U5      u  p[        R
                  " XD4[        R                  S9n[        R
                  " XDS4[        R                  S9n[        R                  " XD4[        R                  S9nXXx4$ )NTr   r   r   r   )r   rx   r   r6   r   r'   r(   r   )	r   r+   rD   	text_tagsr   ratior   r   r   s	            r   crop_background_infor&EASTProcessTrain.crop_background_inforn  s    $(NNIt %3 %
!	 z?Q__
OOB'	HHj5RZZH	((JA6bjjI 8

Kg44r   c                    U R                  XUSS9u  pnUR                  S   S:X  a  g [        R                  " US-  5      UR                  :  a  g U R
                  nU R                  U5      u  p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    pgnU R                  Xx4X#5      u  pnXX4$ )NFr   r   r   r   )r   r!   r   r]   r   r   r6   r   )r   r+   rD   r   r   r   r4   r2   r3   r   r   r   s               r   crop_foreground_infor&EASTProcessTrain.crop_foreground_infor}  s    $(NNIu %3 %
!	 A!#669s?$	6__
OOB'	1a7u$1a7u$XX1U -1,>,>NJ-
)	M g44r   c                 0   US   nUS   nUS   nUc  g UR                   S   S:X  a  g [        R                  R                  5       S:  a  U R	                  X#5      u  p#UR                   u  pVnU R                  X4XV5      u  p4UR                   S   S:X  a  g [        R                  R                  U R                  5      n[        R                  " US XS9nX8-  n[        R                  R                  5       U R                  :  a  U R                  X#U5      n	OU R                  X#U5      n	U	c  g U	u  p*pU
[        R                  S S S2S S S24   R                  [        R                  5      n
[        R                   " USS	5      n[        R                   " USS5      nUS S 2S S S2S S S24   R                  [        R                  5      nU[        R                  S S S2S S S24   nUR                  [        R                  5      nUS   US'   XS
'   XS'   XS'   U$ )Nimagere   ignore_tagsr   r	   )dsizer   r   r9   r   r   r   r   r   )r!   r   r;   r<   rZ   ro   r   r   r%   r&   r   r   r   r*   r|   r(   swapaxes)r   datar+   rD   r   ri   rj   r4   rd_scaleoutsr   r   r   s                r   __call__EASTProcessTrain.__call__  s   ']']
'	:A!# 99>>c!!00@NB((a $ = =1!

 A!# 99##D$5$56ZZ$8A
99>>d333--biHD--biHD<04-wbjj#A#ss23::2::F	++gq!,++gq!,!SqS#A#+&--bjj9%bjj#A#ss&:;%,,RZZ81W%[!Y -_r   )r   r   r   r   r   N)F2   )__name__
__module____qualname____firstlineno__r   r6   rZ   r_   ro   r   r   r   r   r   r   r   __static_attributes__ r   r   r   r      sW     #J+#(&!P"C<&CJ61pIV55.*r   )__doc__r?   r%   numpyr   jsonsysos__all__objectr   r   r   r   <module>r      s4     
   
 	
bv br   