
    i(                     J    S SK rS SKJr  S rS
S jrS rSS jrS rS r	S	 r
g)    N)Polygonc                     [        U [        5      (       a  [        R                  " U 5      n [        U [        R                  5      (       d   eU R
                  S-  S:X  a  U R
                  S:  d   eU R                  SS/5      n[        U5      $ )zConvert k points to 1 polygon.

Args:
    points (ndarray or list): A ndarray or a list of shape (2k)
        that indicates k points.

Returns:
    polygon (Polygon): A polygon object.
   r      )
isinstancelistnparrayndarraysizereshaper   )points	point_mats     ^/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppocr/utils/poly_nms.pypoints2polygonr      st     &$&!fbjj))))KK!Oq v{{a'788Aw'I9    c                     [        U [        5      (       d   e[        U[        5      (       d   eUS:X  a  X-  nO#U R                  U5      UR                  U5      -  nUR                  U4$ )zCalculate the intersection area between two polygon.

Args:
    poly_det (Polygon): A polygon predicted by detector.
    poly_gt (Polygon): A gt polygon.

Returns:
    intersection_area (float): The intersection area between two polygons.
r   )r   r   bufferarea)poly_detpoly_gtr   
poly_inters       r   poly_intersectionr   '   sd     h((((gw''''{'
__V,w~~f/EE
??J&&r   c                     [        U [        5      (       d   e[        U[        5      (       d   eU R                  nUR                  n[        X5      u  pEX#-   U-
  $ )zCalculate the union area between two polygon.

Args:
    poly_det (Polygon): A polygon predicted by detector.
    poly_gt (Polygon): A gt polygon.

Returns:
    union_area (float): The union area between two polygons.
)r   r   r   r   )r   r   area_detarea_gtarea_inters_s         r   
poly_unionr    ;   sV     h((((gw''''}}HllG&x9NK++r   c                 l    [        U 5      nUS:  a  gUS-  S:X  a  U(       d  gUS-  S:X  a  U(       a  gg)Nr   Fr   r   T   )len)x
with_scorenums      r   valid_boundaryr'   N   s8    
a&C
Qw
Qw!|Z
Qw!|
r   c                     [        U S5      (       d   e[        US5      (       d   e[        U 5      n[        U5      n[        X#5      $ )zCalculate the IOU between two boundaries.

Args:
   src (list): Source boundary.
   target (list): Target boundary.

Returns:
   iou (float): The iou between two boundaries.
F)r'   r   poly_iou)srctargetsrc_polytarget_polys       r   boundary_iour.   Z   sI     #u%%%%&%((((c"H (KH**r   c                     [        U [        5      (       d   e[        U[        5      (       d   e[        X5      u  p#[        X5      nUS:X  a  gX$-  $ )zCalculate the IOU between two polygons.

Args:
    poly_det (Polygon): A polygon predicted by detector.
    poly_gt (Polygon): A gt polygon.

Returns:
    iou (float): The IOU between two polygons.
r   g        )r   r   r   r    )r   r   r   r   
area_unions        r   r)   r)   l   sS     h((((gw''''&x9NKH.JQ##r   c                    [        U [        5      (       d   e[        R                  " [	        U S S95      n / n[        U R                  S   5       Vs/ s H  o3PM     nn[        U5      S:  a  UR                  XS      R                  5       5        XS      S S n[        R                  " US5      n[        R                  " [        U5      45      n[        [        U5      5       H  nXU      S S n[        XW5      Xc'   M     [        R                  " Xa:  5      n[        R                  " XH5      n[        U5      S:  a  M  U$ s  snf )Nc                     U S   $ )Nr    )r$   s    r   <lambda>poly_nms.<locals>.<lambda>   s    qur   )keyr   r   )r   r	   r
   r   sortedrangeshaper#   appendtolistdeletezerosr.   where)	polygons	threshold	keep_polyiindexAiou_listBremove_indexs	            r   poly_nmsrH      s    h%%%%xxx_=>HIhnnQ/0101Q0E1
e*q.),33562Y$		%$88SZM*s5z"Aq"3B'A&q,HK # xx 45		%. e*q.  2s   E)g-C6?)T)numpyr
   shapely.geometryr   r   r   r    r'   r.   r)   rH   r3   r   r   <module>rK      s0     $('(,&	+$$&r   