
    ib-                     N    S SK rS SKJr  S	S jrS
S jrS rS r " S S\5      r	g)    N)softmaxc                    U SS2S4   nU SS2SS24   n/ n[         R                  " U5      nXs* S n[        U5      S:  a  US   nUR                  U5        SUs=:  a  [        U5      :X  d  O  [        U5      S:X  a  OLXXSS24   n	USS nXWSS24   n
[	        U
[         R
                  " U	SS95      nX{U:*     n[        U5      S:  a  M  XSS24   $ )a@  
Args:
    box_scores (N, 5): boxes in corner-form and probabilities.
    iou_threshold: intersection over union threshold.
    top_k: keep top_k results. If k <= 0, keep all the results.
    candidate_size: only consider the candidates with the highest scores.
Returns:
     picked: a list of indexes of the kept boxes
Nr      axis)npargsortlenappendiou_ofexpand_dims)
box_scoresiou_thresholdtop_kcandidate_sizescoresboxespickedindexescurrentcurrent_box
rest_boxesious               o/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppocr/postprocess/picodet_postprocess.pyhard_nmsr      s     2Fq#2#vEFjj Go&'G
g,
"+gu#F#s7|q'8QJ'#2,A:&
NN;Q/
 ./ g,
 ai      c                 .   [         R                  " U SSS24   USSS24   5      n[         R                  " U SSS24   USSS24   5      n[        X45      n[        U SSS24   U SSS24   5      n[        USSS24   USSS24   5      nXVU-   U-
  U-   -  $ )zReturn intersection-over-union (Jaccard index) of boxes.
Args:
    boxes0 (N, 4): ground truth boxes.
    boxes1 (N or 1, 4): predicted boxes.
    eps: a small number to avoid 0 as denominator.
Returns:
    iou (N): IoU values.
.N   )r	   maximumminimumarea_of)boxes0boxes1epsoverlap_left_topoverlap_right_bottomoverlap_areaarea0area1s           r   r   r   3   s     zz&bqb/6#rr'?C::fS!"Wovc12gG+BLF37OVCG_5EF37OVCG_5E5=<7#=>>r   c                 L    [         R                  " X-
  SS5      nUS   US   -  $ )zCompute the areas of rectangles given two corners.
Args:
    left_top (N, 2): left top corner.
    right_bottom (N, 2): right bottom corner.
Returns:
    area (N): return the area.
g        N).r   ).r   )r	   clip)left_topright_bottomhws      r   r"   r"   E   s,     
(#t	4Bf:6
""r   c           	      n   [         R                  " U SSS24   USSS24   5      n[         R                  " U SSS24   USSS24   5      n[        X#5      n[        U SSS24   U SSS24   5      n[        USSS24   USSS24   5      nU[         R                  " U[         R                  " USS95      -  $ )z
Calculate the containment of the boxes.
Args:
    boxes0 (N, 4): ground truth boxes.
    boxes1 (N or 1, 4): predicted boxes.
Returns:
    containment (N): containment values.
.Nr   r   r   )r	   r    r!   r"   r   )r#   r$   r&   r'   r(   r)   r*   s          r   calculate_containmentr1   Q   s     zz&bqb/6#rr'?C::fS!"Wovc12gG+BLF37OVCG_5EF37OVCG_5E"**UBNN5q,IJJJr   c                   H    \ rS rSrSr/ SQSSSS4S jrS	 rS
 rS rS r	Sr
g)PicoDetPostProcessc   z
Args:
    input_shape (int): network input image size
    ori_shape (int): ori image shape of before padding
    scale_factor (float): scale factor of ori image
    enable_mkldnn (bool): whether to open MKLDNN
)          @   g?      ?i  d   c                 l    U R                  U5      U l        X l        X0l        X@l        XPl        X`l        g )N)load_layout_dictlabelsstridesscore_thresholdnms_threshold	nms_top_k
keep_top_k)selflayout_dict_pathr>   r?   r@   rA   rB   s          r   __init__PicoDetPostProcess.__init__l   s2     ++,<=.*"$r   c                     [        USSS9 nUR                  5       nS S S 5        W Vs/ s H  oDR                  S5      PM     sn$ ! , (       d  f       N/= fs  snf )Nrzutf-8)encoding
)open	readlinesstrip)rC   rD   fpr=   labels        r   r<   #PicoDetPostProcess.load_layout_dict|   sH    "C':b\\^F ;/56veD!v66 ;:6s   AA
Ac                    US   US   pC[        U5      nU(       GaV  [        R                  " US-  S45      nUSS2/ SQ4   R                  US-  S5      USS2SS24'   USS2SS24   USS2SS24   -  R                  US5      nUSS2/ S	Q4   nUSS2/ S
Q4   n[        R                  " UR                  S5      UR                  S5      UR                  S5      UR                  S5      45      R                  SU5      R                  nUSS2SS/4   R                  SU5      USS2SS/4'   USS2SS/4   R                  SU5      USS2SS/4'   UR                  [        R                  5      $ U$ )zApply transform to boxesr   r         N)r   r   r   rS   r   rS   r   r   r   r5   )r   r   rR      )r   rS         )r   r	   onesreshapeconcatenateminmaxTr,   astypefloat32)	rC   r   	ori_shapewidthheightnxyxys	            r   
warp_boxesPicoDetPostProcess.warp_boxes   sm   !!ilvJ!a%$Ba!99:BBAqBq"1"uI QU)bAaCj(11!Q7B1l?#A1l?#Aa!%%(AEE!HaeeAhGHPPQRTUVXX  q1a&yM..q%8Bq1a&yMq1a&yM..q&9Bq1a&yM99RZZ((Lr   c                 .   UR                   nUR                   nUS   [        US   5      -  nUS   [        US   5      -  n[        R                  " XV/[        R                  S9n[        R                  " UR                   SS  [        R                  S9n[        R                  " U5      R                  S5      R                   SS  n	[        R                  " U45      R                  S5      n
[        R                  " U45      R                  S5      nXU4$ )Nr   r   rS   r   )dtyper^   )shapefloatr	   arrayr^   r]   )rC   ori_imgimgorigin_shaperesize_shape
im_scale_y
im_scale_xscale_factor	img_shapeinput_shaper_   s              r   img_infoPicoDetPostProcess.img_info   s    }}yy!!_u\!_'==
!!_u\!_'==
xx 8

KHHSYYqr]"**=	hhsm**95;;AB?HHi\*11)<	xx077	B|33r   c                    US   US   pTUS   R                   S   n[        US   R                   S   S-  S-
  5      n/ n/ n	/ n
U R                  X5      u  pn[        U5       GH	  n/ n/ n[	        U R
                  XT5       GH  u  nnnUU   nUU   nUS   U-  nUS   U-  n[        R                  " U5      n[        R                  " U5      n[        R                  " UU5      u  nnUR                  5       S-   U-  nUR                  5       S-   U-  n[        R                  " UUUU4SS9n[        R                  " US-   5      nUR                  SUS-   45      n[        USS9nU[        R                  " USS9-  n[        R                  " USS9R                  S	5      nUU-  n[        R                  " UR!                  SS95      S S S2   nUS U R"                   nUU   nUU   nUU   nU/ S
QU-  -   n UR%                  U5        UR%                  U 5        GM     [        R&                  " USS9n![        R&                  " USS9n"/ n#/ n$[        SU"R                   S   5       H  n%U"S S 2U%4   n&U&U R(                  :  n'U&U'   n&U&R                   S   S:X  a  M5  U!U'S S 24   n([        R&                  " U(U&R                  SS5      /SS9n)[+        U)U R,                  U R.                  S9n)U#R%                  U)5        U$R1                  U%/U)R                   S   -  5        M     [3        U#5      S:X  a9  U	R%                  [        R4                  " S5      5        UR%                  S5        GM  [        R&                  " U#5      n#U R7                  U#S S 2S S24   X   5      U#S S 2S S24'   [        R&                  " X   S S S2   X   S S S2   /5      n*U#S S 2S S24==   U*-  ss'   U	R%                  [        R&                  " [        R                  " [        R8                  " U$5      SS9[        R                  " U#S S 2S4   SS9U#S S 2S S24   /SS95        UR%                  [3        U$5      5        GM     [        R&                  " U	SS9n	[        R:                  " U5      R=                  [        R>                  5      nU	 HA  n+[        U+S   5      U+SS  U+S   nn-n,U R@                  U,   n.U-U.US.n/U
R%                  U/5        MC     [        R8                  " U
 V0s/ s H  n0U0S   PM
     sn05      n![C        5       n1[        [3        U
5      5       H  n2U2U1;   a  M  [E        U!U!U2S4   5      n3[        RF                  " U3S:  5      S   n4[3        U45      S:  d  MI  U4 V0s/ s H  n0U
U0   S   S:X  d  M  U0PM     n5n0[3        U55      S:  a)  [I        U5 V0s/ s H
  n0U0U
U0   4PM     sn0S SS9S   S   n6O([I        U4 V0s/ s H
  n0U0U
U0   4PM     sn0S SS9S   S   n6U1R1                  U4 V0s/ s H  n0U0U6:w  d  M  U0PM     sn05        M     [K        U
5       V2V0s/ s H  u  n2n0U2U1;  d  M  U0PM     n
n2n0U
$ s  sn0f s  sn0f s  sn0f s  sn0f s  sn0f s  sn0n2f )Nr   	boxes_numr   r   rR   r   r9   r   )r   rR   )r   r   r   r   )r   r   )r   rR   r   )bboxrO   scorerz   .rO   tablec                     U S   S   $ Nr   r{    rd   s    r   <lambda>-PicoDetPostProcess.__call__.<locals>.<lambda>      ad7mr   T)keyreversec                     U S   S   $ r~   r   r   s    r   r   r   $  r   r   )&rj   intrv   rangezipr>   r	   arangemeshgridflattenstackrX   r   r   sumr
   r[   rA   r   rY   r?   r   r@   rB   extendr   emptyrf   rl   asarrayr]   int32r=   listr1   wheresorted	enumerate)7rC   rm   rn   predsr   	raw_boxes
batch_sizereg_maxout_boxes_numout_boxes_listresultsr_   ru   rs   batch_iddecode_boxesselect_scoresstridebox_distributer{   fm_hfm_wh_rangew_rangewwhhct_rowct_colcenter	reg_rangebox_distancetopk_idx
decode_boxbboxesconfidencespicked_box_probspicked_labelsclass_indexprobsmasksubset_boxes	box_probsim_scaledtclsidrz   rO   resultrd   duplicate_idxicontainmentsoverlaps	table_boxkeeps7                                                          r   __call__PicoDetPostProcess.__call__   s   !'NE+,>	q\''*
il((,q0145/3}}W/J,	j)HLM14T\\91U-!/!9h"1~."1~.))D/))D/Wg6B**,,6**,,66666"BK IIgk2	-55r7Q;6GH&|!<+bnnYQ.OO!vvl;CCGL+f4 ::eiiQi&782>#$4dnn5)h+H5 $n|&CC
$$U+##J/A 2VF ^^Lq9F..Q?K!M$Q(9(9!(<=#A{N3t333d;;q>Q&%dAgNNL%--A:N+OVWX	$"&"4"4//	
 !''	2$$k]Y__Q5G%GH  >  #$)%%bhhv&67$$Q' $&>>2B#C  +///$QU+Y-@+ BQB' >>!+DbD1<3I$B$3OP !BQB'83'%%NNNN288M+BLNN+;AqD+AK,QU3
 	 $$S%78k *n Q?

=188B B!$RURVRU4EKK&E"UUCFNN6"	 ! g6g1V9g67s7|$AM!03HLxxs 23A6H8}q (0S1GAJw4G74RQ	Sy>A%!2;<)Q!WQZ)<3 $ 	 	D "2:;(Q!WQZ(;3 $ 	 	D
 $$%GAQ$Ya%GH' %( "+7!3N!3Aq7M1!3N/ 7 T = < &HNs6   Y(Y-(Y-Y2
1Y7

Y<
-Y<
ZZ)rB   r=   r@   rA   r?   r>   N)__name__
__module____qualname____firstlineno____doc__rE   r<   rf   rv   r   __static_attributes__r   r   r   r3   r3   c   s2      % 7
24Br   r3   )r      )gh㈵>)
numpyr	   scipy.specialr   r   r   r"   r1   objectr3   r   r   r   <module>r      s1     !!@?$	#K$F Fr   