
    H`f,                     z    d dl mZmZ d dlZeeeeef   Zdee   defdZdedefdZdee   d	ee   dee	   fd
Z
y)    )ListTupleNboxesreturnc                 :   t        | D cg c]  }|d   	 c}      }t        | D cg c]  }|d   	 c}      }t        | D cg c]  }|d   |d   z    c}      }t        | D cg c]  }|d   |d   z    c}      }||||z
  ||z
  fS c c}w c c}w c c}w c c}w )Nr            )minmax)r   boxlefttoprightbottoms         G/server/volume/plugins/@scrypted/onnx/zip/unzipped/predict/text_skew.pyunion_boxesr      s    %(3A()D
'#s1v'
(CE2SQ#a&23EU3c#a&3q6/34FedlFSL00	 )'23s   B	BB$Bbox1box2c                     | \  }}}}|\  }}}}	d}
|||	|
z  z   kD  s||||
z  z   kD  ry|}||z   }|}||z   }t        ||	      }|dz  }t        t        ||z
        t        ||z
              }||k  ryy)NgUUUUUU?Fr	   T)r   r   abs)r   r   l1t1w1h1l2t2w2h2	line_slopleft_edge_box1right_edge_box1left_edge_box2right_edge_box2larger_height	thresholddistances                     r   are_boxes_adjacentr(      s    NBBNBBI	Bi2R)^(;#; N2gON2gO BKM!I N_,-s>O3S/TH
 9    scoresc           	         g }t        | d       } t        |       D ]s  \  }}d}|D ]K  }|d   D ]=  }t        ||      s|d   j                  |       |d   j                  ||          d} n |sK n |r[|j                  |g||   gd       u |D ]  }|d   } t	        |       |d<   t        |       d	z
  rd| d
   d	   | d
   d   dz  z   }| d   d	   | d   d   dz  z   }	| d   d
   | d
   d
   z
  }
t        | D cg c]  }|d
   	 c}      }t        | D cg c]  }|d
   |d   z    c}      }t        | D cg c]  }|d   	 c}      }t        | D cg c]  }|d   	 c}      t        |       dz     }t        | D cg c]  }|d   	 c}      }|}|dz  }||z
  }
t        j                  |	|z
  |
z        |d<   ||dz  z   |d<   |d   d
   |z
  |d   d	   |z
  |d   d   |dz  z   |d   d   |dz  z   f|d<   t        |d         t        |d         z  |d<   d
|d<   | d
   d   |d<   |d   d
   |d<    |S c c}w c c}w c c}w c c}w c c}w )Nc                     | d   S )Nr    )r   s    r   <lambda>z&find_adjacent_groups.<locals>.<lambda>2   s
    #a& r)   )keyFr   r*   T)r   r*   unionr   r   r
   r	   g?
skew_angledeskew_heightscore)sorted	enumerater(   appendr   lenr   r   mathatansum)r   r*   groupsindexr   added_to_groupgroup	other_boxlmrmdxminxmaxxminhmedian_heightmaxhfilter_height
pad_heights                     r   find_adjacent_groupsrK   .   s   F 501E& G
s 	E"7^ 	%c95'N))#.(O**6%=9%)N 	 MMSEfUm_EFG  0g$U+gu:>q!uQx{Q.Br1b	!q 00B)A,58A;/B%03A01D59CAQ9:D %03A01D"e#<sCF#<=c%jAoNM%03A01D)M&-JB"&))R"WN";E,%2Z!^%CE/" gq!J.gq!J.gq!JN2gq!JN2	4E'N !x1Ch4HHE'N"#E,%*1Xa[E/""8_Q/E'N?0B M5 19 1#<0s   <H>
I
:I
I
I
)typingr   r   r9   intBoundingBoxr   r(   floatdictrK   r-   r)   r   <module>rQ      sq     Cc3&'1tK( 1[ 1[  >6[ 1 64; 64PT: 6r)   