
    i|                     \    S SK r S SKrS SKJr  S SKJr  S SKJrJ	r	J
r
  S rS rS rSS jrg)	    N)check_install)iodarea_of_intersectionareac                 2   SnS nS nSS jnS nS n[        U5       GHX  nUS:w  d  M  US:w  d  M  US	:w  d  M  US
:w  d  M$  US:w  d  M,  US:w  d  M4  US:w  d  M<  U" U5      n	U" U 5      n
U" X5      n	/ n[        [        U
5      5       H!  nX   S   S:X  d  M  UR                  U5        M#     SnU H  nX-
  nX	 US-  nM     [        R                  " [        U
5      [        U	5      45      n[        R                  " [        U
5      [        U	5      45      n0 n0 n[        U
5       GHC  u  nn[        U	5      S:  d  M  [        U	5       GH  u  nnUnUS   R                  S5       Vs/ s H  n[        U5      PM     nn[        [        [        U5      5      nUS   R                  5       nUSS S2   nUSS S2   n[        [        [        [        R                  " US   5      5      5      n[        [        [        [        R                  " US   5      5      5      n[        US   R                  5       S   5      nU" UUUU5      UUU4'   U" UUUU5      UUU4'   UUU'   UUU'   GM     GMF     Un Un!Un"Un#GM[     0 n$W U$S'   W!U$S'   W"U$S'   W#U$S'   U$$ s  snf )N   c           	          / n[        U 5      n[        U5       HQ  nX   S   nX   S   nSR                  [        [        UR                  S5      5      5      nUR                  Xe/5        MS     U$ z&This helper reads input from txt filespointstexts,lenrangejoinmapstrreshapeappend	pred_dictdetnir   textpoints          h/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppocr/utils/e2e_metric/Deteval.pyinput_reading_mod&get_socre_A.<locals>.input_reading_mod   u    	NqA\(+F<(DHHNNE JJ}%  
    c                    / n[        U 5      n[        U5       GHW  nX   S   R                  5       n[        U5      nX   S   n[        R                  " S/SS9S[        R                  " S/SS9S[        R                  " S/S	S9[        R                  " S/S	S9/n/ / p[        U5       H/  n
UR                  XJ   S   5        U	R                  XJ   S
   5        M1     [        R                  " U/SS9US
'   [        R                  " U	/SS9US'   US:w  aJ  [        R                  " U/SR                  [        U5      5      S9US'   [        R                  " S/S	S9US'   UR                  U5        GMZ     U$ )-This helper reads groundtruths from mat filesr   r   zx:z<U2)dtyper   zy:#z<U1r   int16    zU{}   c   )r   r   tolistnparrayr   format)gt_dictgtr   r   r   hr   xxt_xt_yjs              r   gt_reading_mod#get_socre_A.<locals>.gt_reading_mod-   sP   LqAZ)002FFA:f%D$u-$u-#e,#e,B 21X

69Q<(

69Q<(  HHcU'2BqEHHcU'2BqErz$u||CI/FG1#e41IIbM+ , 	r"   c           
         [        U5       GH)  u  p4US   S:X  d  M  US   R                  S   S:  d  M)  [        [        [        [
        R                  " US   5      5      5      n[        [        [        [
        R                  " US   5      5      5      n[        U 5       Ht  u  pxUn	US   R                  S5       V
s/ s H  n
[        U
5      PM     nn
[        [        [        U5      5      nUSS S2   nUSS S2   n[        XXV5      nX:  d  Mp  / X'   Mv     U  Vs/ s H  o/ :w  d  M
  UPM     snU S S & GM,     U $ s  sn
f s  snf Nr,   r&   r   r(   r   r      
	enumerateshapelistr   intr.   squeezesplitfloatr   
detectionsgroundtruths	thresholdgt_idr2   gt_xgt_ydet_id	detectiondetection_origxdet_xdet_y
det_gt_iouitems                  r   detection_filtering(get_socre_A.<locals>.detection_filteringI   (   "<0IE12a5;;q>A#5CRZZ1%678CRZZ1%678)2:)>%F%.N3<Q<3E3Ec3J K3Jaq3JI K $Si%8 9I%addOE%addOE!$U4!>J!--/
* *? 3= K*$
* K
1 1  !L !L   =D<	E)Ec                 \    [         R                  " [        XX#5      [        X#5      -  S5      $ 
sigma = inter_area / gt_area
r<   r.   roundr   r   rP   rQ   rJ   rK   s       r   sigma_calculation&get_socre_A.<locals>.sigma_calculation[   ,     xx!%;d4>NNQR
 	
r"   c                 |    [        X5      S:X  a  g[        R                  " [        XX#5      [        X5      -  S5      $ N        r   r<   r   r.   r\   r   r]   s       r   tau_calculation$get_socre_A.<locals>.tau_calculationc   :    $xx!%;d5>PPST
 	
r"   	.DS_StorePascal_result.txtPascal_result_curved.txtPascal_result_non_curved.txtDeteval_result.txtDeteval_result_curved.txtDeteval_result_non_curved.txtr,   r&   r   r   r<   r(   r*   sigma
global_tauglobal_pred_strglobal_gt_strg      ?)r   r   r   r.   zerosr>   rC   rD   r@   r   rA   striprB   r   r-   )%gt_dirr   	allInputsr   r8   rT   r^   re   input_idrF   rG   dc_idr   cntanumlocal_sigma_tablelocal_tau_tablelocal_pred_strlocal_gt_strrI   r2   rL   rM   rN   rO   pred_seq_strrP   rQ   rJ   rK   
gt_seq_strglobal_sigmarp   rq   rr   single_datas%                                        r   get_socre_Ar      s   I$8$

 )$$0077;;1188<<*95J)&1L,J E3|,-?1%,LLO . Cg %q 
 !##l*;S_)M N hhL(93z?'KLONL&|4	rz?Q&-6z-B)	)27@|7I7I#7N$O7N!U1X7N	$O$(S))<$=	'5a'8'>'>'@ )!$Q$ )!$Q$#CRZZ1->$?@#CRZZ1->$?@%(A):%;
;L!5$<)%-8 :I!5$:v6 2>v..8U+% .C 5, -L(J,O(Mo %r K'K *K%4K!"#0K 9 %Ps   )J
c                 P   SnS nS nSS jnS nS n[        U5       GHg  n	U	S:w  d  M  U	S:w  d  M  U	S	:w  d  M  U	S
:w  d  M$  U	S:w  d  M,  U	S:w  d  M4  U	S:w  d  M<  U" U5      n
U" X5      R                  5       nU" X5      n
/ n[        [        U5      5       H!  nX   S   S:X  d  M  UR                  U5        M#     SnU H  nX-
  nUU	 US-  nM     [        R
                  " [        U5      [        U
5      45      n[        R
                  " [        U5      [        U
5      45      n0 n0 n[        U5       GHC  u  nn[        U
5      S:  d  M  [        U
5       GH  u  nnUnUS   R                  S5       Vs/ s H  n[        U5      PM     nn[        [        [        U5      5      nUS   R                  5       nUSS S2   nUSS S2   n[        [        [        [        R                  " US   5      5      5      n[        [        [        [        R                  " US   5      5      5      n[        US   R                  5       S   5      n U" UUUU5      UUU4'   U" UUUU5      UUU4'   UUU'   U UU'   GM     GMF     Un!Un"Un#Un$GMj     0 n%W!U%S'   W"U%S'   W#U%S'   W$U%S'   U%$ s  snf )Nr   c           	          / n[        U 5      n[        U5       HQ  nX   S   nX   S   nSR                  [        [        UR                  S5      5      5      nUR                  Xe/5        MS     U$ r
   r   r   s          r   r   &get_socre_B.<locals>.input_reading_mod   r!   r"   c                 L    [         R                  " U < SU< S35      nUS   nU$ )Nz/poly_gt_imgz.matpolygt)ioloadmat)rv   rI   r2   s      r   r8   #get_socre_B.<locals>.gt_reading_mod   s#    ZZ&%@A\	r"   c           
         [        U5       GH)  u  p4US   S:X  d  M  US   R                  S   S:  d  M)  [        [        [        [
        R                  " US   5      5      5      n[        [        [        [
        R                  " US   5      5      5      n[        U 5       Ht  u  pxUn	US   R                  S5       V
s/ s H  n
[        U
5      PM     nn
[        [        [        U5      5      nUSS S2   nUSS S2   n[        XXV5      nX:  d  Mp  / X'   Mv     U  Vs/ s H  o/ :w  d  M
  UPM     snU S S & GM,     U $ s  sn
f s  snf r;   r=   rE   s                  r   rT   (get_socre_B.<locals>.detection_filtering   rV   rW   c                 \    [         R                  " [        XX#5      [        X#5      -  S5      $ rY   r[   r]   s       r   r^   &get_socre_B.<locals>.sigma_calculation   r`   r"   c                 |    [        X5      S:X  a  g[        R                  " [        XX#5      [        X5      -  S5      $ rb   rd   r]   s       r   re   $get_socre_B.<locals>.tau_calculation   rg   r"   rh   ri   rj   rk   rl   rm   rn   r,   r&   r   r   r<   r(   r*   ro   rp   rq   rr   rs   )r   r-   r   r   r.   rt   r>   rC   rD   r@   r   rA   ru   rB   r   )&rv   img_idr   rw   r   r8   rT   r^   re   rx   rF   rG   ry   r   rz   r{   r|   r}   r~   r   r   rI   r2   rL   rM   rN   rO   r   rP   rQ   rJ   rK   r   r   rp   rq   rr   r   s&                                         r   get_socre_Br      s   I$
$

 )$$0077;;1188<<*95J)&9@@BL,J E3|,-?1%,LLO . Cg %q 
 !##l*;S_)M N hhL(93z?'KLONL&|4	rz?Q&-6z-B)	)27@|7I7I#7N$O7N!U1X7N	$O$(S))<$=	'5a'8'>'>'@ )!$Q$ )!$Q$#CRZZ1->$?@#CRZZ1->$?@%(A):%;
;L!5$<)%-8 :I!5$:v6 2>v..8U+% .C 5, -L(J,O(Mo %r K'K *K%4K!"#0K 9 %Ps   8J#
c                   ^^ [        SS5        SSKmS nU4S jnS mSUU4S jjnU4S	 jnU4S
 jn/ nU H-  n	UR                  U	SS2SSS24   R                  S5      5        M/     U" X5      n
U" X5      n[	        [        U
5      S-
  SS5       H!  nX   S   S:X  d  M  U
R                  U5        M#     [        R                  " [        U
5      [        U5      45      n[        R                  " [        U
5      [        U5      45      n[        U
5       GH'  u  p[        U5      S:  d  M  [        U5       GH   u  nnUS   R                  S   S-  n[        R                  " US   5      R                  US5      R                  S5      nTR                  U5      nUSSS2   nUSSS2   n[        R                  " [        R                  " U5      [        R                  " U5      45      nUR                  SS5      R                  5       nTR                  U5      nU" UU5      XU4'   U" UU5      XU4'   GM     GM*     0 nUUS'   UUS'   SUS'   SUS'   U$ )z0
get score for CentripetalText (CT) prediction.
PolygonPolygon3r   Nc                     / n[        U 5      n[        U5       H.  nX   S   X   R                  5       S.nUR                  U5        M0     U$ )r$   r   )transcriptionr   )r   r   numpyr   )gt_labelr   rG   nboxr   labels         r   r8   #get_score_C.<locals>.gt_reading_mod<  sO    8}tA&*gajHK<M<M<OPE&  r"   c                 ^   > U R                  5       nUR                  5       nX#-   T" X5      -
  $ )Nr   )pDpGareaAareaBget_intersections       r   	get_unionget_score_C.<locals>.get_unionF  s,    		}/777r"   c                 J    X-  n[        U5      S:X  a  gUR                  5       $ )Nr   )r   r   )r   r   pInts      r   r   %get_score_C.<locals>.get_intersectionK  s#    wt9>yy{r"   c                   > U GHM  nUS   R                   S   S-  nUS   S:X  d  M$  US:  d  M,  [        R                  " US   5      R                  US5      R	                  S5      nTR                  U5      n[        U 5       H  u  pgUSS S2   nUSS S2   n	[        R                  " [        R                  " U	5      [        R                  " U5      45      n
U
R                  SS5      R                  5       n
TR                  U
5      n
 T" X5      U
R                  5       -  nWU:  d  M  / X'   M     U  Vs/ s H  o/ :w  d  M
  UPM     snU S S & GMP     U $ !   [        XU5         ND= fs  snf )	Nr   r   r<   r   ###int32r   r   )r?   r.   r/   r   astyper   r>   concatenate	transposer   print)rF   rG   rH   r2   	point_numgt_prL   rM   rQ   rP   det_prR   rS   r   plgs                r   rT   (get_score_C.<locals>.detection_filteringQ  sS   B8**1-2I/"e+Qxx8-55iCJJ7S{{4()2:)>%F%addOE%addOENNBHHUORXXe_+MNE!MM!R0::<EKK.E2%5e%BUZZ\%Q
 "I--/
* *? 3= K*$
* K
1+ , 2eD1 !Ls   E8	E+E+E(c                 `   > UR                  5       S:X  a  gT" X5      UR                  5       -  $ )rZ   rc   r   r   r   r   r   s     r   r^   &get_score_C.<locals>.sigma_calculationj  s,     99;#,tyy{::r"   c                 `   > U R                  5       S:X  a  gT" X5      U R                  5       -  $ )z
tau = inter_area / det_area
rc   r   r   r   s     r   re   $get_score_C.<locals>.tau_calculationr  s,     ::<3,uzz|;;r"   r   r   r   r   r   r<   r   ro   rp   r)   rq   rr   rs   )r   r   r   r   r   r   popr.   rt   r>   r?   r/   r   r   r   )r   r   pred_bboxesr8   r   rT   r^   re   rF   rS   rG   idxr}   r~   rI   r2   rL   rM   r   r   rQ   rP   r   datar   r   s                           @@r   get_score_Cr   5  sC    )Z(8
 2;< J$q$B$w-//34  "(1L$J S&*B3 _-6S!	 4 #l"3S_!EFhhL 13z?CDO|,	z?Q%.z%:!	xL..q1Q6	xx8-55iCJJ7S{{4(!!$Q$!!$Q$%'IJa,668E*3DUD3Q!-01@1Mv. &; -& D%DM(D D	DKr"   c                   ^^^ ^!^"^#^$^% Sm%Sm$SmSm!/ n/ n/ m / mU  HS  nUR                  US   5        UR                  US   5        T R                  US   5        TR                  US   5        MU     S	nS	nS	nS	nS	n	S	n
UU U#U$U%4S
 jnUUU U!U#U$U%4S jnUUU U!U"U$U%4S jn[        [        U5      5       H  n[        R                  " X.   5      nX>   nUR
                  S	   m#UR
                  S   m"UT#-   nUT"-   nS	nS	n[        R                  " ST#45      n[        R                  " ST"45      nU" UUUUUUUUUU5
      u  nnnnnnnU	U-  n	U" UUUUUUUUUU5
      u  nnnnnnnU	U-  n	U" UUUUUUUUUU5
      u  nnnnnnnU	U-  n	M      XW-  n Xh-  n SU-  U-  UU-   -  n S[        U	5      U-  -
  n [        U	5      U-  n [        U	5      U-  n SU-  U-  UU-   -  nUUUU	UUUUUUUS.nU$ ! [         a    S	n Nqf = f! [         a    S	n N~f = f! [         a    S	n Nf = f! [         a    Sn Nf = f! [         a    S	n Nf = f! [         a    S	n Nf = f! [         a    S	n Nf = f)Ngffffff?g333333?g?r<   ro   rp   rq   rr   r   c
                 X  > Sn
[        T5       GH  n[        R                  " XS S 24   T:  5      nUS   R                  S   n[        R                  " XS S 24   T:  5      nUS   R                  S   n[        R                  " U S S 2US   4   T:  5      nUS   R                  S   n[        R                  " US S 2US   4   T:  5      nUS   R                  S   nUS:X  d  M  US:X  d  M  US:X  d  M  US:X  d  M  US-   nUS-   nUS-   nUS-   nSUSU4'   [        R                  " XS S 24   T:  5      nU	(       aW  TU   U   nTU   US   R	                  5       S      nUU:X  a  U
S-  n
O'UR                  5       UR                  5       :X  a  U
S-  n
SUSU4'   GM     UUUUUUU
4$ Nr   r   g      ?)r   r.   wherer?   r-   lower)r}   r~   local_accumulative_recalllocal_accumulative_precisionglobal_accumulative_recallglobal_accumulative_precisiongt_flagdet_flagidyrec_flaghit_str_numrI   &gt_matching_qualified_sigma_candidates*gt_matching_num_qualified_sigma_candidates$gt_matching_qualified_tau_candidates(gt_matching_num_qualified_tau_candidates'det_matching_qualified_sigma_candidates+det_matching_num_qualified_sigma_candidates%det_matching_qualified_tau_candidates)det_matching_num_qualified_tau_candidatesmatched_det_id
gt_str_curpred_str_currr   rq   num_gttptrs                          r   
one_to_one#combine_results.<locals>.one_to_one  s&    6]E57XX!(+b062 7q9??B 7 4688q)B.40 5Q7==a@ 5 79hh!!%KA%N"NORTT73 8:@@C 8 57HH#G#J JKbP51 6a8>>qA 6
 <q@=B@AE>!C-G#-M*0MPS0S-,E,K)/Kc/Q,$%5!!#*;1H*E*J!K!.s!3E!:J#23#7q8I8P8P8RST8U#VL#z1#q('--/:3C3C3EE'1,K./N*+e #h &(&)
 	
r"   c
                   > Sn
[        T5       GH  nUSU4   S:  a  M  [        R                  " XS S 24   S:  5      nUS   R                  S   nUT:  d  MJ  [        R                  " XS S 24   T:  USS S 24   S:H  -  5      nUS   R                  S   nUS:X  a  XU4   T:  a  XU4   T:  a  US-   nUS-   nUS-   nUS-   nSUSU4'   SUSU4'   U	(       a^  TU   U   nTU   US   R	                  5       S      nUU:X  a  U
S-  n
M  UR                  5       UR                  5       :X  a  U
S-  n
GM&  GM)  GM,  GM/  GM2  [        R                  " XU4   5      T:  d  GMS  SUSU4'   SUSU4'   U	(       aW  TU   U   nTU   US   R	                  5       S      nUU:X  a  U
S-  n
O'UR                  5       UR                  5       :X  a  U
S-  n
UT-   nUUT-  -   nUT-   nUUT-  -   nGM     UUUUUUU
4$ r   )r   r.   r   r?   r-   r   sum)r}   r~   r   r   r   r   r   r   r   r   r   rI   non_zero_in_sigmanum_non_zero_in_sigmaqualified_tau_candidatesnum_qualified_tau_candidatesr   r   fsc_krr   rq   kr   r   r   s                     r   one_to_many$combine_results.<locals>.one_to_many
  s    6]Eq%x 1$ "):!8)Dq)H I$5a$8$>$>q$A!$)+-88$AX."4!Q$19LM,( 0H/J/P/PQR/S,/14'/G(GHBN)1I*IJbP 6PRU5U29C? 6 5NPS4S183> 5 -.5)@A$<!<=#)6s);E)BJ+:3+? 8 ; B B DQ G,L  ,z9 +q 0#/#5#5#7:;K;K;M#M$/1$4K $N $ Q O6 VV-5M.MNOSUU()GAuH%<=HQ 889%23%7%>
'6s';4Q7>>@C( (:5'1,K+113z7G7G7II +q 0 2Le1S.56>? 2
 1JE0Q-46>? 1E #P &(&)
 	
r"   c
                   > Sn
[        T5       GH9  nUSU4   S:  a  M  [        R                  " US S 2U4   S:  5      nUS   R                  S   nUT:  d  MK  [        R                  " U S S 2U4   T:  USS S 24   S:H  -  5      nUS   R                  S   nUS:X  a  XU4   T:  a  XU4   T:  a  US-   nUS-   nUS-   nUS-   nSUSU4'   SUSU4'   U	(       a  TU   U   n[	        US   5      n[        U5       Hd  nUS   R                  5       U   nUTU   ;  a  M$  TU   U   nUU:X  a	  U
S-  n
  GM)  UR                  5       UR                  5       :X  a  U
S-  n
  GMT     GMY  GM\  GM_  GMb  [        R                  " XU4   5      T:  d  GM  SUSU4'   SUSU4'   U	(       a  TU   U   n[	        US   5      n[        U5       Hb  nUS   R                  5       U   nUTU   ;  a  M$  TU   U   nUU:X  a  U
S-  n
  O-UR                  5       UR                  5       :X  d  M]  U
S-  n
  O   UUT-  -   nUT-   nUUT-  -   nUT-   nGM<     UUUUUUU
4$ r   )r   r.   r   r?   r   r-   r   r   )r}   r~   r   r   r   r   r   r   r   r   r   rL   non_zero_in_taunum_non_zero_in_tauqualified_sigma_candidatesnum_qualified_sigma_candidatesr   gt_lenr   	ele_gt_idr   r   rr   rq   r   num_detr   r   s                        r   many_to_one$combine_results.<locals>.many_to_oneh  s9    GnF6	"Q& hhq&y'AA'EFO"1!"4":":1"="a'-/XX&q&y1R7GAqDMQ<NO.* 2LA1N1T1TUV1W.1Q6'F(JKrQ)f*LMQSS 6PRU5U29C? 6 5NPS4S183> 5 BC#= =>./F+#+:3+?+GL%()CA)F%GF',V},Fq,I,P,P,RSV,W	#,M#4F#F$,-:3-?	-J
#/:#=$/1$4K$)'3'9'9';z?O?O?Q'Q(3q(8$) (5 $ T R@ VVO,NOPTVV*+HQY'=>GA99:'6s';F'C!$%?%B!C#(=C(B1(E(L(L(Ns(SI(c0BB ()6s);I)FJ+z9 +q 0 %#/#5#5#7:;K;K;M#M$/1$4K$) $1 385@A /
 6= 2
 285@A . 4PRW3W0c %f &(&)
 	
r"   r   )total_num_gttotal_num_detr   hit_str_countrecall	precisionf_scoreseqerr
recall_e2eprecision_e2ef_score_e2e)	r   r   r   r.   r/   r?   rt   ZeroDivisionErrorrD   )&all_datar   r   rp   r   r   r   r   r   r   	hit_countr   r   r   r   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   finalr   rr   rq   r   r   r   r   r   s&                                 @@@@@@@@r   combine_resultsr    s   	B	BE	ALJOMDM*$|,-t$567T/23	  "#$%!LMMIH
 H
T\
 \
|g
 g
R S&'HH\%67$/"((+#))!,#f,%/$%!'($((Av;'88QL) %(&)
	
%(&) 	$ %(&)
	
%(&) 	$ %(&)
	
%(&) 	$c (f+:1A	i-&(I,>?U=),FFF=)L8
m,}<-'*4
8RS
 %&&@& &"E L]  
  	
  
  
  

  
  s~   G5 H H 'H+ 9H= I I! 5HHHHH('H(+H:9H:=IIII!I0/I0)T)jsonr   r.   scipy.ior   ppocr.utils.utilityr   #ppocr.utils.e2e_metric.polygon_fastr   r   r   r   r   r   r   r"   r   <module>r     s4       - O OWt@Fqhkr"   