
    i                         S r SSKrSSKJr  S rS rS rS rS r	S	 r
SS
 jrSS jr\S:X  a5  \" \" \R                  " SS/SS/SS/SS//5      5      R                   5        gg)zu
Locality aware nms.
This code is referred from: https://github.com/songdejia/EAST/blob/master/locality_aware_nms.py
    N)Polygonc                    [        U SS R                  S5      5      n [        USS R                  S5      5      nU R                  S5      n UR                  S5      nU R                  (       a  UR                  (       d  g[        U 5      R	                  [        U5      5      R
                  nU R
                  UR
                  -   U-
  nUS:X  a  gX#-  $ )z
Intersection.
N         r   )r   reshapebufferis_validintersectionareagpinterunions       n/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppocr/postprocess/locality_aware_nms.pyr   r   
   s     	"1f%&A"1f%&A	A	A::QZZAJ##GAJ/44EFFQVVOe#Ez}    c                 Z   [        U SS R                  S5      5      n [        USS R                  S5      5      nU R                  (       a  UR                  (       d  g[        U 5      R                  [        U5      5      R                  nUR                  nUS:X  a  [        S5        gX#-  $ )z
Intersection_iog.
Nr   r   r   zp_area is very small)r   r	   r   r   r   printr   s       r   intersection_iogr      s     	"1f%&A"1f%&A::QZZAJ##GAJ/44EFFEz$%}r   c                 n    U S   U SS -  US   USS -  -   U S   US   -   -  U SS& U S   US   -   U S'   U $ )z
Weighted merge.
r   N )r   r   s     r   weighted_merger   .   s[     qTAbqE\AaD1Ra5L(QqTAaD[9AbqEQ4!A$;AaDHr   c           
         [         R                  " U SS2S4   5      SSS2   n/ nUR                  S:  a  US   nUR                  U5        [         R                  " USS  Vs/ s H  n[        X   X   5      PM     sn5      n[         R                  " Xa:*  5      S   nX'S-      nUR                  S:  a  M  X   $ s  snf )z
Standard nms.
Nr   r      npargsortsizeappendarrayr   whereSthresorderkeepitovrindss           r   standard_nmsr.   7   s     JJqAw"%ED
**q.!HAhh%)D)QQT140)DExx%a(Qh **q. 7N Es   #B<c           
      ~   [         R                  " U SS2S4   5      SSS2   n/ nUR                  S:  a  US   nUR                  U5        [         R                  " USS  Vs/ s H  n[        X   X   5      PM     sn5      n[         R                  " Xa:*  5      S   nX'S-      nUR                  S:  a  M  U$ s  snf )z
Standard nms, return inds.
Nr   r   r   r   r   r%   s           r   standard_nms_indsr0   H        JJqAw"%ED
**q.!HAhh%)D)QQT140)DExx%a(Qh **q. K E   #B:c           
      ~   [         R                  " U SS2S4   5      SSS2   n/ nUR                  S:  a  US   nUR                  U5        [         R                  " USS  Vs/ s H  n[        X   X   5      PM     sn5      n[         R                  " Xa:*  5      S   nX'S-      nUR                  S:  a  M  U$ s  snf )z
nms.
Nr   r   r   r   r   r%   s           r   nmsr4   Y   r1   r2   c                    U R                  5       nUR                  S   nUb  US:  a  [        R                  " / 5      $ Su  pxSn	[        R                  " U5      n
US   R                  5       US   R                  5       p[        U5       GH8  nX]S4   nUnX]   R                  5       nX   nUS-   nXv:  a  XUS4   :  a  XWS4   nUnUS-   nXv:  a  M  XXSS24   X]SS24'   X   X'   XUSS24'   XU'   X]   R                  5       nUS-   nXv:  d  M  XW   R                  5       n[        X5      nUS:  a  US:X  a  UU:  a  SU-
  n	O4Sn	O1US:X  a   [        R                  " SUS-  -  U-  5      n	OUU:  a  Sn	OSn	XUS4   -  XWS4'   XWS4   U:  a$  XVS-
  SS24   XWSS24'   XS-
     X'   US-
  nUS-
  nUS-   nXv:  a  M  GM;     USU $ )	z
soft_nms
:para boxes_in, N x 9 (coords + score)
:para threshould, eliminate cases min score(0.001)
:para Nt_thres, iou_threshi
:para sigma, gaussian weght
:method, linear or gaussian
r   Nr   )r   r   g        r   r   g      )copyshaper   r#   arangeranger   exp)boxes_inNt_thres	thresholdsigmamethodboxesNposmaxposweightr-   tboxsboxr*   maxscoreti
ts_iou_vals                    r   soft_nmsrJ   j   s    MMOEAAyAExx|KCF99Q<Dq%(--/$1XA;x}}W!egQ-' a='C	 g AI&d,faiVx}}!eg:??$D%d1JA~Q;!H,!"Z!"q[VVD:q=$85$@AF!H,!"!" &sAv 61f a=9,$)a%(OEq&M $UDIAA'C'C1 gg+ ^ !9r   c                 8   / nSnU  H8  nUb  [        XC5      U:  a  [        XC5      nM"  Ub  UR                  U5        UnM:     Ub  UR                  U5        [        U5      S:X  a  [        R
                  " / 5      $ [        [        R
                  " U5      U5      $ )zu
locality aware nms of EAST
:param polys: a N*9 numpy array. first 8 coordinates, then prob
:return: boxes after nms
Nr   )r   r   r"   lenr   r#   r.   )polysr'   r&   r   r   s        r   nms_localityrN      s     	AA=\!/%7q$A}A  	}	
1v{xx|U++r   __main__iW  i^  i     i     iq  ig  )333333?g?g      ?r   )rR   )__doc__numpyr   shapely.geometryr   r   r   r   r.   r0   r4   rJ   rN   __name__r   r#   r   r   r   r   <module>rW      s   
  $$$"""@F,. z	'"((S#Jc
S#Jc
KL
M
R
RS r   