
    Mi$                         S SK Jr  S SKrS SKrS SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  SS jrS	 rSS
\\   4S jjr SS
\\   4S jjrSS jrg)    )ListN)Image)clean_boxes)TextDetectionResult)
PolygonBox)settingsc                 R   U R                  5       n[        [        U5      S-  5      n[        R                  " [        R
                  " XE5      US  5      n[        R                  " Xc-  SS5      S-  n[        R                  " X'-  SS5      n[        R                  " X-  SS5      nX4$ )	Ng?r      g      ?皙?g333333?g333333?g?)ravelintlennpmean	partitionclip)linemaptext_thresholdlow_texttypical_top10_avgflat_maptop_10_countavg_intensityscaling_factors           q/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/surya/detection/heatmap.pyget_dynamic_thresholdsr      s    }}Hs8}s*+LGGBLL@OPMWW]>1E%PNwwx0#s;HWW^<dCHN##    c           	         U R                   u  p4[        XU5      u  pX:  R                  [        R                  5      n[
        R                  " USS9u  pgp/ n
/ nSn[        SU5       GHg  nX[
        R                  4   nUS:  a  M   UU[
        R                  [
        R                  [
        R                  [
        R                  /4   u  nnnn [        [        R                  " [        UU5      5      5      nSn[#        SUU-
  U-
  5      [#        SUU-
  U-
  5      nn[        XOU-   U-   U-   5      [        UUU-   U-   U-   5      nnUUU2UU24   U:H  nU UU2UU24   U   nUR$                  S:X  a  GM  [        R"                  " U5      nUU:  a  GM/  UR                  [        R                  5      nUU-   n[
        R&                  " [
        R(                  UU45      n[
        R*                  " UU5      n[        R,                  " U5      u  n n!U!U-  n!U U-  n [        R.                  " U!U 45      n"[
        R0                  " U"5      n#[
        R2                  " U#5      n$[        R4                  R7                  U$S   U$S   -
  5      [        R4                  R7                  U$S   U$S   -
  5      nn[#        UU5      [        UU5      S-   -  n%[9        SU%-
  5      S::  a  U"S S 2S4   R                  5       U"S S 2S4   R#                  5       n'n&U"S S 2S4   R                  5       U"S S 2S4   R#                  5       n)n([        R:                  " U&U(/U'U(/U'U)/U&U)//[        R<                  S	9n$U$R?                  SS
9RA                  5       n*[        RB                  " U$SU*-
  S5      n$[#        UU5      nURE                  U5        U
RE                  U$5        GMj     US:  a  U V+s/ s H  n+U+U-  PM
     nn+X4$ ! [          a    Sn GNf = fs  sn+f )N   )connectivityr   r
   
      gh㈵>r   )dtype)axis)#shaper   astyper   uint8cv2connectedComponentsWithStatsrangeCC_STAT_AREACC_STAT_LEFTCC_STAT_TOPCC_STAT_WIDTHCC_STAT_HEIGHTr   sqrtmin
ValueErrormaxsizegetStructuringElement
MORPH_RECTdilatenonzerocolumn_stackminAreaRect	boxPointslinalgnormabsarrayfloat32sumargminrollappend),r   r   r   img_himg_wtext_score_comblabel_countlabelsstats	centroidsdetconfidencesmax_confidencekr4   xywhniterbuffersxsyexeymaskselected_linemapline_maxsegmapksizekernelselected_segmapy_indsx_indsnp_contours	rectanglebox	box_ratioleftrighttopbottomstartidxcs,                                               r   detect_boxesrm      s    ==LE5gxXN)11"((;O,/,L,La-)K CKN1k"((()"9 s0A0A3CUCUVX

1a
	Aq	*+E QE	F*+SAI4F-GBUEEMF23SAPV@V5WBbeRUl#q("2b5"R%<06  A%66*+ n$RXX&**3>>E5>J**VV4 O4""oovv&67OOK0	mmI& yy~~c!fs1vo.		s1vA0O11IQT!12	q9}$%ad+//1;q!t3D3H3H3J%D%ad+//1;q!t3D3H3H3JC((uclUFOdF^LjjC 777?))+ggc1x<+^X68$

3A #D 3>?;aq>);?m  	E	j @s   )O2P2PPreturnc           	      >   Uc  [         R                  nUc  [         R                  nU R                  [        R
                  :w  a  U R                  [        R
                  5      n [        XU5      u  p4[        X45       VVs/ s H  u  pV[        XVS9PM     snn$ s  snnf )N)polygon
confidence)
r   DETECTOR_TEXT_THRESHOLDDETECTOR_BLANK_THRESHOLDr#   r   r@   r&   rm   zipr   )textmapr   r   boxesrM   re   rq   s          r   get_detected_boxesrw   q   s    !9944}}

"..,%gxHE  #566OC 	366  s    Bc                     [        XU5      nU H/  nUR                  X5        UR                  SSUS   US   /5        M1     [        U5      nU$ )Nr   r
   )rw   rescalefit_to_boundsr   )ru   processor_size
image_sizer   r   bboxesbboxs          r   get_and_clean_boxesr      sV      BF^0Aq*Q-A?@   FMr   c           
      >   U u  p4Su  pVU(       al  [         R                  " US-  R                  [        R                  5      5      n[         R                  " US-  R                  [        R                  5      5      n[        [        UR                  5      5      n[        X7U5      nU H[  n	U	R                  SU	R                  -  :  d  M"  U	R                  S[        R                  S9  U	R                  SSUS   US   /5        M]     [        UUUSSUS   US   /S9n
U
$ )NNN      r   )x_marginy_marginr
   )r}   heatmapaffinity_map
image_bbox)r   	fromarrayr&   r   r'   listreversedr%   r   heightwidthexpandr   DETECTOR_BOX_Y_EXPAND_MARGINrz   r   )preds
orig_sizesinclude_mapsr   r   heat_imgaff_imgheatmap_sizer}   re   results              r   parallel_get_boxesr      s    !G"H??GcM#9#9"((#CD//<##5"="=bhh"GH/0L 
CF::CII%JJH,Q,QJRAz!}jm4	  !q*Q-A7	F Mr   )gffffff?r   )F)typingr   r(   numpyr   PILr   surya.common.utilr   surya.detectionr   surya.common.polygonr   surya.settingsr   r   rm   rw   r   r    r   r   <module>r      sX     
   ) / + #
$TntJGW $ HL		*	r   